美文网首页
bip-0032 HD钱包

bip-0032 HD钱包

作者: ladybuggy | 来源:发表于2019-03-04 15:35 被阅读0次

原文地址

大概看了一下,产生了一个疑问: 公钥是由私钥经过ECDSA算法生成的, 在HD钱包中, 可以由父公钥生成子公钥, 父私钥生成子私钥, 那么子公钥和子私钥能是一对吗, 即ECDSA(子私钥)是否等于子公钥, 看了一下比特币官方开发者文档 ,里面有一个公式,说的应该就是这个问题:

point( (parent_private_key + i) % p ) == parent_public_key + point(i)

下面是具体的hd钱包生成算法,自己也是一边看一边理解,所以还没翻译完, 希望后续自己能坚持补充完吧。

1. 使用随机数生成器生成一个字节序列作为种子S, 长度为128bits至512bits, 建议256bits.

// GenSeed returns a random seed with a length measured in bytes.

// The length must be at least 128.

func GenSeed(length int) ([]byte, error) {

    b := make([]byte, length)

    if length < 128 {

        return b, errors.New("length must be at least 128 bits")

    } 

    _, err := rand.Read(b)

    return b, err

}

2. 计算 I = HMAC-SHA512(key="Bitcoin seed", Data=S), 结果为64bytes的字节序列, 使用左边32bytes即I(L)作为主密钥, 右边32bytes即I(R)作为链码.

key := []byte("Bitcoin seed")

    mac := hmac.New(sha512.New, key)

    mac.Write(seed)

    I := mac.Sum(nil)

    secret := I[:len(I)/2]

    chain_code := I[len(I)/2:]

相关文章

网友评论

      本文标题:bip-0032 HD钱包

      本文链接:https://www.haomeiwen.com/subject/vswduqtx.html