零点课堂丨什么是HD钱包

目前市场上的手机钱包app按私钥保存的不同表现形式,大致可以分为两种:一种是纯私钥保存,另一种则是种子保存(助记词保存)。
纯私钥保存很好理解,我们都知道公钥和私钥是由非对称加密技术形成的一对钥匙,私钥可以对公钥上的交易进行签名,继而证明自己拥有这个公钥的控制权。因此,早期的钱包以及目前大部分的公链钱包都是支持私钥导入的。
那么种子保存(助记词保存)又是什么呢?在说明这个问题之前要先澄清一个很大部分人对助记词的误区。很多人曾经认为(包括年轻的情报员),助记词是钱包公司创建的一种保存私钥的方式,比如你在进入一个新安装的钱包app之前,钱包会提示你记录下一串词语,并告诉你记录下这串词语就等于掌握了这个钱包中的比特币私钥和以太坊私钥。
实际上这个说法是有歧义的,这种说法让多数人认为,助记词是由这个钱包中的私钥经过一串加密技术转化而成。但是实际上,助记词并非由私钥推演而来,相反的,私钥是由助记词推演而来,助记词则由种子推演而来。
在介绍种子、助记词、私钥三者关系之前,要先讲述BIP协议。
BIP协议的全称是Bitcoin Improve Protical,意即比特币提升协议,它是一个用来提升比特币使用实用性的一种协议。
在BIP协议中,BIP32、BIP39、BIP44是对比特币私钥管理的使用性提高所做的协议,更确切地说,是HD钱包技术的的底层协议。
比特币社区十分倡导Principle Of Avoiding Reuse,即用过的比特币地址就不要再用了,这样有助于交易隐私的保护和地址的安全性。毕竟,如果一个地址有太多的交易记录,而这个地址又和某个人有大量的联系时,相当于这个人的大量交易记录公之于众。而频繁换地址的另一好处,就是提升安全性,要知道量子技术也难以对一个未知的地址发起计算攻击。由此也可以认识到,UTXO的可变交易输出是对比特币安全性提升的一大保证。
但是如果仅仅使用老旧的私钥管理技术,就意味着使用者必须在钱包中预设非常多的比特币地址,这些地址都是各自随机生成的,使用者在一个地址转账时,为了保证Principle Of Avoiding Reuse,在每一次转账后,都将交易输出指向另一个地址。
这种操作手法有一个最大的麻烦,那就是私钥的管理和保存。要知道,要做到保证的足量的交易的话,地址数量需要达到上百上千个,这对普通交易者明显是非常不友好的。这种用来保存无任何联系的地址的钱包叫做非确定性钱包。

因此,BIP32中提出了提出了一套确定性钱包的解决方案协议,即HD钱包协议。HD钱包的全称是Hierarchical Deterministic Wallet,译为树状确定性钱包。顾名思义,在HD钱包中管理的地址之间是有关系的,地址的生成如同树种-树干-树枝的关系。
怎么理解呢?
在BIP32中,规定了一个种子是如何形成的,以及这个种子如何生成一系列的私钥。只要掌握了这串种子,就等于控制了根据这个种子生成的私钥。
随机生成一个种子做示范:【233232995d0e556517d11125ec3e7d1fff8eeae0c36fd9fd91e05832a71451a502e572aa3b118a21a312f9e8c777e2f66e6d83be002dd9ea5bbc9914d7be1d99】,根据这串种子可以衍生出一系列的私钥,例如【KxV8YyTQ6Agkbtc83kGrEUuH54GxsdqtSKjV8wgP5tBzPPCbbCz7】、【KxSoFoyzY1ZMqZUbg2KeCf2aHPGaSKNS2Zd9f3PPenh65sNEc917】、【L3toyntWFZWqfpuZNr1tMYP8z1v8jGCsAfdikwkoQhsdE3WmFcYc】...
只要掌握了种子,就掌握了这些私钥和这些私钥所控制的比特币。种子和私钥的关系就如同树种-树干-树枝的关系,可见HD钱包的命名是形象生动的。
掌握种子显然比掌握成百上千的私钥要方便的多,但显然128位的字符并不好记。于是比特币开发社区在BIP39提出了助记词方案。BIP39中所提出的解决方案是,随机生成数位的助记词,通过这些单词和单词的顺序就能得到种子。
BIP39具体的解决方案是,定义一个包含2048个单词的单词表(参考链接:https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt),生成一串随机序列后,对这串随机序列做一定的算法演变,得到一个新的序列,将序列分割成好几个部分后,将每个部分与单词表上的一个单词做对应,就得到了助记词。而助记词再通过密钥生成函数PBKDF2就能生成种子。
至此,助记词——种子——私钥的生成过程就完成了。BIP32和BIP39方案使得普通数字货币持有者只要记住一串助记词,就能管理无数个地址。
当然,BIP协议不仅仅适用于比特币,在BIP44中还提出了支持多币种的解决方案,即用一个助记词和种子就能管理包括比特币在内的多种数字货币,例如以太坊也支持BIP44。但需要说明的是,HD钱包的一系列协议还是天然最适合比特币,而不太适用于别的数字货币。原因就在于比特币的UTXO特性,而包括以太坊、EOS在内的其他公链都是账户体系。账户体系意味着,余额会存留在旧的账户,倘若转移到新账户,就需要额外一笔手续费。
文末,再补充个脑钱包的知识。脑钱包虽然感觉上去和助记词差不多,都是通过一串单词短语来记住一个一串字符,但脑钱包生成的是一串私钥,不是种子,并且脑钱包的的短语生成不是随机性的,而是很大程度上依赖于人类的语言逻辑。
比如你将一句“今天晚上7点钟,又能看币圈邦德的文章了也。”输入脑钱包生成器,就能得到一串私钥【12ZRkBHjfubmotwyfkzff78AScEkXnhDhb】,但是如前面所说,“今天晚上7点钟,又能看币圈邦德的文章了也。”这句话的逻辑性太强,逻辑与随机是冲突的事情,只有随机才能保证安全性。
最后贴两个有趣的地址供大家玩耍:
助记词生成网址【https://iancoleman.io/bip39/】
脑钱包生成网址【https://www.bitaddress.org】
本文由 零点财经 作者:Conin 发表,其版权均为 零点财经 所有,文章内容系作者个人观点,不代表 零点财经 对观点赞同或支持。如需转载,请注明文章来源。
分享生成图片
59

发表回复

零点课堂丨什么是HD钱包

2019-09-18 14:24:44

目前市场上的手机钱包app按私钥保存的不同表现形式,大致可以分为两种:一种是纯私钥保存,另一种则是种子保存(助记词保存)。
纯私钥保存很好理解,我们都知道公钥和私钥是由非对称加密技术形成的一对钥匙,私钥可以对公钥上的交易进行签名,继而证明自己拥有这个公钥的控制权。因此,早期的钱包以及目前大部分的公链钱包都是支持私钥导入的。
那么种子保存(助记词保存)又是什么呢?在说明这个问题之前要先澄清一个很大部分人对助记词的误区。很多人曾经认为(包括年轻的情报员),助记词是钱包公司创建的一种保存私钥的方式,比如你在进入一个新安装的钱包app之前,钱包会提示你记录下一串词语,并告诉你记录下这串词语就等于掌握了这个钱包中的比特币私钥和以太坊私钥。
实际上这个说法是有歧义的,这种说法让多数人认为,助记词是由这个钱包中的私钥经过一串加密技术转化而成。但是实际上,助记词并非由私钥推演而来,相反的,私钥是由助记词推演而来,助记词则由种子推演而来。
在介绍种子、助记词、私钥三者关系之前,要先讲述BIP协议。
BIP协议的全称是Bitcoin Improve Protical,意即比特币提升协议,它是一个用来提升比特币使用实用性的一种协议。
在BIP协议中,BIP32、BIP39、BIP44是对比特币私钥管理的使用性提高所做的协议,更确切地说,是HD钱包技术的的底层协议。
比特币社区十分倡导Principle Of Avoiding Reuse,即用过的比特币地址就不要再用了,这样有助于交易隐私的保护和地址的安全性。毕竟,如果一个地址有太多的交易记录,而这个地址又和某个人有大量的联系时,相当于这个人的大量交易记录公之于众。而频繁换地址的另一好处,就是提升安全性,要知道量子技术也难以对一个未知的地址发起计算攻击。由此也可以认识到,UTXO的可变交易输出是对比特币安全性提升的一大保证。
但是如果仅仅使用老旧的私钥管理技术,就意味着使用者必须在钱包中预设非常多的比特币地址,这些地址都是各自随机生成的,使用者在一个地址转账时,为了保证Principle Of Avoiding Reuse,在每一次转账后,都将交易输出指向另一个地址。
这种操作手法有一个最大的麻烦,那就是私钥的管理和保存。要知道,要做到保证的足量的交易的话,地址数量需要达到上百上千个,这对普通交易者明显是非常不友好的。这种用来保存无任何联系的地址的钱包叫做非确定性钱包。

因此,BIP32中提出了提出了一套确定性钱包的解决方案协议,即HD钱包协议。HD钱包的全称是Hierarchical Deterministic Wallet,译为树状确定性钱包。顾名思义,在HD钱包中管理的地址之间是有关系的,地址的生成如同树种-树干-树枝的关系。
怎么理解呢?
在BIP32中,规定了一个种子是如何形成的,以及这个种子如何生成一系列的私钥。只要掌握了这串种子,就等于控制了根据这个种子生成的私钥。
随机生成一个种子做示范:【233232995d0e556517d11125ec3e7d1fff8eeae0c36fd9fd91e05832a71451a502e572aa3b118a21a312f9e8c777e2f66e6d83be002dd9ea5bbc9914d7be1d99】,根据这串种子可以衍生出一系列的私钥,例如【KxV8YyTQ6Agkbtc83kGrEUuH54GxsdqtSKjV8wgP5tBzPPCbbCz7】、【KxSoFoyzY1ZMqZUbg2KeCf2aHPGaSKNS2Zd9f3PPenh65sNEc917】、【L3toyntWFZWqfpuZNr1tMYP8z1v8jGCsAfdikwkoQhsdE3WmFcYc】...
只要掌握了种子,就掌握了这些私钥和这些私钥所控制的比特币。种子和私钥的关系就如同树种-树干-树枝的关系,可见HD钱包的命名是形象生动的。
掌握种子显然比掌握成百上千的私钥要方便的多,但显然128位的字符并不好记。于是比特币开发社区在BIP39提出了助记词方案。BIP39中所提出的解决方案是,随机生成数位的助记词,通过这些单词和单词的顺序就能得到种子。
BIP39具体的解决方案是,定义一个包含2048个单词的单词表(参考链接:https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt),生成一串随机序列后,对这串随机序列做一定的算法演变,得到一个新的序列,将序列分割成好几个部分后,将每个部分与单词表上的一个单词做对应,就得到了助记词。而助记词再通过密钥生成函数PBKDF2就能生成种子。
至此,助记词——种子——私钥的生成过程就完成了。BIP32和BIP39方案使得普通数字货币持有者只要记住一串助记词,就能管理无数个地址。
当然,BIP协议不仅仅适用于比特币,在BIP44中还提出了支持多币种的解决方案,即用一个助记词和种子就能管理包括比特币在内的多种数字货币,例如以太坊也支持BIP44。但需要说明的是,HD钱包的一系列协议还是天然最适合比特币,而不太适用于别的数字货币。原因就在于比特币的UTXO特性,而包括以太坊、EOS在内的其他公链都是账户体系。账户体系意味着,余额会存留在旧的账户,倘若转移到新账户,就需要额外一笔手续费。
文末,再补充个脑钱包的知识。脑钱包虽然感觉上去和助记词差不多,都是通过一串单词短语来记住一个一串字符,但脑钱包生成的是一串私钥,不是种子,并且脑钱包的的短语生成不是随机性的,而是很大程度上依赖于人类的语言逻辑。
比如你将一句“今天晚上7点钟,又能看币圈邦德的文章了也。”输入脑钱包生成器,就能得到一串私钥【12ZRkBHjfubmotwyfkzff78AScEkXnhDhb】,但是如前面所说,“今天晚上7点钟,又能看币圈邦德的文章了也。”这句话的逻辑性太强,逻辑与随机是冲突的事情,只有随机才能保证安全性。
最后贴两个有趣的地址供大家玩耍:
助记词生成网址【https://iancoleman.io/bip39/】
脑钱包生成网址【https://www.bitaddress.org】