2021-01-07 09:48:22 [ 区块链 ] 留言:0 阅读:7
来源:https://www.imooc.com/article/43968
放个我写的以太坊bip44实现: https://github.com/wuminzhe/ethereum_bip44.rb
bip32约定,主密钥(master private key)是从一个种子值生成的,步骤如下:
从(P)RNG生成所选长度(128到512位;建议256位)的种子字节序列S。
计算I = HMAC-SHA512(Key =“Bitcoin seed”,Data = S)
将I分为两个32字节序列,IL和IR。
使用parse256(IL)作为主密钥,IR作为主链码.
BIP44中定义的标准key派生结构:
Master key / Purpose Code(44) / Coin Code / Account Index / Change Address(Boolean) / Child Index
先生成一个512位伪随机数,然后对这个伪随机数使用HMAC-SHA512哈希算法,得到一个512位的值,左半边的256位就是master private key,右半边的256位作为chain code用于key的派生。
为了派生出一个child private key,master private key 和 chain code 和 index 一起被哈希成一个新的512位的值,然后这个值的左边是child private key,右边是child chain code.
上面的过程其实就是hardened派生,就是private key参与的派生叫做hardened派生。
另外一种派生就是public key参与的派生,这里描述下过程:
从private key可以得到public key,然后public key 和 chain code 和 index 一起被哈希成一个新的512位的值,然后这个值的左边是child public key,右边是child chain code.
这种派生的好处是安全,不需要private key就能生成需要的n多地址。
来源:https://www.imooc.com/article/43968