跳转到正文
buybitcoinsmart

术语表 /钱包与托管

种子派生

种子派生是什么?
种子派生是一种单向函数,它将助记词语句加上可选的密码短语,转换为钱包据以生成密钥的512位种子。

规定于 BIP-39。

该函数是采用 HMAC-SHA512 的 PBKDF2,作用于助记词本身,而不是其背后的随机数。BIP-39将迭代次数固定为2,048,输出固定为64字节,并将您的密码短语附加在固定单词 "mnemonic" 之后,构成盐值。这一步并不检查这些单词是否曾经有效,因此输错的助记词仍会生成格式正确的种子和一个空钱包。

运作方式

种子派生接收两个输入并返回一个输出,通过一次调用完成,没有状态,也不记得是什么生成了这些单词。助记词语句是密码。盐值是文本 "mnemonic" 加上末尾附加的任何密码短语,未设置密码短语时用空字符串代替。两者都会先经过 Unicode NFKD 规范化,因此法语或西班牙语助记词中的带重音字符,无论用哪种键盘输入,哈希结果都相同。

BIP-39指出,该标准的这一半与生成助记词的那一半 "completely independent",并对此表示赞许:对语句结构没有任何限制,客户端可以编写自己的词表,甚至完整的语句生成器。实际含义则更直白。向该函数输入十二个毫无意义的单词,它照样返回64个完全可用的字节。BIP-39要求软件在这一步之外计算校验和,并 "issue a warning if it is invalid",即只是警告而非拒绝,这就是为什么有些工具会恢复一个刚刚提示您已损坏的助记词。

对语句而不是其背后的熵进行哈希,带来两个后果。将助记词逐词翻译成另一种语言,会得到完全不同的种子,因为输入字节变了,尽管底层随机数没有变。而且这一方向不可逆:任意的 BIP-32种子无法反向写成 BIP-39助记词,这就是为什么“导出种子”和“导出助记词”是两种不同的请求。

在哪里会遇到它

当两个软件对该运行哪个函数意见不一时,种子派生问题就会浮现。本站评测的 Trezor Safe 3和 Safe 5上的多份分片备份采用的是 SLIP-39而非 BIP-39:一个包含1,024个单词的词表,每次读取10位,对于128位的秘密,每份分片有20个单词,对于256位的秘密则有33个单词。这些分片从不经过 BIP-39的 PBKDF2 步骤。SLIP-39由 BIP-39的原作者发布,作为其替代方案,并将分片无法转换回来的原因归咎于 "the overly coupled design of BIP-0039 and its use of a one-way derivation function";反方向转换可行,但无论起初的长度是多少,都会迫使每份生成的分片达到59个单词。

本站对 Coldcard 的评测显示了种子派生无法为您做到的事。2021年3月的一次固件迁移,导致种子生成改为取自软件伪随机数生成器,而不是硬件生成器,Coinkite 于2026年8月1日更新了其安全公告。种子派生本身从未出错。它把一个薄弱的秘密转换成了格式正确的64字节种子,并附有有效的校验和,下游的任何钱包都无从察觉。

若想在不冒任何风险的情况下观察该函数的运行,BIP-39公布了测试向量,列出熵、助记词和最终种子的对应关系,每个向量均使用密码短语 "TREZOR"。

种子派生 vs 派生路径

种子派生只发生一次,在任何密钥存在之前;派生路径则在之后每次需要地址时被调用。这一差别决定了恢复后看似为空的钱包问题有多严重。路径错误只是一个设置问题:更改脚本类型,重新扫描,余额就会出现。密码短语错误则会改变种子,进而改变其下的整棵密钥树,任何设置都无法找回原来的那一棵。

请勿混淆

常见问题

种子派生会检查我的助记词是否有效吗?

不会,它接受任何文本。BIP-39将校验和检查置于派生函数之外,只要求钱包在校验失败时向您发出警告,因此含有错误单词的助记词仍会派生出格式完全正确的64字节种子,并打开一个空钱包。

翻译后的助记词能打开同一个钱包吗?

不能,它会打开另一个钱包。派生是对语句而非其背后的随机数进行哈希,因此把英文单词换成对应的西班牙语或日语单词,会改变输入字节,进而改变随后的每一个密钥。

种子派生与 BIP-39是一回事吗?

它是 BIP-39的一半。该标准规定了两种不同的转换:将熵转换为单词,以及将单词转换为种子。种子派生是第二种,BIP-39指出这两者彼此完全独立。

接着阅读

相关术语

钱包与托管中的更多术语

阅读本页英文版