软化派生的常见使用场景是,把父公钥交给委托的服务器,服务器可以通过父公钥生成子公钥,从而获得对应的地址用于收款。
然后在自己的信任的足够安全服务器上,生成子私钥,用于签署交易。
特性对比
特性 (Feature) | 软化派生 (Non-hardened) | 硬化派生 (Hardened) |
---|---|---|
索引范围 | 0 到 2³¹-1 | 2³¹ 到 2³²-1 |
从父公钥派生 | 可以派生出子公钥。 | 不可能,会直接返回失败。 |
派生算法输入 | 哈希计算过程中使用父公钥。(哪怕是通过父私钥计算子私钥的这一过程,也使用到了父公钥。而父公钥,父私钥,子私钥三者同时出现在了一个等式中,就为反推父私钥提供了可能性,这就是为什么软化派生不安全的根本原因) | 哈希计算时使用父私钥。 |
安全性 | 存在风险:泄露的子私钥和父公钥可共同推导出父私钥。 | 安全:切断了上述风险,泄露子私钥不会危及父密钥。 |
主要用途 | 需要分享公钥以生成收款地址的场景(如电商服务器、审计)。(因为可以把自己的父公钥交给第三方,第三方可以用委托的父公钥直接生成子公钥,从而生成收款地址) | 账户层级的安全隔离,创建密码学防火墙以防止风险蔓延。 |
Q & A
Q1: 如果我的软化派生,只派生、分发子公钥,子私钥只保管在最核心、安全的环境中,理论上也不会有什么风险是吗?
A:
理论上,这个模型是正确且安全的。这正是BIP-032中非硬化派生(软化派生)设计的经典应用场景,通常被称为“观察钱包”(Watch-only Wallet)模式。
在这种严格隔离的理想情况下,由于攻击者只能接触到公钥信息,无法获得反向推导父私钥所需的“子私钥”这一关键部分,因此资产是安全的。
然而,“理论上” 是这里的关键词。之所以我们仍然需要硬化派生,是为了增加“纵深防御”(Defense in Depth),以防范理论之外的实际风险。现实中,“最核心、安全的环境”也可能因以下原因被攻破:
-
软件或硬件漏洞:使用的钱包软件或硬件设备可能存在未知漏洞。
-
操作时被攻击:在使用私钥签名交易时,所连接的设备(如电脑)可能感染了恶意软件。
-
用户失误:用户可能无意中泄露了单个私钥或助记词备份。
硬化派生的作用就是一道防火墙 。通过在关键层级(如账户层)使用硬化派生,即使某个账户下的子私钥因为意外而完全泄露,也能确保损失被控制在该账户内,
不会向上危及主私钥或其他账户 。
Q2: 如果整棵树都是软化派生的,是否意味着其中一个子私钥泄露了,整棵树上的所有私钥就都泄露了?
A:
是的。
如果一整棵BIP-32派生树全部使用非硬化(软化)派生,那么泄露树上任何一个节点的子私钥,都将导致整棵树上的所有私钥面临被推导出来的风险。
这个过程像一个连锁反应,可以被称为“向上攀爬”攻击:
-
核心漏洞: 根据BIP-032规范,知道一个父扩展公钥和任何一个由它非硬化派生出的子私钥,就等同于知道了父扩展私钥 。
-
向上攀爬: 假设一个层级很深的子私钥(例如
m/0/1/2
)泄露了。攻击者可以利用这个私钥和它的父公钥(M/0/1
),推导出父私钥m/0/1
。 -
连锁反应: 因为从
m/0
到m/0/1
的派生也是非硬化的,攻击者现在可以利用新获得的m/0/1
和它的父公钥M/0
,继续向上推导出更上一层的父私钥m/0
。 -
最终失陷: 这个过程可以一直重复,直到最终推导出整棵树的根——主私钥(master private key)
m
。 -
完全控制: 一旦主私钥被泄露,攻击者就可以重新派生出这棵树上的每一个私钥和公钥,从而完全控制整个钱包 。因此,尽量保证整个派生树上需要安全隔离的叶子节点到根的路径,都使用硬化派生,防止出现一片叶子的陷落,毁掉整棵树的安全性情况。