术语表 /钱包与托管
BIP39
又称 BIP-39、助记词、助记码、助记词标准。
- BIP39是什么?
- BIP39 是2013年提出的规范,它将钱包熵编码为取自固定的2,048词词表的单词,并将其扩展为512位种子。
规定于 BIP-39。
几乎所有在售的钱包都实现了该规范,因此在一个品牌的设备上抄写下来的助记词可以在另一个品牌的设备上恢复。该文档于2013年9月10日提交,而 Bitcoin Core 至今仍未实现它。它对您的备份所具有的权威性来自行业采用,而不是来自标准流程。
运作方式
SatoshiLabs 的 Marek Palatinus 和 Pavol Rusnak,以及 Aaron Voisine 和 Sean Bowe 编写了 BIP-39。该规范只定义了两种转换,别无其他。
第一种转换将随机数变为单词。钱包取128、160、192、224或256位的熵,用 SHA-256对其做哈希,并将该哈希的前若干位(位数等于熵长度除以32)附加在后作为校验和。随后每11位读取一次,每一段从恰好包含2,048个单词的词表中选出一个单词。这五种熵长度分别得到12、15、18、21和24个单词,您实际会遇到的两种是这一范围的两端。
校验和故意设计得很短。12词助记词带有四位校验位,因此随机拼凑的十二个有效单词约有十六分之一的概率通过验证。这足以发现几乎所有手工抄写错误,却远不足以使凭空编造的助记词变得安全。
第二种转换将单词变为种子。助记词先规范化为 Unicode NFKD,然后使用 PBKDF2 通过 HMAC-SHA512 迭代2,048次,盐值由字面字符串 "mnemonic" 加上可选的用户密码短语构成。无论助记词是12个单词还是24个,输出始终为512位。
词表是标准的一部分,而不是装饰。英文词表的构造使得任何两个单词的前四个字母都不相同,并排除了外形易混淆的单词对。官方词表还有日语、韩语、西班牙语、简体和繁体中文、法语、意大利语、捷克语和葡萄牙语。助记词只有对照其所取自的词表才有意义,因此将西班牙语助记词输入仅支持英文的钱包会立即失败。
在哪里会遇到它它它
每一个硬件钱包的设置界面、每一个“使用12或24个单词恢复”的对话框,以及主流软件中的每一个恢复流程,底层都是 BIP-39。由此产生的兼容性是实实在在的,值得保护:正因如此,设备损坏只是一件麻烦事,而不是一次损失。
该标准的弱点在于它没有涵盖的内容。助记词并不说明由哪种派生路径、脚本类型或钱包软件生成,也没有版本字段可供日后扩展。两个钱包可以正确读取同样的单词,却仍向您显示不同的地址和不同的余额。将路径与单词一同记录下来是通行的变通办法,但这完全是一种约定,规范本身对此并无帮助。
2,048次 PBKDF2 迭代是另一项批评。这个次数在2013年时计算成本就很低,如今更是微不足道,因此对选择了弱可选密码短语的人来说,这种扩展几乎起不到保护作用。它对单词本身毫无保护,单词依靠的是其128位或256位的机器生成熵。
BIP39 vs HD 钱包
BIP-39将单词变为种子;BIP-32将种子变为密钥树。它们是由不同作者撰写的两份独立文档,钱包可以只实现其中之一。Bitcoin Core 完全是分层确定性钱包,且完全不支持助记词。Electrum 同样是分层确定性钱包,并使用其自有的、内置版本标记的助记词格式。请将“兼容 BIP-39”理解为对读取您的单词的承诺,而不是对之后会出现哪些地址的承诺。