BIP32硬化派生有何不同? 图 1
BIP32硬化派生有何不同? · 图 1

HD钱包用一份根密钥派生很多账户。BIP32中的“普通”和“硬化”不是安全等级标签,而是决定父扩展公钥能否继续向下派生。路径里的撇号或h代表硬化索引;漏掉一个符号,得到的就可能是另一棵地址树。

扩展密钥不只是公钥或私钥

xpub/xprv还包含链码、深度、父指纹和子索引等信息。链码参与HMAC派生但不是密码。把xpub交给观察钱包后,对方能展开普通子公钥并关联整条地址分支,虽然不能仅凭xpub直接花费资金,隐私泄露仍然真实。

密钥树上的三条硬规则

  1. BIP32扩展密钥由密钥与32字节链码组成;普通子公钥可由父扩展公钥派生。
  2. 硬化派生使用索引2^31至2^32-1,并把父私钥材料纳入派生,因此不能仅从父xpub推导硬化子公钥。
  3. 若攻击者同时得到父xpub和某个普通子私钥,可能反推出父私钥;硬化层用于隔离这类跨层泄露。
能力普通派生硬化派生
父xpub派生子公钥可以不可以
父私钥派生子私钥可以可以
常见路径标记0、1、20’、1h、2H
风险重点xpub加普通子私钥组合泄露必须让私钥参与派生

为什么普通子私钥泄露很危险

普通派生允许从父xpub计算中间值。如果攻击者又得到该父节点下某个普通子私钥,就可能反推父私钥,继而控制同层其他分支。硬化派生把父私钥材料纳入输入,切断仅凭父xpub向下计算的路径,常用于purpose、coin type和account层隔离。

恢复时必须同时知道脚本类型

同一助记词配不同路径会生成完全不同地址,BIP44只是常见层级约定,其他钱包还会按各自脚本策略选择不同路径。恢复余额时,应核对原钱包、网络、account、change、index与脚本类型,而不是机械扫描一个默认路径。

时间锁钱包交易可结合nLockTime、CLTV和CSV理解;签署PSBT前按PSBT核对清单检查输入输出,底层UTXO关系可看比特币UTXO模型

导出xpub前的五项确认

  1. 只在确有需要时导出xpub并标明层级
  2. 核对路径中每个撇号或h
  3. 避免把子私钥与父xpub放在同一系统
  4. 备份钱包类型、网络和派生路径说明
  5. 恢复先小范围只读扫描再签名

xpub的隐私代价

“xpub不能转账,所以可以公开”忽略了地址聚类、余额监视和组合泄露;“全部使用硬化派生最好”也不总成立,观察钱包和接收地址服务器正需要普通公钥派生。正确做法是按信任边界选择,而非追求单一形式。