金鑰、錢包與帳戶抽象化

BIP-39

BIP-39 是把錢包的原始祕密轉換成一串你能寫在紙上的普通單字的標準——也就是熟悉的十二或二十四個單字的「助記詞」。長串的十六進位很容易抄錯、也不可能記住;BIP-39 把那段熵對應到一本精挑細選、固定 2048 個單字的字典上,讓備份對人類友善,甚至內建錯字檢查。

產生助記詞先從全新的隨機性開始:128 位元的熵產出 12 個字,256 位元產出 24 個字。錢包附上一段校驗碼,其長度等於該熵的 SHA-256 雜湊的前(熵長度 / 32)位元,接著把合併後的位元串切成每 11 位元一段,每段索引 2048 字清單中的一個單字(因為 2^11 = 2048)。還原時,同一段校驗碼能讓錢包拒絕一份抄錯的助記詞,因為隨機的錯字幾乎不可能湊出有效的校驗碼。

關鍵在於:這些單字並不是種子——它們是熵的編碼。真正餵給 BIP-32 的那 64 位元組種子,是把助記詞透過 PBKDF2 搭配 HMAC-SHA512、迭代 2048 次、以字串「mnemonic」加上一段選用的使用者通行密語為鹽,拉伸而得。那段選用的通行密語(有時稱「第 25 個字」)能用同一組單字造出一個截然不同的錢包,可用於合理推諉或「誘餌」設定——但一旦遺忘,資金便無法救回,因為它是被攪入種子本身,而非存放於任何地方。

seed = PBKDF2(PRF = HMAC-SHA512, password = mnemonic, salt = 'mnemonic' + passphrase, iterations = 2048, dkLen = 64 bytes)

助記詞加上選用的通行密語,被拉伸成 BIP-32 所使用的 64 位元組主種子。

一個常見誤解是字表必須是英文。助記詞轉種子那一步雜湊的是確切的 UTF-8 單字字串,因此一份助記詞只有在採用相同字表與正規化的錢包中才能正確還原;真正重要的是「熵到單字」的對應,而非語言本身。

又称
mnemonic phrase助記詞