区块链/等级 IV · 深入协议/4.3 托管与隐私/课程 1
HD 钱包(BIP32、BIP44、BIP84、BIP86)
从一个种子派生出一整棵密钥树
材料处于测试模式(testnet 或 signet)的钱包,切勿使用真实种子能显示派生路径的 HD 钱包或工具笔记本
好奇
- 一颗种子如何能够生成数量几乎无限、且独一无二、同时还能被恢复的私钥?
- 为何一个泄露的子私钥,再加上父级的扩展公钥,就能暴露非硬化分支中的所有密钥?
- 在费用效率方面,传统的 P2PKH 地址与原生 SegWit 或 Taproot 地址之间存在怎样的结构差异?
探索
- 在 Pieter Wuille 于2012年提出 BIP32 之前,钱包为每个新地址生成随机密钥对。备份钱包意味着要逐一保存每个私钥;一旦丢失某个备份文件,对应的资金就无法找回。BIP32 改变了这一模式:从单个主种子派生出一棵确定性的密钥树。如今,整个资金历史都锚定在这一个种子上,该种子通常由128位或256位熵生成,并抄写为12个或24个单词。
- 派生路径遵循 BIP44(2014年)定义的结构:`m / purpose' / coin_type' / account' / change / index`。撇号表示硬化派生,这是一项关键的安全机制。在非硬化派生中,如果攻击者同时获得父级扩展公钥(xpub)和任意一个子私钥,就可以通过数学计算推出父级私钥。硬化派生切断了这种关联:即使子私钥泄露,结合 xpub 也无法推断出父级的任何秘密。
- BIP44 对前三个层级进行了标准化,从而在同一层级结构内支持多种币种。`purpose'` 层级标识所采用的标准(例如 BIP44 为44,BIP84 为84)。`coin_type'` 层级用于区分资产,比特币的索引为0。这样,一个种子即可管理不同的加密货币,而不会混用它们的密钥。`account'` 层级将资金划分为相互独立的账户,每个账户都有自己的找零链。扩展公钥(xpub)通常在这一层级派生。
- BIP84 更新了以 `bc1q` 开头的原生 SegWit 地址的标准,将 purpose 设为84。这类地址比传统格式更高效,因为其见证数据在交易权重计算中享有折扣,从而降低手续费。派生路径变为 `m / 84' / 0' / account' / change / index`。例如,账户0的第一个外部地址在 `m/84'/0'/0'/0/0` 处派生。这种结构使服务器无需接触任何私钥,即可从 xpub 生成收款地址。
- BIP86 是 Ava Chow 于2021年为 Taproot 编写的另一套派生标准,它将 purpose 设为86,派生以 `bc1p` 开头的单密钥 Taproot 地址。BIP86 涵盖不含脚本树的单密钥 Taproot 输出。由于 Taproot 的密钥路径也可以承载聚合密钥(例如 MuSig2 密钥),多方钱包的输出在链上可能与这些单密钥输出看起来完全相同。
- 钱包会向前扫描以检测已使用的地址,通常在一条链上连续遇到20个未使用地址(即“gap limit”,地址间隔上限)后停止。如果在该范围内没有发现任何交易,钱包便认为已找到该账户的全部现有密钥。要验证这一机制,可以打开任意一款现代 HD 钱包,找到其派生路径设置,识别每个层级:purpose(用途)、币种类型、账户、找零和索引。从同一个种子派生两条不同的路径,确认它们生成不同的密钥,同时都能通过原始助记词完整恢复。
关键事实
- BIP32 从单个主种子派生出一棵确定性的子密钥树。
- 硬化派生(用 `'` 标记)可在子私钥和 xpub 均遭泄露时防止父密钥泄露。
- BIP44 的路径结构为 `m / purpose' / coin_type' / account' / change / index`。
- purpose 84 对应原生 SegWit 地址(`bc1q`),其手续费效率高于传统格式。
- purpose 86 对应单密钥 Taproot 地址(`bc1p`)。
- 钱包通常在连续遇到20个未使用地址后停止扫描(即 gap limit)。
练习 九、六、三、一
9收集列出来自不同钱包或标准的9条派生路径。注明每条路径的 purpose(用途)、币种类型以及地址格式。
6归类按脚本类型将这9条路径分为6类:传统 P2PKH、嵌套 SegWit、原生 SegWit、Taproot、多币种或其他。
3提炼将这6类归纳为3个理由,说明钱包开发者为何会选择某条派生路径而非另一条。
1凝结用一句话解释:硬化派生如何防止主密钥因子密钥而暴露。
事实核查
日期、数字及数据均依据下方列出的已发表资料进行核实。
- P. Wuille, BIP32: Hierarchical Deterministic Wallets (2012)
- M. Palatinus & P. Rusnak, BIP44: Multi-Account Hierarchy for Deterministic Wallets (2014)
- P. Rusnak, BIP84: Derivation scheme for P2WPKH based accounts (2017)
- A. Chow, BIP86: Key Derivation for Single Key P2TR Outputs (2021)
- A. M. Antonopoulos & D. A. Harding, Mastering Bitcoin, 3rd ed. (2023), ch. 5