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, 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 encoding이지 개별 keys가 아니며 동의어도 bits를 바꾼다. 앞 4글자는 목록 안에서 유일하다. 정렬·번역·추측은 다른 data, 때로 다른 valid mnemonic이다. [BIP 39 — Mnemonic code for generating deterministic keys] [BIP 39 official wordlists]
Mnemonic/passphrase는 UTF-8 NFKD다. 악센트 문자는 분해될 수 있고 space/order/case/모든 문자가 중요하다. 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은 0 balance다. 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 error는 없다. typo는 빈 wallet이다. 단어가 도난되면 public chain을 보며 offline 후보를 시험한다. 높은 entropy, trusted entry, 분리된 확실한 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이다. 일부 사고만 찾고 교정·인증하지 않으며 공격자도 계산한다. 온라인 checker에 단어를 넣지 않는다. [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]
비영어 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.
01BIP 39는 Bitcoin 합의의 일부인가요?+
아닙니다. 무작위성을 표현하고 시드를 도출하는 지갑 간 규약입니다. Bitcoin 노드는 키가 BIP 39로 만들어졌는지 몰라도 트랜잭션과 블록을 검증합니다.
0212개 또는 24개 단어로 된 모든 구문이 BIP 39와 호환되나요?+
아닙니다. 단어 수만으로는 부족합니다. 단어 목록과 순서, 체크섬, NFKD 정규화, 시드 도출이 일치해야 합니다. 원래 지갑을 복원하려면 사용한 경우 올바른 passphrase와 해당 파생 경로 및 스크립트 유형도 필요합니다.