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

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

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

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

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

所以这二者就是相等的。

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

(全文完)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章