分层确定性钱包为什么用父私钥和父公钥能推导出相同的子公钥?

用父私钥推导子私钥,可以推导出两种子私钥,一种是普通的子私钥,一种是增强型子私钥。而题目里说的相同的子公钥其实只是普通的子公钥。也就是说,用父公钥是无法推导出相同的子公钥的。

用普通父私钥推导子私钥的过程是这样的:

childExtendKey = HMAC-SHA256(父公钥 | 子索引号,父链码)

而childExtendKey由64字节组成,前32字节是子扩展私钥,后32字节是子链码

子私钥 = 父私钥 + 子扩展私钥

子公钥 = (子私钥 mod secp256k1.N)*secp256k1.G

 

父公钥推导子公钥的过程是这样的:

childExtendKey = HMAC-SHA256(父公钥 | 子索引号,父链码)

而childExtendKey由64字节组成,前32字节是子扩展私钥,后32字节是子链码

子扩展公钥 = 子扩展私钥*G

子公钥 = Add(父公钥, 子扩展私钥)

 

所以观察上面两个过程,就知道差别在最后两个步骤。也就是为什么

子公钥 = (子私钥 mod secp256k1.N)*G

子公钥 = Add(父公钥, 子扩展私钥)

这上下两个式子会相等。

其实这就是密码学中的椭圆曲线的特性。

我们都知道私钥和公钥的推导公式

PubKey = PrivKey*G, 其中G是基点。

而两个公钥相加,其实就是椭圆曲线上的两个点相加

Add(父公钥, 子扩展公钥)  = 父私钥*G + 子扩展私钥*G

根据椭圆曲线在离散有限循环域上的满足乘法结合律,上面的等式等同于下面的等式

Add(父公钥, 子扩展公钥)  =  ((父私钥+ 子扩展私钥)mod secp256k1.N)*secp256k1.G

而父私钥+ 子扩展私钥就等于子私钥。

所以这二者就是相等的。

这里要区分子扩展私钥和子私钥。

(全文完)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值