比特币钱包(2) BIP32 HD钱包之生成子密钥
1. Masster Seed得到子公鑰、子私鑰
由主私鑰和鏈碼,再結合子密鑰索引(索引是一個 4Byte 序號),通過 HMAC-SHA512 衍生出子密鑰。
父級私鑰 --> 子級公鑰有兩種途徑
- 父級私鑰 --> 子級私鑰, 子級私鑰 --> 公鑰
- 父級私鑰 --> 父級公鑰, 父級公鑰 --> 子級公鑰
HMAC-SHA512(Key, data) = 64Byte子密鑰 = 左側32Byte子密鑰 + 右側32Byte ChainCode
Key: 父級的 ChainCode
data:父級公鑰(33Byte)+索引拼接
鏈碼ChainCode:用來引入確定性隨機數據,使得索引不能充分衍生其他的子密鑰。
2. 已知父級私鑰,由父級私鑰=>子級私鑰=>子級公鑰
Step1.1. 父級私鑰->父級公鑰
Step Mid. HMAC-SHA512中間過程
Step1.2. 子級私鑰 = 左側32Byte 子密鑰 + 父級私鑰
有個橢圓曲線和是否為零的校驗;校驗通過則是一個合法的子級私鑰,不合法則會跳過當前索引。
Step1.3. 子級私鑰->子級公鑰
3. 已知父級公鑰,由父級公鑰 =>子級公鑰
如圖Step Mid, step2.1 和step2.2。
(ParentPrevKey + LeftBytes) * P = ParentPrevKey * P + LeftBytes * P
=>
子級公鑰 = 父級公鑰 + ECC(左側的 32Byte子密鑰)
說明:橢圓曲線是阿貝爾群, PubKey = PrevKey * P, P 是特定橢圓曲線上常數, 其中 LeftBytes * P 即為 ECC(左側的 32Byte子密鑰);
【參考】
[1] HMAC算法可參考"HMAC(2)哈希運算消息認證碼HMAC"
[2] github wiki BIP 0032
[3] github bip-0032.mediawiki
總結
以上是生活随笔為你收集整理的比特币钱包(2) BIP32 HD钱包之生成子密钥的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 比特币钱包(1) 钱包协议总览
- 下一篇: 比特币钱包(3) BIP32 HD钱