比特币学习之 HD 钱包——总结
HD 钱包 使用单个种子生产密钥树 分层确定性钱包(HD 钱包)是从单一来源生产所有密钥和地址的钱包。
HD 钱包
使用单个种子生产密钥树
分层确定性钱包(HD 钱包)是从单一来源生产所有密钥和地址的钱包。 确定性: 每次的密钥和地址都是以相同的方式生产出来的 分层性: 密钥和地址可以组成一个树
什么是比特币钱包
在虚拟币世界,我们经常听到钱包一词,钱包也是比特币的基础知识。它关系到我们的财产安全,今天我们来了解比特币钱包。
现实世界钱包里会贮存纸币,硬币。类比现实,很多人会错误的认为自己的比特币钱包里储存着自己的比特币。真实情况是,你的钱包里没有比特币,只有一把钥匙(实际是一串字符)。你可以通过这把钥匙管理你的比特币,真正的比特币在哪?真正的比特币以UTXO的形式储存在比特币网络中。
为了形象的解释这个问题,我们可以想象一下自己有一千万现金,这些现金存入银行,通过指纹解锁才能打开银行金库。这里,指纹就是那把钥匙,拥有指纹的你就是“钱包”。你身上并没有钱,你把钱存在了银行里,银行里记录着XXX在本银行有一千万现金。在这里银行记录的是XXX在本银行有一千万现金,在比特币世界,你拥有10个比特币钱包的账户在外也要有一个公开的名称,这就是公钥,而你自己保管的钥匙就是私钥。
为什么要使用分层确定性钱包(HD 钱包)
在说为什么要使用 HD 钱包前,我们先说一下比特币的特性,在比特币设计时,为了更好的保护用户的隐私,每次交易都要使用新的密钥和地址。
- 单一备份
由于上述的钱包的定义,所以每当我们想要获得一些比特币时,都得独立的生成成对的公钥和私钥。
所以这就意味着每次当收到付款时,都得需要备份我们的钱包。

所以,我们需要一个新的技术,只需要保存极少数的信息,而不需要保存所有的公私钥队。——> HD 钱包
使用分层确定性钱包,就可以使用一个"种子"来创建一个主私钥,同时使用主私钥就可以生成数十亿的"子"私钥和公钥

这就极大的减轻了我们的记忆负担。我们现在只需要备份"种子"就可以了。然后种子创建的主私钥就会(确定性地)为钱包生成密钥。
- 独立地生成公钥
使用 HD 钱包最神奇的地方就是,主私钥可以推算出主公钥,而主公钥可以在没有私钥的情况下生成"子"公钥。

根据这个特性,我们就可以将主公钥发送到不同的电脑上去生成新的接收地址,同时还不需要担心泄漏私钥。
这对于像硬钱包这样的东西很有用,你可以把私钥保存在一个安全的设备上,同时在其他不同的计算机上也很方便的生成新地址去接收付款。
这听起来很玄幻,但这就是数学。
HD 钱包是如何工作的
- 从熵到助记词再到种子
随机生成128到258位的随机数,我们这里叫做熵;
熵经过一定处理方法,生成助记词;
助记词经过密钥延伸函数PBKDF2,生成种子;
- 从种子到母密钥
种子经过HMAC-SHA512算法,生成母密钥;
- 从母密钥到子密钥
通过CKD(child key derivation)函数,母密钥生成众多子密钥。