分層確定性錢包爲什麼用父私鑰和父公鑰能推導出相同的子公鑰?

用父私鑰推導子私鑰,可以推導出兩種子私鑰,一種是普通的子私鑰,一種是增強型子私鑰。而題目裏說的相同的子公鑰其實只是普通的子公鑰。也就是說,用父公鑰是無法推導出相同的子公鑰的。

用普通父私鑰推導子私鑰的過程是這樣的:

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

而父私鑰+ 子擴展私鑰就等於子私鑰。

所以這二者就是相等的。

這裏要區分子擴展私鑰和子私鑰。

(全文完)

 

 

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