BIP39 mnemonic → BIP32 child key
Turn a 12/15/18/21/24-word mnemonic plus an optional passphrase into the 512-bit BIP39 seed, then walk the BIP32 path level by level down to a leaf private key — with the chain code and compressed public key of every intermediate step, ending in a WIF and a spendable address.
Enter a value above and press Convert. Not sure what to type? Press “Use example” to load the sample from the placeholder.
What this page computes
It turns a BIP39 mnemonic sentence plus an optional passphrase into a 512-bit seed, then walks a BIP32 derivation path one level at a time until it lands on a private key that has a WIF, a public key, a hash160 and an address. Nothing is cached: every number on this page is recomputed from the text you type.
I = HMAC-SHA512(key = "Bitcoin seed", data = seed) → kmaster = I[0..31], cmaster = I[32..63]
The BIP39 English wordlist (2048 words) is not installed on this server, and this page therefore cannot verify a mnemonic's checksum. It also cannot generate a mnemonic from entropy and cannot convert a mnemonic back into entropy. What it can do is exactly what the BIP39 specification defines for the second half of the algorithm: the PBKDF2 step, which takes the sentence as an opaque UTF-8 string and never looks at the words.
The consequence is severe: a mistyped or misspelled word still produces a perfectly
well-formed 512-bit seed and a complete, valid-looking wallet — just not your wallet. If you type
abandom instead of abandon, every number on this page is correct for a phrase that
no wallet would ever accept, and the funds sitting at your real address are unreachable this way. Always
recover a wallet in software that owns the wordlist and reports an explicit checksum error.
1. BIP39: how 128–256 bits of entropy become words
A BIP39 mnemonic is a human-transcribable encoding of a random number. The encoder is:
- Draw
ENTbits of entropy from a cryptographically secure random source, whereENT ∈ {128, 160, 192, 224, 256}. - Compute
CS = ENT / 32and take the firstCSbits ofSHA-256(entropy). These bits are the checksum. - Concatenate:
ENT ‖ CSbits in total. - Cut that bit string into groups of 11 bits. Each group is an integer in
[0, 2047], i.e. an index into the 2048-word list (2¹¹ = 2048, which is exactly why the groups are 11 bits wide). - Write the words down in order and join them with single spaces.
Two design details are worth admiring. First, the checksum is not a separate word: it is glued to the tail
of the entropy, so it can only be validated by someone who owns the wordlist. Four checksum bits catch all
single-word errors and (per the BIP) essentially all two-word errors; a wallet that rejects your phrase is
usually rejecting the checksum. Second, the wordlist is chosen so that no two words share their first
four letters — abandon, ability, able, about … are
distinct after four characters. That makes the phrase robust to handwriting mistakes, allows wallets to accept
four-letter abbreviations, and makes the last three letters of every word redundant for disambiguation.
| Words | Entropy ENT | Checksum CS = ENT/32 | Total bits ENT+CS | Entropy bits carried by the last word | Possible last words |
|---|---|---|---|---|---|
| 12 | 128 | 4 | 132 | 7 | 128 |
| 15 | 160 | 5 | 165 | 6 | 64 |
| 18 | 192 | 6 | 198 | 5 | 32 |
| 21 | 224 | 7 | 231 | 4 | 16 |
| 24 | 256 | 8 | 264 | 3 | 8 |
The last column explains why a 24-word phrase is not "24 free words": the final word must carry the 8 checksum bits, leaving only 3 bits of real choice, so for any given first 23 words only 8 candidates for the last word are valid. A checksum failure is therefore a strong signal — and it is precisely the signal this server cannot produce.
2. The BIP39 seed: PBKDF2, and why the words are never hashed directly
The mnemonic is not a key. It is stretched into the seed with PBKDF2-HMAC-SHA512, the passphrase acting as a salt. Every parameter below is fixed by the specification, which is why two wallets given the same words and the same passphrase always agree:
| Parameter | Value | Why it matters |
|---|---|---|
| Password input | the mnemonic sentence, UTF-8, NFKD-normalised, single spaces | Extra spaces or a different word order change the seed completely. |
| Salt | "mnemonic" ‖ passphrase (the literal prefix mnemonic, no separator) | This is the entire mechanism of the "25th word". |
| PRF | HMAC-SHA512 | A 512-bit output means the whole seed is 512 bits. |
| Iterations | 2048 | Deliberately cheap in 2013 and no longer a serious barrier — see §6. |
| Derived key length | 64 bytes (512 bits) | Split later into master key and chain code. |
BIP39 requires both the mnemonic and the passphrase to be normalised to Unicode NFKD form before they are
fed to PBKDF2, so that two visually identical strings with different byte encodings (for example an accented
é written as one code point versus e + combining accent) produce the same seed.
This server has no intl extension, so Normalizer is unavailable and
the normalisation step is a documented no-op. For the English wordlist — which is pure ASCII —
that is provably harmless. For a non-ASCII passphrase it is not, and the page warns you when it detects
non-ASCII input. The results panel states exactly which normalisation state was used.
What the seed is not: it is not a private key, it is not a BIP32 key, and it is not a wallet backup by itself. It is the input to the next step. And note the direction of the dependency: the mnemonic determines the seed, the seed determines every key below, and nothing determines the mnemonic from the seed (HMAC-SHA512 is one-way).
3. BIP32: master key, chain code, and the CKD function
BIP32 turns the 64-byte seed into a tree of keys with one HMAC-SHA512 call for the root and one per level:
kmaster = IL = I[0..31] cmaster = IR = I[32..63]
The chain code c is 32 bytes of extra secret-ish entropy that is carried
alongside every key in the tree and is mixed into every HMAC. It is not a key you can spend with, but it is
not public: anyone holding a chain code plus a parent public key can derive every non-hardened child
public key. Each step of CKDpriv is:
normal (i < 2³¹): I = HMAC-SHA512(cpar, serP(Kpar) ‖ ser32(i))
ki = (IL + kpar) mod n ci = IR
Here ser256 is the 32-byte big-endian private key, serP is the 33-byte
compressed public key, and i + 2³¹ is what the apostrophe in a path means. Child keys are
obtained by adding scalars modulo n, which is safe because of the identity
(a+b)·G = a·G + b·G on the curve.
Why hardened derivation exists
In normal derivation the HMAC input contains only the parent's public key. Therefore anyone who
knows the chain code, the parent public key and one child private key can recompute
IL = kchild − kpar in reverse and recover
kpar = kchild − IL mod n — and then every sibling and cousin.
Hardened derivation puts 0x00 ‖ kpar into the HMAC instead, so the derivation
genuinely requires the parent's private key. That is the whole point, and it is why the
m/44'/0'/0' levels are hardened while /0/0 are not.
Extended keys: xprv and xpub
A key plus its chain code serialised with a version byte is an extended key:
xprv… (version 0x0488ADE4) or xpub… (version
0x0488B21E); testnet uses tprv/tpub. An xpub leak
hands an attacker every address and balance in that subtree, and — if any single non-hardened child private
key ever leaks — the parent private key too. An xprv leak is worse: it hands over the entire
subtree of spendable keys, permanently. Never paste an xprv anywhere; treat an xpub as semi-private.
| Field | Bytes | Content |
|---|---|---|
| version | 4 | 0x0488ADE4 xprv / 0x0488B21E xpub (mainnet) |
| depth | 1 | 0 for the master key, otherwise the level number |
| parent fingerprint | 4 | first 4 bytes of hash160(parent public key); 0x00000000 for the master |
| child number | 4 | the index i, including the hardened bit |
| chain code | 32 | c for this node |
| key data | 33 | 0x00 ‖ ser256(k) for xprv, or serP(K) for xpub |
| checksum | 4 | Base58Check: first 4 bytes of SHA256d, appended before encoding |
4. Derivation paths: BIP44, BIP49, BIP84, BIP86
A BIP32 path is read left to right, and each level has an agreed meaning. For single-key wallets the
convention is m / purpose' / coin_type' / account' / change / address_index:
| Level | Meaning | Typical value | Hardened? |
|---|---|---|---|
m | the master key derived from the seed | — | — |
| purpose | which address standard this account uses | 44 / 49 / 84 / 86 | yes |
| coin_type | which chain (0 = Bitcoin, 1 = testnet, 60 = Litecoin…) | 0 | yes |
| account | a separate "account" or vault; a new account means a fresh hardened branch | 0, 1, 2 … | yes |
| change | 0 = receive addresses, 1 = internal change addresses | 0 or 1 | no |
| address_index | the 0-based position of the address inside the chain | 0, 1, 2 … | no |
| BIP | Purpose | Path | Address type | Looks like |
|---|---|---|---|---|
| BIP44 | 44' | m/44'/0'/0'/0/0 | P2PKH (legacy) | 1… |
| BIP49 | 49' | m/49'/0'/0'/0/0 | P2SH-P2WPKH (nested SegWit) | 3… |
| BIP84 | 84' | m/84'/0'/0'/0/0 | P2WPKH (native SegWit) | bc1q… |
| BIP86 | 86' | m/86'/0'/0'/0/0 | P2TR key-path (Taproot) | bc1p… |
The two unhardened levels exist so that a watch-only wallet can hold an xpub and enumerate every receiving address without ever seeing a private key. The price of that convenience is exactly the leak described above.
5. The passphrase: the "25th word"
The BIP39 passphrase is not part of the wordlist and not part of the mnemonic — it is the salt of the PBKDF2 call. For a 24-word mnemonic people call it the 25th word because it behaves like one extra word that you must supply from memory. Three consequences follow, and all three destroy funds every year:
- A different passphrase is a different wallet. Same 12 words, one character of difference in the passphrase, and the seed, every key and every address change completely. There is no error message and nothing to compare against — the new wallet is simply empty.
- Forgetting it loses everything. The passphrase is stored nowhere; the wordlist backup does not contain it. Recovery means brute-forcing your own memory, and no support channel exists.
- It is not a strong password KDF. 2048 PBKDF2-HMAC-SHA512 iterations is a small barrier; a short or dictionary passphrase can be attacked offline.
Used well, it is genuinely useful: it makes a stolen piece of paper useless. Used casually, it is the most common way people lock themselves out of their own coins.
6. Official test vector for the demo mnemonic
The sample phrase in the input box is the first official BIP39 English test vector — the encoding of 128
bits of zero entropy. The published vector pairs it with the passphrase TREZOR, and that is the
one independent check that proves the PBKDF2 step here is correct:
| Input | Value |
|---|---|
| Mnemonic | abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about |
| Passphrase | TREZOR |
| Expected seed (official vector) | c55257c360c07c72029aebc1b53c05ed0362ada38ead3e3e9efa3708e53495531f09a6987599d18264c1e1c92f2cf141630c7a3c4ab7c81b2f001698e7463b04 |
| What this page produces | the same 128 hex digits — verified against the vector before this page was written |
Type the phrase and TREZOR into the form to reproduce it live. Note that this test vector says
nothing about checksum validation: the PBKDF2 step succeeds for any string at all, which is exactly the
limitation described at the top of this page.
7. Worked example: the demo mnemonic through m/44'/0'/0'/0/0
With an empty passphrase, the demo phrase produces these real values (all of them are recomputed live by the form above):
| Step | Value |
|---|---|
| 512-bit seed | 5eb00bbddcf069084889a8ab9155568165f5c453ccb85e70811aaed6f6da5fc19a5ac40b389cd370d086206dec8aa6c43daea6690f20ad3d8d48b2d2ce9e38e4 |
m — master private key | 1837c1be8e2995ec11cda2b066151be2cfb48adf9e47b151d46adab3a21cdf67 |
m — chain code | 7923408dadd3c7b56eed15567707ae5e5dca089de972e07f3b860450e2a3b70e |
| Master as an extended key | xprv9s21ZrQH143K3bVKuH7Zze1UdMjVNjJ3yB6in8So97Rf4QA7BC2jWbTnKegMrBVqF5nUbXC4NHUxPUjQRu8pc97VkYwn3UcZWMCoHRtiSnR |
m/44' | cd46049fb82a4fccbd967c5234e61152f4df87d01d1ef833420814c67ee4b7ea |
m/44'/0' | a7661fa497f67a7d5a17f299e76635e16d69aca8b89ac8022cabad47690f47f6 |
m/44'/0'/0' | fe64af825b5b78554c33a28b23085fc082f691b3c712cc1d4e66e133297da87a |
m/44'/0'/0'/0 | 83bda5c7add17ef9bbc1f03391913fe6cc947aa18c4a343607724e815c83eeb7 |
m/44'/0'/0'/0/0 — leaf private key | e284129cc0922579a535bbf4d1a3b25773090d28c909bc0fed73b5e0222cc372 |
| Leaf WIF (compressed) | L4p2b9VAf8k5aUahF1JCJUzZkgNEAqLfq8DDdQiyAprQAKSbu8hf |
| Leaf public key (compressed) | 03aaeb52dd7494c361049de67cc680e83ebcbbbdbeb13637d92cd845f70308af5e |
| hash160 | d986ed01b7a22225a70edbf2ba7cfb63a15cb3aa |
| P2PKH address (BIP44) | 1LqBGSKuX5yYUonjxT5qGfpUsXKYYWeabA |
| P2SH-P2WPKH (BIP49) / P2WPKH (BIP84) / P2TR (BIP86) | 3HkzTaFbEMWeJPLyNCNhPyGfZsVLDwdD3G / bc1qmxrw6qdh5g3ztfcwm0et5l8mvws4eva24kmp8m / bc1plguuppjuw5uk2rpyjnnzvwsuvy5ctswns9fsvhrvn4qt04ns4nmscf9eqf |
Finally, the whole point of the passphrase, demonstrated with the same twelve words and the same path:
| Passphrase | Seed (first 16 hex) | Leaf private key | Leaf address |
|---|---|---|---|
| (empty) | 5eb00bbddcf06908… | e284129cc0922579… | 1LqBGSKuX5yYUonjxT5qGfpUsXKYYWeabA |
correct horse battery staple | af1c9b2fb5ae8365… | 03b9ba9ccd649220… | 1KpKVJDi9siSpDoULuCgmEKYTfFU3Neg7a |
TREZOR | c55257c360c07c72… | cdd74cbef2372344… | 1PEha8dk5Me5J1rZWpgqSt5F4BroTBLS5y |
8. Common mistakes
- Typing a real seed phrase into a website. Including this one. A page can do anything with it. Use a hardware wallet's own screen, or an offline machine you control.
- Trusting a wallet that does not check the checksum. If a recovery tool silently accepts a phrase with a typo — as this page must, for lack of the wordlist — you may end up staring at an empty wallet and concluding your coins are gone.
- Assuming the passphrase is backed up with the words. It is not, by design. Write it down separately, or not at all — but decide deliberately.
- Reusing one account index for different purposes. The account, change and address-index levels are a directory structure; reusing indices across standards mixes keys in ways wallets cannot see.
- Confusing the layers. BIP39 is words; BIP32 is the key tree; BIP44/49/84/86 are path conventions; each address standard hashes its own public-key serialisation. None of them is "the wallet".
- Believing 2048 iterations protects a weak passphrase. It does not; the words carry the security, the passphrase only adds a salt.
9. Quick reference
| Item | Value |
|---|---|
| Legal word counts | 12, 15, 18, 21, 24 |
| Wordlist size | 2048 words = 2¹¹ → 11 bits per word |
| Checksum | first ENT/32 bits of SHA-256(entropy) |
| Seed derivation | PBKDF2-HMAC-SHA512, 2048 iterations, salt "mnemonic" ‖ passphrase, 64-byte output |
| Master key | HMAC-SHA512("Bitcoin seed", seed) → key ‖ chain code |
| Child derivation | hardened: 0x00 ‖ kpar ‖ ser32(i); normal: serP(Kpar) ‖ ser32(i) |
| Hardened bit | i ≥ 2³¹, written as an apostrophe in the path |
| Mainnet extended-key versions | 0x0488ADE4 (xprv), 0x0488B21E (xpub) |
| Default BIP44 path | m/44'/0'/0'/0/0 |
| Checksum verified by this page? | No — the wordlist is not installed on this server |