跳转到正文
buybitcoinsmart

术语表 /地址与密钥

主链码

又称主私钥、Master chain code。

主链码是什么?
主链码是您的种子经64字节哈希运算后得到的右半部分,与位于 HD 钱包树深度零处的主私钥配对。

规定于 BIP-32。

您每一个密钥都派生自这一对密钥。对种子执行一次 HMAC-SHA512 运算,以 ASCII 字符串 Bitcoin seed 作为密钥,得到64字节:前32字节成为主私钥,后32字节成为主链码。复制了种子,就等于复制了它之下的一切,这正是备份只是一句话,而不是一整个文件柜的原因。

运作方式

主密钥对的生成只在创建钱包时进行一次。BIP-32接受128至512位之间的种子,推荐256位,并将其送入上述带密钥的哈希运算。得到的这一对密钥就是每条派生路径开头写作 m 的节点,其上再无其他节点。

这一步中暗含一项有效性检验。如果左侧32字节为零,或者是大于或等于 secp256k1 曲线阶的数,BIP-32就判定该种子无效,实现方必须拒绝它。出现这两种情况的概率低于1比2的127次方,因此从未有钱包报告过此类情况,但这条规则使每一个被接受的种子都能被明确无误地使用。

序列化之后,根节点会自我标明身份。主网的扩展私钥带有版本字节0x0488ADE4,显示为 xprv;扩展公钥带有0x0488B21E,显示为 xpub。在根节点处,深度字节为0x00,父指纹和子编号都是四个零字节,因为不存在可指向的父节点。

您实际接触到的数字是指纹,而不是原始字节。对主公钥依次进行 SHA-256和 RIPEMD-160哈希,取前四个字节,就得到一个八位十六进制字符串,它能标识一个钱包,却不泄露任何可由此推导出的信息。

在哪里会遇到它

面向用户的软件会完全隐藏主密钥对,转而显示指纹。Sparrow 把指纹印在每个密钥库旁边,Bitcoin Core 在 listdescriptors 输出的每一行开头都用方括号标出指纹,Coldcard 则在主屏幕上显示指纹,方便您确认设备当前保存的是哪一个种子。收到 PSBT 时,签名设备甚至在判断该请求是否发给自己之前,就先将密钥来源字段中的指纹与自己的指纹比对。

在多重签名中,根节点的身份不再是无关紧要的细节。2-of-3钱包仅凭三组助记词无法恢复,因为重建它还需要知道每位共同签名者的指纹和路径。因此,每一款正规的多重签名工具都会提示您把钱包描述符与助记词一起保存,也因此,丢失描述符可能使任何单独一组助记词都无法取回的比特币被困住。

您直接接触主私钥的唯一时刻是导入。把 xprv 粘贴到软件中,就等于交出了整棵树:每一个用途、每一个账户、每一个未来的地址,且无法把授权范围缩小到某一个分支。根节点没有部分版本,这就是硬件钱包完全拒绝导出它的原因。

主链码 vs 助记词

助记词在先,主密钥对在后,两者属于不同的标准。BIP-39通过运行 PBKDF2 共2,048轮,把12或24个单词转换为512位种子;随后 BIP-32再把该种子转换为主私钥和主链码。这两层彼此足够独立:添加密码短语会改变种子,进而改变主密钥对及其下的每一个地址,而您卡片上的单词则丝毫不变。Electrum 从另一个角度说明了这一点:它的恢复短语根本不是 BIP-39,却仍会产生普通的 BIP-32根节点。

请勿混淆

常见问题

我的钱包一直显示的主指纹是什么?

它是您根密钥的八位标识符,取自主公钥哈希的前四个字节。钱包和签名设备用它来确认某笔交易或某个描述符属于其所持有的种子。

我是否应该导出或保存主私钥?

不应该。xprv 会同时授予对每一个账户和每一个未来地址的控制权,而且没有任何钱包需要您提供它。请改为备份助记词,只有在需要仅观察权限时,才导出账户级别的扩展公钥。

相关术语

地址与密钥中的更多术语

阅读本页英文版