美文网首页区块链
比特币源码研读(2)--钱包标准BIP32

比特币源码研读(2)--钱包标准BIP32

作者: caiklaus | 来源:发表于2018-09-24 15:14 被阅读77次

    之前了解了比特币的私钥、公钥和地址。简单地说,私钥是256位的随机数,公钥是私钥通过椭圆曲线算法计算出来,而地址是公钥经过哈希算法得出。

    而比特币钱包,广义上是指为用户管理私钥和地址、跟踪余额和创建交易的应用程序。狭义上,是指管理密钥的容器。不同与现实中的钱包,比特币钱包里面存放的只是密钥,好比放的只是保险柜钥匙。

    比特币有两种类型的钱包:

    第一种类型是非确定性钱包(nondeterministic wallet),其中每个密钥都是从随机数独立生成的。密钥彼此无关。

    第二种类型是确定性钱包(deterministic wallet),其中所有的密钥都是从一个主密钥派生出来,这个主密钥即为种子(seed)。该类型钱包中所有密钥都相互关联,如果有原始种子,则可以再次生成全部密钥。确定性钱包中使用了许多不同的密钥推导方法。最常用的推导方法是使用树状结构,称为分级确定性钱包或HD钱包。

    非确定性钱包是指钱包里各个私钥之间互不关联。

    确定性钱包是指钱包里所有的私钥是从一个主密钥计算派生出来,这个主密钥即为种子Seed。最常用的派生推导方法是树状结构,称为分级确定性钱包或HD钱包。而为了方便使用,种子Seed又会被编码成英文单词,即助记词。

    而现在的比特币钱包是确定性钱包,HD钱包是基于BIP-32。在wallet.cpp,GenerateNewKey会生成新的比特币地址,其中会判断是否HD钱包模式。

    1.将种子Seed通过HMAC-SHA512生成主私钥master private key和一个链码chain code,主私钥再计算出主公钥master public key。

    2.用master private key + chain code可以得到指定的子私钥sub private key;

    3.用 master public key + chain code可以得到指定的子公钥sub-public key;

    作者:区块链研习社比特币源码研读班,晓涛_Klaus

    相关文章

      网友评论

        本文标题:比特币源码研读(2)--钱包标准BIP32

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