为什么我的钱包地址会变?
阿牛哥 Lv4

为什么我的钱包地址会变?如果你用一些官方的冷钱包,可能会发现每次收款的地址会发生改变。之前我也很好奇,明明助记词在当初设定账户的时候就已经确定下来,为什么地址还会变呢?

HD钱包

其实这正是HD钱包的特性,因为HD钱包可以有多个私钥,从而对应了多个地址。

上一篇文章的助记词举例:

wrap love mouse adjust shiver food suspect attitude boost joy reveal cushion

可以有这些密钥对:

HD钱包的生成过程

HD钱包(Hierarchical Deterministic Wallet),即“分层确定性钱包”,是能从单一的种子seed派生出几乎用不完的私钥和地址的的钱包。

它是由一些奇特的密码学算法实现的,从种子生成主私钥和主公钥,然后从主私钥继续派生出下一个私钥,从主公钥派生出下一个主公钥,而且每一级公钥和私钥又是一对密钥对。

从随机数到助记词再到seed的过程定义在BIP39中,而从seed到主密钥以及从主密钥到下一级密钥的计算过程定义在BIP32中,BIP32用到的密码学算法有点复杂。这里只做简要介绍:

  1. 将seed传入HMAC-SHA512消息认证算法,得到一个512位的数字。

  2. 将512位的数字分成两部分,前256位的主私钥和后256位的“链码”。

  3. 将前一步产生的256位私钥和256位链码以及一个32位的index(就看成当前的层级吧)作为输入传入到HMAC-SHA512中,获取下一级的512位数字

  4. 将512位数字的前256位作为父私钥,后256位作为链码。

  5. 回到步骤3,继续下一轮迭代。

因为HMAC-SHA512是一个确定性的过程,相同的输入会得出相同的输出。因此,只要知道seed就能计算出每一层的私钥和钱包地址。

HD钱包的优点

  • 单一一组助记词对应多个钱包地址,增强隐私性,配合助记词,钱包的恢复也变得简单。

  • 父私钥有权管理它下面每一级的子私钥

从管理的角度讲,上述优点可以更好地管理资产,比如公司财务部门和下属其他部门间的资产管理可以套用这种模型。

HD钱包的安全性

HD钱包包含一个漏洞,该漏洞在一定程度上会削弱其应用范围。根据V神2013年的文章,如果同时获取到账户的父公钥和子私钥,那么是可以破解出父私钥的。

但是从我们个人的使用场景来看,这种情况还是不太会发生的,而且上述漏的缓解方法早已存在。

写在最后

加密货币中涉及很多密码学技术,因此,更想深入的了解加密货币的技术就需要对一些常见的密码算法有所认识,接下来我会尝试着介绍一些基本的加密算法的原理。