Password-Based Key Derivation Function 2 是确定性派生函数,参数包括输入、盐值、迭代次数、伪随机函数和输出长度。BIP39 规定特定的 PBKDF2-HMAC-SHA512 配置,而非 PBKDF2 的所有用途。
名为 password 的输入是 UTF-8 NFKD 助记词。盐值为 mnemonic + passphrase,同样采用 UTF-8 NFKD;没有 passphrase 时附加空值。BIP39 要求 HMAC-SHA512、2048 次迭代和 64 字节、即 512 位输出。 [BIP39 — Mnemonic generation and seed conversion]
PBKDF2 用密码输入、盐值和输出块索引生成首个中间结果,再用同一伪随机函数处理前一个结果,得到后续中间结果,并通过 XOR 合并这些值。HMAC-SHA512 的块为 64 字节,因此 BIP39 只需一个块。仅对文本应用 2048 次 SHA-512 并不足够。 [RFC8018 — PBKDF2 construction] [BIP39 — Mnemonic generation and seed conversion]
相同的规范化输入和参数产生相同 seed。恢复时擅自增加 2048 次迭代或更改函数,并不是提高现有钱包的安全性:结果将不再符合 BIP39 规定的派生。把单词翻译为另一词表也不是中性修改。 [BIP39 — Mnemonic generation and seed conversion]
迭代增加每次尝试所需工作,但不增加独立的秘密随机性。攻击者持有单词和钱包比对数据时,可离线尝试弱 passphrase。因此,512 位输出并不意味着等同于 512 位熵的保护,2048 也不是新系统的通用建议。 [RFC8018 — PBKDF2 construction] [BIP39 — Mnemonic generation and seed conversion]
BIP39 checksum 帮助在使用前发现单词错误。PBKDF2 转换本身与助记词生成和校验分开;它不证明 passphrase 属于目标钱包。随后,BIP32 或其他确定性方法可在下一步骤使用该 seed。 [BIP39 — Mnemonic generation and seed conversion]
公开 BIP39 测试向量列出熵、单词以及测试 passphrase TREZOR 对应的预期 seed。正确实现必须重现完整输出并遵循 NFKD。这些已知输入绝不能作为存放资金的个人备份;测试匹配本身也不能验证整个应用的安全性。 [BIP39 — Mnemonic generation and seed conversion]
要获得更完整的理解,请将本词条与以下词条结合阅读: BIP 39, BIP39 passphrase, Seed Generation, HD Wallet. 反向关联还来自: BIP39 passphrase.