BIP 32 分层确定性钱包非硬化派生数学证明

February 11, 2017 3 min read

基于 BIP 32 标准,解析分层确定性钱包(HD Wallets)中非硬化派生(Unhardened Derivation)的数学原理。利用椭圆曲线密码学(ECC)的点加法分配律,证明通过父公钥派生子公钥与通过父私钥派生子公钥在数学上的等价性。


1. 核心数学公理

非硬化派生的可行性完全依赖于椭圆曲线密码学(ECC)的以下两条基本性质:

  • 公私钥定义:公钥 $K$ 为私钥 $k$ 与基点 $G$ 的标量乘积。 $$ K = k \cdot G $$
  • 点乘分配律:标量的算术加法对应于椭圆曲线上的点加法。 $$ (a + b) \cdot G = a \cdot G + b \cdot G $$

2. 派生参数计算

无论采用何种路径,派生过程均需首先计算共享的中间随机分量(偏移量)

  • 输入参数
    • $K_{parent}$:父公钥(若仅知父私钥 $k_{parent}$,则 $K_{parent} = k_{parent} \cdot G$)。
    • $C_{parent}$:父链码(Chain Code),作为熵源。
    • $i$:子索引(Index),非硬化派生要求 $0 \le i < 2^{31}$。
  • 偏移量 $I_L$ 计算: 使用 HMAC-SHA512 算法生成 512 位哈希,取左侧 256 位作为整数偏移量 $I_L$。 $$ I = \text{HMAC-SHA512}(Key=C_{parent}, Data=K_{parent} \ || \ i) $$ $$ I_L = \text{Left256Bits}(I) $$

3. 路径等价性证明

本节通过代数推导,证明私钥路径公钥路径生成的子公钥 $K_{child}$ 完全一致。

3.1 路径一:私钥派生(标准路径)

基于父私钥 $k_{parent}$ 计算子私钥,进而生成子公钥。

  1. 计算子私钥:将偏移量 $I_L$ 与父私钥标量相加(模 $n$)。 $$ k_{child} = (I_L + k_{parent}) \pmod n $$
  2. 推导子公钥: $$ K_{child(1)} = k_{child} \cdot G = (I_L + k_{parent}) \cdot G $$

3.2 路径二:公钥派生(扩展路径)

仅使用父公钥 $K_{parent}$ 和偏移量 $I_L$ 直接计算子公钥。

  1. 计算偏移点: $$ P_{I_L} = I_L \cdot G $$
  2. 推导子公钥:将父公钥点与偏移点进行椭圆曲线点加法。 $$ K_{child(2)} = P_{I_L} + K_{parent} $$

3.3 数学归纳

将路径一的结果展开,利用分配律验证其是否等于路径二:

  1. 展开路径一结果: $$ K_{child(1)} = (I_L + k_{parent}) \cdot G $$
  2. 应用分配律: $$ K_{child(1)} = (I_L \cdot G) + (k_{parent} \cdot G) $$
  3. 代入定义
    • 代入 $P_{I_L} = I_L \cdot G$
    • 代入 $K_{parent} = k_{parent} \cdot G$
  4. 得出结论: $$ K_{child(1)} = P_{I_L} + K_{parent} = K_{child(2)} $$

证毕:私钥标量加法在公钥层面上表现为椭圆曲线点加法,两者结果恒等。


4. 适用边界与限制

  • 非硬化派生(Unhardened):当索引 $i < 2^{31}$ 时,HMAC 输入使用父公钥 ($K_{parent}$)。此模式允许公钥派生公钥,适用于观察钱包(Watch-only Wallet)。
  • 硬化派生(Hardened):当索引 $i \ge 2^{31}$ 时,HMAC 输入强制使用父私钥 ($k_{parent}$)。此模式切断了公钥推导路径,牺牲便利性以换取更高的安全性(防止父公钥泄露导致的链式私钥反推风险)。

关键结论 (Key Takeaways)

  • 数学本质:HD 钱包的非硬化派生利用了椭圆曲线密码学的同态性质(分配律)。
  • 公钥独立性:在非硬化模式下,无需私钥即可通过父公钥和链码推导出所有子公钥。
  • 安全前提:该特性仅在索引 $i < 2^{31}$ 时有效;一旦父扩展公钥(xpub)和任意一个子私钥同时泄露,攻击者可反推父私钥。