BIP39はSHA-256のENT/32 checksum bitsを付加し、2,048語表の11-bit indexに分け、NFKD mnemonic/passphraseへPBKDF2-HMAC-SHA512を2,048回適用する。64-byte出力はBIP32へ渡るが、path・account・scriptは含まれない。
著者はPalatinus、Rusnak、Voisine、Bowe、2013-09-10 assigned、Status Deployed。機械乱数を読める形で運ぶ。自作文章はbrainwalletである。NodeはBIP39を検証せずtransactionに語はない。 [BIP 39 — Mnemonic code for generating deterministic keys]
ENTは128/160/192/224/256、CS=ENT/32のSHA256先頭bits、MS=(ENT+CS)/11で12/15/18/21/24語。12語は128 random+4 check bits、24語は256+8。安全性はRNGに依存する。 [BIP 39 — Mnemonic code for generating deterministic keys]
11 bitsごとに順序付き2,048語から選ぶ。語はbitstream表現で個別keyではなく、同義語もbitsを変える。先頭4文字は表内一意。並べ替え・翻訳・推測は別data、時に別のvalid mnemonicを作る。 [BIP 39 — Mnemonic code for generating deterministic keys] [BIP 39 official wordlists]
Mnemonic/passphraseはUTF-8 NFKD。アクセント等は分解され、space、順序、case、全characterが重要。Japanese vectorsが検証する。別normalizationは見た目が近くても別valid walletになる。 [BIP 39 — Mnemonic code for generating deterministic keys] [Trezor python-mnemonic reference implementation] [BIP 39 official test vectors]
PBKDF2はpassword=mnemonic、salt=‘mnemonic’+passphrase、HMAC-SHA512、2,048 rounds、64 bytes。passphraseなしは空suffix。逆変換ではない。語が漏れれば弱いpassphraseを2,048 roundsは十分守らない。 [BIP 39 — Mnemonic code for generating deterministic keys] [RFC 8018 — PBKDF2]
BIP39はseedで終了。BIP32が‘Bitcoin seed’からmaster key/chain codeを作り、BIP44/49/84/86がpaths/scriptsを選ぶ。誤ったaccount/change/gap/typeは残高ゼロ。Descriptorとwallet metadataが必要。 [BIP 32 — Hierarchical deterministic wallets] [BIP 44 — Multi-account hierarchy] [BIP 84 — Native SegWit derivation] [BIP 86 — Single-key Taproot derivation] [BIP 380 — Output script descriptors] [Bitcoin Core — Output descriptors]
どのpassphraseもvalid seedを作りwrong-password errorはない。typoは空walletを開く。Mnemonic漏洩後はpublic chainに対しoffline候補試行が可能。高entropy、trusted input、別の確実なbackupが要る。 [BIP 39 — Mnemonic code for generating deterministic keys] [Trezor — passphrases and hidden wallets]
Checksumは12語で4 bits、24語で8 bits。random passは1/16と1/256。事故の一部だけを検出し、訂正・認証せず攻撃者も計算できる。オンライン検査へ語を入力しない。 [BIP 39 — Mnemonic code for generating deterministic keys]
資金前にtrusted offline recoveryを試す。順序、exact passphrase、origin wallet、derivation/script、multisig/descriptorを記録。写真・cloud・printer・clipboardは支出権を漏らす。紙は火水、metalは盗難を防がない。 [BIP 380 — Output script descriptors] [Trezor — passphrases and hidden wallets] [Bitcoin Core — Output descriptors]
非English listは互換性上非推奨で、翻訳はseedを変える。Electrum native seedはBIP39ではない。version/address typeもない。SLIP39は1,024語の非互換threshold formatで、BIP39語を分けるだけはShamirではない。 [BIP 39 — Mnemonic code for generating deterministic keys] [Electrum documentation — seed version system] [SLIP 39 — Shamir's Secret-Sharing for Mnemonic Codes]
単語、チェックサム、シード
BIP 39 は 128 ビットのエントロピーと 4 ビットのチェックサムを組み合わせます。132 ビットを 11 ビットずつ 12 グループに分け、単語を選びます。PBKDF2-HMAC-SHA512 は正規化した文と任意の passphrase から 2 048 回の反復で 512 ビットのシードを導きます。チェックサムはランダム性を増やしません。
理解を深めるには、この項目とあわせて次もお読みください Seed Phrase, HD Wallet, BIP39 passphrase, Trezor, Bitcoin, BIP39 checksum. 次の項目からも参照されています Seed Phrase, HD Wallet, Cold Storage, Trezor.