结合加密货币钱包发展史,白话讲透私钥、助记词、多链钱包背后的原理

littleflyingpiggy
2023-01-01 11:50
发布于 Mirror

如果觉得我的内容对你有帮助,欢迎关注我的推特账号

如果需要更具体、系统、有针对性的教程指导,欢迎大家私聊咨询哦

作为web3人,人手必备N个加密货币钱包已经是基操了。但是大家在使用时是不是经常会对私钥、助记词、钱包这些名词傻傻分不清楚?虽然靠死记硬背知道了助记词和私钥是绝对不能告诉别人的,但是对为什么要这样做的原理却仍然一无所知?

今天我就用通俗易懂的大白话结合加密货币钱包发展历史来给大家解释一下私钥、助记词、多链钱包的原理,不涉及晦涩的专业术语,小白也能看得懂。

对区块链的简单解释

区块链其实就是一个多人记账的大帐本,既然是账本,就肯定需要有账户和余额,区块链里的账户对应的就是每个人的钱包地址,而区块链里的余额则对应着每个地址上的加密货币资产的数量,这个数量是在该区块链账本里的实时记账结果。

私钥=资产的实际控制权

在现实生活中,如果我们想要从某一个账户取款,我们需要拿着该账户对应的银行卡并且需要知道该账户的密码才能操作;在区块链中,想要调用某个地址上的资产,同样需要一个凭证,这个凭证就是私钥。所以私钥就相当于我们的银行卡+银行卡密码。

有了密码拿着银行卡就能取出账户里的钱,同样的,有了私钥,就可以调用该私钥对应的地址里的资产。但是跟现实世界不同的是,如果我们的银行卡被偷了密码被人破解了,我们还可以通过去银行挂失的方法来冻结我们账户里的资产,但是在区块链中,没有人扮演银行这样一个大家长的角色,如果私钥一旦丢失,就意味着永远丧失了对该地址的控制权。因为一个地址只对应着一个私钥,而私钥是不可以被修改或替换的。

有了私钥,然后通过一系列的加密算法就可以推导出该私钥对应的地址,这个过程是不可逆的,所以根据地址是无法推导出对应的私钥,这也是我们可以放心的把地址告诉别人,让别人给我们转账的原因。

加密钱包的发展史

(1)生成和存储多个独立私钥

咱们的解释就从私钥开始,正是因为是私钥控制着钱包里的加密货币资产,所以保管资产本质上就是保管私钥。网络上有些对钱包的定义是储存加密货币资产,这种说法严格来讲不是非常准确,严谨的说法应该是:钱包是一个生成和存储私钥的工具。

实际上最早的比特币钱包又名JBOK钱包,意思是Just a Bunch Of Keys(一堆私钥),这个名字非常形象的展示了钱包的主要功能。

(2)一个种子推导多个私钥

不过私钥是一串长度很长且难以记忆的数字,如果为了安全要有多个地址,那么就需要生成很多私钥,这就意味着必须把每一个私钥都备份好,否则一旦钱包不可访问时,钱包所控制的资金就付之东流。而私钥的备份和管理是比较麻烦的,因为一不小心就容易搞错。

所以为了提高钱包的易用性,就有一些聪明的开发者提出了一个名为BIP32(注1)的提议,这个提议简单来说就是介绍了一种可以通过一组随机数(种子)(注2)推导出来N个私钥的方法,生成过程可参考下图。

来自《精通比特币》

(3)用助记词的方式备份多个私钥

BIP32 能够让我们保存一个随机数种子,而不是一堆私钥,但是对于大部分用户来讲,要记录并保存一大串128位到256位的字符仍然是非常不友好的,这就促使了 BIP39提案的出现,引入了通过助记词生成种子的解决方案,也就是先随机生成数位的助记词(注3),通过这些单词和单词的顺序可以推导出种子。用户只要记住助记词,就能推导出该组助记词对应的种子推导出的全部私钥。

(4)可以支持多个币种

在BIP32和BIP39提案生效后,比特币钱包可以通过备份助记词的方式来备份跟助记词关联的一大堆私钥,这种方法非常简单用户友好,其他的加密货币也想仿效,于是就有了BIP44提案。BIP44提案是为了BIP32提案提出的分层生成私钥的方法制定了一个规范的表述路径,在这个规范中支持了多个币种。该规范包含 5个预定义树状层级的结构:

                **m / purpose' / coin_type' / account' / change / address_index**

m 是固定的;Purpose 也是固定的,值为 44(或者 0x8000002C);coin是币种,0 代表比特币,60代表以太坊,其他的币种也有自己的代表数字,可以通过查询币种列表地址(注4)获得;Account代表这个币的账户索引,从0开始;Change,通常为0(代表外部可见的地址);address_index是地址索引,从 0 开始,代表生成第几个地址,5就代表该种子下生成的第5个地址。

我们在使用imtoken钱包的时候,选择高级模式,就可以看到选择路径的选项,原因就在这里。

有了BIP44之后,这让HD 钱包的功能变得非常强大,用户只需要保存一个助记词,就能控制所有币种,所有账户的钱包。

简单总结一下以上3个提案的核心要点

BIP32提出了分层推导方案,可以用一个种子管理多个私钥。

BIP39 通过定义助记词让种子的备份更友好。

BIP44 给 BIP32 的分层增强了路径定义规范,同时增加了对多币种的支持。

为什么一个钱包的助记词词可以导入另外的钱包?

目前主流的加密货币钱包基本都遵循BIP32、BIP39和BIP44等标准,所以我们在一个钱包里生成的助记词导入其他钱包也可以正常使用。

为什么有时候通过助记词或者私钥导入后看不到原来的资产?

因为按照BIP44生成的私钥实际上是包含着对应链的参数信息,所以尽管同一套助记词可以通过生成不同链的对应私钥的方式来同时管理多条链上的对应地址和资产,但是不同链生成的私钥是不同的,由此推导出的地址也是不同的。所以如果我们把通过某一套助记词推导出来的某个链上的私钥导入到不支持该链的钱包中的话,或者把这套助记词导入到我们没有创建的某个链的钱包里的话,就会发生错误。

比如如果我们在imtoken钱包(一个支持多链的钱包)先利用一套助记词同时生成了ETH钱包和BTC钱包的私钥,如果我们把生成的BTC钱包私钥导入到metamask钱包(主流支持链是以太坊的钱包)会发生错误提示;如果我们把这套助记词导入metamask钱包的话,只能看到在imtoken钱包中生成的ETH的地址;

同理,如果把这套助记词导入到kelpr钱包(一个支持cosmos的钱包),会生成一个新的钱包地址,以及钱包地址对应的私钥,这个私钥只在可以支持cosmos的钱包中通用。

所以,当我们打算利用助记词或者私钥导入其他的钱包的时候,一定要先确定我们要导入的钱包是否可以支持我们原来生成的助记词和私钥所在的链,如果是一致的话,就可以正常导入,如果不一致,则需要更换可以支持的钱包来进行导入。

注1:

BIP:是“Bitcoin Improvement Proposal”的首字母缩写,就是“比特币改进建议”,因为比特币是一个开源网络,全世界的开发者都有权对网络更新作出贡献,BIP就是开发者间交流意见、互换信息的主要方式。大家对比特币的发展有什么好的建议,都可以以BIP提案的方式提出,如果提案被大多数开发者认可,那么后续比特币网络的发展就会遵循该提案的建议。

注2:

种子:用来推导私钥的一组128到256位的随机数。

注3:

助记词的生成方法:

先定义一个包含2048个单词的单词表,然后生成一个128位随机数,再加上对随机数做的校验4位,得到132位的一个数,然后按每11位做切分,这样就有了12个二进制数,然后用每个数去查BIP39定义的单词表,这样就得到12个助记词,这个过程图示如下:

注4:

完整的币种列表地址

参考资料:

《精通比特币》第二版

BIP39、BIP44、BIP32 协议

如何理解钱包涉及的 BIP32、BIP44、BIP39

理解开发HD 钱包涉及的 BIP32、BIP44、BIP39

如果觉得我的内容对你有帮助,欢迎关注我的推特账号和小红书账号:飞猪聊web3,获取更多web3的安全知识、基本技能和实用资讯

0
粉丝
0
获赞
11
精选
相关文章
数据来源区块链,不构成投资建议!
网站只展示作者的精选文章
2022 Tagge. With ❤️ from Lambda