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

2021-01-06 15:07:49  [ 区块链 ]      留言:0      阅读:10

来源:https://blog.csdn.net/maxdaic/article/details/106801707


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

maxdaic 2020-06-17 10:34:10 180 收藏
分类专栏: 比特币技术研究 区块链 文章标签: 密码学 区块链

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

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

  1. childExtendKey = HMAC-SHA256(父公钥 | 子索引号,父链码)
  2. 而childExtendKey由64字节组成,前32字节是子扩展私钥,后32字节是子链码
  3. 子私钥 = 父私钥 + 子扩展私钥
  4. 子公钥 = (子私钥 mod secp256k1.N)*secp256k1.G

 

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

  1. childExtendKey = HMAC-SHA256(父公钥 | 子索引号,父链码)
  2. 而childExtendKey由64字节组成,前32字节是子扩展私钥,后32字节是子链码
  3. 子扩展公钥 = 子扩展私钥*G
  4. 子公钥 = Add(父公钥, 子扩展私钥)

 

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

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

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

这上下两个式子会相等。

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

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

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

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

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

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

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

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

所以这二者就是相等的。

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

(全文完)


来源:https://blog.csdn.net/maxdaic/article/details/106801707


留言:


    更换校验码     

无觅相关文章插件,快速提升流量
分享到:
友荐云推荐 Process: 0.0355s ( Load:0.0003s Init:0.0007s Exec:0.0214s Template:0.0130s ) | DB :14 queries 1 writes | UseMem:3,022 kb