BIP32 指纹取压缩公钥的 HASH160 结果的前 4 字节。HASH160 先执行 SHA-256,再执行 RIPEMD-160,这两种函数用于计算数据的数字摘要。得到的 32 位通常显示为 8 个十六进制字符,由数字和字母组成。Chain code 是派生后续密钥所用的附加数据,不参与这个简短指纹的计算。
假设你保存了几个钱包的记录,需要区分它们。指纹就像一张短标签,由采用规定编码的公钥计算而来。它不是直接对备份词或私钥计算的哈希。单凭这个标签,既不能收款,也不能签署支付,更不能恢复密钥。因此,记下指纹不能代替真正能恢复钱包的备份。 [1]
BIP32 构建了一棵密钥树:从主密钥派生出更多密钥,就像树枝从共同的树干分出。扩展公钥 xpub 或扩展私钥 xprv 的记录中,包含的是上一层父密钥的指纹。主密钥没有父密钥,所以这个字段填的是 00000000。但这并不是主密钥自己的指纹。应用可能显示的正是主密钥自身的指纹;比较之前,要先弄清楚你读的是哪一个字段。 [1]
公开的 BIP32 测试向量 1 中,主密钥自身的指纹是 3442193e,而它的主 xpub 的父指纹字段仍然是 00000000。两者并不矛盾:一个描述密钥本身,另一个描述并不存在的父密钥。测试向量是公开的输入及预期结果,用于核验程序。绝不要用这些人人都知道的数据建立存放自己资金的钱包。 [1]
PSBT 是可以交给签名设备处理的一包交易信息。根据 BIP174,它把主指纹与派生路径关联起来,也就是说明如何找到某个具体公钥。Output Descriptor 是描述密钥和花费规则的文本,也可以记录密钥来源。签名设备检查一笔支付的找零时,不能只看指纹是否匹配。它还必须派生并核对真实密钥及相应规则,避免把别人的输出当成自己的。 [2] [3]
简短指纹节省空间,但取值范围有限:32 位只能表示 4294967296 种值。因此,不同密钥可能具有同一个指纹,这叫作碰撞,BIP32 明确要求软件考虑这种情况。指纹一致,并不能检查所有账户、派生路径或脚本类型,也就是具体的花费规则。它同样无法证明你拥有所需的私钥。 [1] [3]
首先确认比较的是同一种指纹,而且处于密钥树的同一层。结果不同,可能意味着 seed,也就是密钥的秘密基础不同,或 passphrase 这一额外密码不同。下结论之前,先排除把主密钥字段与父密钥字段混为一谈的情况。指纹匹配后,还要核对已知地址、派生路径和花费规则。指纹是有用的局部检查,却不能代替妥善保存的备份和经过验证的恢复流程。 [1] [3]
要获得更完整的理解,请将本词条与以下词条结合阅读: HD Wallet, PSBT, BIP39 passphrase, Output Descriptor. 反向关联还来自: SeedQR.