用过数字货币钱包的人应该都了解,在使用的第一步,钱包都会让你备份一个12位(也有可能是15位或更多)的助记词(可能是英文,也可能是中文,韩文,日文等)。 然后还会强调一定要抄下来妥善保管,不要截屏,不要随意透露这些助记词。但对于不了解助记词作用的人来说,很有可能因为这些操作太麻烦,太不人性化而故意忽视。
下面来介绍一下助记词的由来及作用。 在开始之前,还是想再次强调一下助记词的重要性。
助记词等于数字资产,丢失助记词就是丢失数字资产!!!
助记词的由来:
区块链(比如比特币之类的公链)公开的特性,链上所有的交易记录都可以查到,from地址是多少,to地址是多少都是公开的。如果用户一直用同一个地址做交易,那么最终还是会被人摸出线索来,不利于隐私保护。 早期比特币用户只能通过创建多个账户来实现隐私保护的需求,但同时也带来了麻烦,要备份多个私钥。 于是比特币社区的开发者提出了BIP32(BIP中文意思是比特币改进建议,32是指第32个建议)协议来解决这个问题。
BIP32协议:
BIP32协议支持一个随机数种子通过分层的方式,确定性推导的方式得到多个私钥,这样只需要记住那个随机数种子,所有的私钥都可以推导出来。 并且这个推导过程单向的,子密钥不能推导出同层级的兄弟密钥,也不能推出父密钥,BIP32协议的层次结构如下图所示:
BIP32协议结构
但BIP32协议也有一定的缺点,就是随机数种子不规则,不利于记忆。 于是比特币社区的开发者又提出了BIP39改进建议来解决这个问题。
BIP39协议:
BIP39将随机数种子以方便记忆和书写的字表示,一般由 12 个单字组成(也可以有15位或更多,看编码方式),这些字称为助记词。
助记词原理生成:将128bits的随机数种子补位成 132bits 的数值,然后平均拆分成 12个 数值,最后到单词表中根据下标获取对应的 12个单词。 这12个单词就称为助记词。详细流程如下:
1.随机生成128bits的随机数种子
2.将 随机数种子进行hash-256运算,获取哈希值开头的 4个 bits,与随机数种子组成一个新数值(132bits)
3.以11bits为单位,拆分第2步中生成的新数值,每11bits个数值转成一个10进制数
4.用这个十进制数作为助记词单词数组的下标,到一个单词表中获取对应的一个单词作为助记词
5.一共12组11bits数,对应生成12个单词
对比以下随机数种子和助记词,可以比较直观的的理解助记词相对更容易记忆
// 随机数种子
010FBCE193DKEF2LDIELDGE.......
// 助记词
quick apple egg sugar lemon cream great rich good home sweet treat
总结:
一串助记词对应了N多个私钥,只要记住助记词,哪怕钱包文件损坏,钱包数据丢失,都可以从助记词推导出所有的私钥,有了私钥,就可以取回自己的资产。 所以说:助记词就等于数字资产。