Private Key Tools

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.

Word count must be 12, 15, 18, 21 or 24 for a phrase that wallets will accept. Extra whitespace is collapsed to single spaces. This server has no BIP39 wordlist, so the checksum cannot be verified and a typo will silently produce a valid-looking but wrong wallet.
Leave empty for the standard seed. It is the salt of the PBKDF2 call: "mnemonic" ‖ passphrase. A different passphrase gives a completely different wallet, and forgetting it loses everything. Leading/trailing whitespace is trimmed by the form; internal spaces are significant. The badge above shows correct horse battery staple as a sample, and the form always uses exactly what you type.
Must start with m. ' or h marks a hardened step. Common alternatives: m/49'/0'/0'/0/0 (P2SH-P2WPKH), m/84'/0'/0'/0/0 (P2WPKH), m/86'/0'/0'/0/0 (Taproot). Empty means this default.
No input yet

Enter a value above and press Convert. Not sure what to type? Press “Use example” to load the sample from the placeholder.

How it works

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.

seed = PBKDF2-HMAC-SHA512(password = mnemonic, salt = "mnemonic" ‖ passphrase, c = 2048, dkLen = 64 bytes)
I = HMAC-SHA512(key = "Bitcoin seed", data = seed)  →  kmaster = I[0..31], cmaster = I[32..63]
words + passphrase→ PBKDF2 (2048 rounds)→ 512-bit seed→ BIP32 master key + chain code→ CKDpriv × depth→ leaf private key→ WIF / public key / address
This server has no BIP39 wordlist — read this before trusting anything below

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:

  1. Draw ENT bits of entropy from a cryptographically secure random source, where ENT ∈ {128, 160, 192, 224, 256}.
  2. Compute CS = ENT / 32 and take the first CS bits of SHA-256(entropy). These bits are the checksum.
  3. Concatenate: ENT ‖ CS bits in total.
  4. 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).
  5. Write the words down in order and join them with single spaces.
entropy (ENT bits) ‖ SHA-256(entropy)[0 .. ENT/32 − 1]  ⟶  ENT+CS bits  ⟶  (ENT+CS)/11 words

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.

WordsEntropy ENTChecksum CS = ENT/32Total bits ENT+CSEntropy bits carried by the last wordPossible last words
1212841327128
151605165664
181926198532
212247231416
24256826438

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:

ParameterValueWhy it matters
Password inputthe mnemonic sentence, UTF-8, NFKD-normalised, single spacesExtra 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".
PRFHMAC-SHA512A 512-bit output means the whole seed is 512 bits.
Iterations2048Deliberately cheap in 2013 and no longer a serious barrier — see §6.
Derived key length64 bytes (512 bits)Split later into master key and chain code.
Unicode normalisation (NFKD) — and why it is a no-op here

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:

I = HMAC-SHA512(key = "Bitcoin seed" (12 ASCII bytes), data = seed)
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:

hardened (i ≥ 2³¹):  I = HMAC-SHA512(cpar,  0x00 ‖ ser256(kpar) ‖ ser32(i))
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.

FieldBytesContent
version40x0488ADE4 xprv / 0x0488B21E xpub (mainnet)
depth10 for the master key, otherwise the level number
parent fingerprint4first 4 bytes of hash160(parent public key); 0x00000000 for the master
child number4the index i, including the hardened bit
chain code32c for this node
key data330x00 ‖ ser256(k) for xprv, or serP(K) for xpub
checksum4Base58Check: 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:

LevelMeaningTypical valueHardened?
mthe master key derived from the seed——
purposewhich address standard this account uses44 / 49 / 84 / 86yes
coin_typewhich chain (0 = Bitcoin, 1 = testnet, 60 = Litecoin…)0yes
accounta separate "account" or vault; a new account means a fresh hardened branch0, 1, 2 …yes
change0 = receive addresses, 1 = internal change addresses0 or 1no
address_indexthe 0-based position of the address inside the chain0, 1, 2 …no
BIPPurposePathAddress typeLooks like
BIP4444'm/44'/0'/0'/0/0P2PKH (legacy)1…
BIP4949'm/49'/0'/0'/0/0P2SH-P2WPKH (nested SegWit)3…
BIP8484'm/84'/0'/0'/0/0P2WPKH (native SegWit)bc1q…
BIP8686'm/86'/0'/0'/0/0P2TR 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:

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:

InputValue
Mnemonicabandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
PassphraseTREZOR
Expected seed (official vector)c55257c360c07c72029aebc1b53c05ed0362ada38ead3e3e9efa3708e53495531f09a6987599d18264c1e1c92f2cf141630c7a3c4ab7c81b2f001698e7463b04
What this page producesthe 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):

StepValue
512-bit seed5eb00bbddcf069084889a8ab9155568165f5c453ccb85e70811aaed6f6da5fc19a5ac40b389cd370d086206dec8aa6c43daea6690f20ad3d8d48b2d2ce9e38e4
m — master private key1837c1be8e2995ec11cda2b066151be2cfb48adf9e47b151d46adab3a21cdf67
m — chain code7923408dadd3c7b56eed15567707ae5e5dca089de972e07f3b860450e2a3b70e
Master as an extended keyxprv9s21ZrQH143K3bVKuH7Zze1UdMjVNjJ3yB6in8So97Rf4QA7BC2jWbTnKegMrBVqF5nUbXC4NHUxPUjQRu8pc97VkYwn3UcZWMCoHRtiSnR
m/44'cd46049fb82a4fccbd967c5234e61152f4df87d01d1ef833420814c67ee4b7ea
m/44'/0'a7661fa497f67a7d5a17f299e76635e16d69aca8b89ac8022cabad47690f47f6
m/44'/0'/0'fe64af825b5b78554c33a28b23085fc082f691b3c712cc1d4e66e133297da87a
m/44'/0'/0'/083bda5c7add17ef9bbc1f03391913fe6cc947aa18c4a343607724e815c83eeb7
m/44'/0'/0'/0/0 — leaf private keye284129cc0922579a535bbf4d1a3b25773090d28c909bc0fed73b5e0222cc372
Leaf WIF (compressed)L4p2b9VAf8k5aUahF1JCJUzZkgNEAqLfq8DDdQiyAprQAKSbu8hf
Leaf public key (compressed)03aaeb52dd7494c361049de67cc680e83ebcbbbdbeb13637d92cd845f70308af5e
hash160d986ed01b7a22225a70edbf2ba7cfb63a15cb3aa
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:

PassphraseSeed (first 16 hex)Leaf private keyLeaf address
(empty)5eb00bbddcf06908…e284129cc0922579…1LqBGSKuX5yYUonjxT5qGfpUsXKYYWeabA
correct horse battery stapleaf1c9b2fb5ae8365…03b9ba9ccd649220…1KpKVJDi9siSpDoULuCgmEKYTfFU3Neg7a
TREZORc55257c360c07c72…cdd74cbef2372344…1PEha8dk5Me5J1rZWpgqSt5F4BroTBLS5y

8. Common mistakes

9. Quick reference

ItemValue
Legal word counts12, 15, 18, 21, 24
Wordlist size2048 words = 2¹¹ → 11 bits per word
Checksumfirst ENT/32 bits of SHA-256(entropy)
Seed derivationPBKDF2-HMAC-SHA512, 2048 iterations, salt "mnemonic" ‖ passphrase, 64-byte output
Master keyHMAC-SHA512("Bitcoin seed", seed) → key ‖ chain code
Child derivationhardened: 0x00 ‖ kpar ‖ ser32(i); normal: serP(Kpar) ‖ ser32(i)
Hardened biti ≥ 2³¹, written as an apostrophe in the path
Mainnet extended-key versions0x0488ADE4 (xprv), 0x0488B21E (xpub)
Default BIP44 pathm/44'/0'/0'/0/0
Checksum verified by this page?No — the wordlist is not installed on this server