资讯专栏INFORMATION COLUMN

HP钱包概念及底层原理(BIP32,BIP39,BIP44)

lx1036 / 1827人阅读

摘要:钱包概述中文可以翻译为分层钱包,钱包可以在不需要私钥情况下运用椭圆曲线算法生成大量公钥。概念是由提出,解决难以抄写记忆问题,规范各个币种路径规范达成业界共识。这个规范的目的是设定一个分层钱包标准,能在不通客户之间交换。

前序:相信各位区块链大佬,对公钥和私钥概念已经烂熟于心,对私钥重要性也讳莫如深。私钥可以给交易签名,有了私钥就有了全部权限,但原始私钥没什么规律可循,特别不放记忆转移,还容易出错。所以要用一些密码学知识管理。

管理方法 非确定性钱包

随机生成一个数字串作为私钥,可以使用密码学安全的伪随机数生成器,公钥毫无关系,缺点当有多个私钥账户时候(对于个专业的币圈人事,谁没有n个账户呢,用于存储不通用途的币),必须逐个备份,导出,导入,极其麻烦。

确定性钱包

为了解决非确定性钱包需要逐个导入问题,提出了一套生成密钥对的方法,密钥由于原始的seed推导出。这样一个seed就可以创建多个公要私钥对,在备份导入钱包时候就只需要种子方便抄写。这个特性适合收款服务,比如商店收款,为每个用户创建一个收款公钥匙,也可以用户给用户空投等。

HD钱包(Hierachical Deterministic Wallets)

概述:中文可以翻译为分层钱包,HD钱包可以在不需要私钥情况下运用椭圆曲线算法生成大量公钥。概念是由BIP32(Bitcoin Improvement Proposals)提出,BIP39解决seed难以抄写记忆问题,BIP44规范各个币种路径规范达成业界共识。至此修成正果成为分层钱包的集大成者。如图:

生成过程简图:
熵(128位/256位)→助记词(12个/24个/16个)→种子(512位62byte)→根账户私钥,公钥,地址→其它层级账户密钥
根据上述的顺序我们会先用到BIP39生成助记词,再用到BIP32产生root,再通过BIP44规范生成各个链的钱包。所以按此顺序介绍三个BIP提案。

BIP39

主要描述助记词代码,助记词句子的实现,包括两部分1.生成助记词,将其转化为2进制种子,种子可以稍后用于使用BIP-0032或类似方法生成确定性钱包。
BIP39提出动机:直接生成随机种子不久好了么,为什么还要助记词。与处理钱包种子原始二进制或十六进制数字相比助记符对于人类交互是更优越的。可以写在纸上,记性好的还可以背下来。(在富有的老父亲快死时候也可以,把小儿子教到旁边口述给儿子,连物理解释都不用),BIP39就是通过人类可读转录传输计算机生成的随机性。这不是将用户创建的句子(也称为脑钱包)处理成钱包种子的方法。
助记词本质,将一些列难以记住的无规则的数字串通过转码拆分后生成数字,在于单词表进行映射生成助记词。
bip39具体实现:
0.准备包含2000个单词的助记词数组

生成一个32倍数的初始熵,长度为128-256bit之间,叫length

length/32,计算为校验码长度

初始熵+校验码,每11位进行分割(并且整除所以可选的初始128,160,192,224,256)所以对应表为

11bit变为int类型作为下标,在2000个助记词数组中找到对应单词,返回给用户。

从助记词生成二进制seed,使用PBKDF2函数生成512bit seed,分为加密钥和不加密钥两种,不加密钥传空

种子就是给BIP32使用的种子了

可选初始熵对照表

初始熵 校验位 相加 助记词数量
128 4 132 12
160 5 165 15
192 6 198 18
224 7 231 21
256 8 264 24
BIP32:

钱包可以部分或全部与其它系统共享,每个系统都有独立花钱能力。这个规范的目的是设定一个分层钱包标准,能在不通客户之间交换。通过一个共同的种子可以导出任意对私钥,私钥推导采用不可逆算法,只可以由高层级推导低层级,HD钱包可以在不需要私钥情况下运用椭圆曲线算法生成大量公钥。
子密钥派生(CKD)功能:通过父亲密钥和一个“路径”可以计算出子密钥,可分为以下几种情况

父私钥 → 子私钥 可行

父亲公钥 → 子公钥 可行

父私钥 → 子公钥 可行

父公钥→ 子私钥 这是不可能的

具体算法游行缺可以参考bitcoin上,bip32

BIP44

通过这种分层(树状结构)推导出来的秘钥,通常用路径来表示,每个级别之间用斜杠 / 来表示,由主私钥衍生出的私钥起始以“m”打头。因此,第一个母密钥生成的子私钥是m/0。第一个公共钥匙是M/0。第一个子密钥的子密钥就是m/0/1,以此类推。
定义了五个级别(一般都只有3级4级)
m / purpose"/ coin_type"/ account"/ change / address_index
m为固定,purpose目前在bip44预定使用44
coin_type:指不通币的种类0代表比特币,1代表比特币测试链,60代表以太坊,恒星币148,EOS194
完整币种类型号列表:https://github.com/satoshilabs
Account: 代表账户索引
changge:常量0用于外部链,常量1用于内部链,就比如网页商0为想被爬虫爬到,1为不想被爬虫爬到。
所以0为想被钱包商展示,1不想被钱包商展示。
address_index:这就是地址索引,从0开始,代表生成第几个地址

总结:定义好路径再通过bit32算法生成相关的层级的公私钥,钱包商拿到助记词转换成seed也可通过一定的轮寻算法找到助记词下所有币种个数。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/24466.html

相关文章

  • 理解开发HD钱包涉及的BIP32BIP44BIP39

    摘要:本文首发于深入浅出区块链社区原文链接理解开发钱包涉及的原文已更新,请读者前往原文阅读如果你还在被钱包搞的一头雾水,来看看这边文章吧。所以我们要开发以太坊钱包同样需要对比特币的钱包提案有所了解。 本文首发于深入浅出区块链社区原文链接:理解开发HD钱包涉及的BIP32、BIP44、BIP39原文已更新,请读者前往原文阅读 如果你还在被HD钱包、BIP32、BIP44、BIP39搞的一头雾水...

    firim 评论0 收藏0
  • 理解开发HD钱包涉及的BIP32BIP44BIP39

    摘要:本文首发于深入浅出区块链社区原文链接理解开发钱包涉及的原文已更新,请读者前往原文阅读如果你还在被钱包搞的一头雾水,来看看这边文章吧。所以我们要开发以太坊钱包同样需要对比特币的钱包提案有所了解。 本文首发于深入浅出区块链社区原文链接:理解开发HD钱包涉及的BIP32、BIP44、BIP39原文已更新,请读者前往原文阅读 如果你还在被HD钱包、BIP32、BIP44、BIP39搞的一头雾水...

    tianren124 评论0 收藏0
  • Bytom BIP-32协议和BIP-44协议

    摘要:来做一个详细的介绍协议协议原英文地址地址定义简称,是一个系统可以从单一个产生一树状结构储存多组私钥和公钥。第二层的特指币种并且允许多元货币钱包中的货币在第二个层级下有自己的亚树状结构。每个账户都是它自己亚树的根。 我们知道HD(分层确定性)钱包,基于 BIP-32;多币种和多帐户钱包,基于 BIP-44;最近比原社区的钱包开发者对比原的BIP-32和BIP-44协议有疑问,所以我今天就...

    e10101 评论0 收藏0
  • 以太坊钱包开发系列1 - 创建钱包账号

    摘要:钱包功能一个钱包通常主要包含的功能有账号管理主要是私钥的管理创建账号账号导入导出账号信息展示如以太币余额代币余额。 本文首发于深入浅出区块链社区原文链接:[使用 ethers.js 开发以太坊 Web 钱包 1 - 创建钱包账号)](https://learnblockchain.cn/20...,请读者前往原文阅读 以太坊去中心化网页钱包开发系列,将从零开始开发出一个可以实际使用的钱...

    1fe1se 评论0 收藏0
  • 以太坊钱包开发系列2 - 账号Keystore文件导入导出

    摘要:文件如何生成的以太坊是使用对称加密算法来加密私钥生成文件,因此对称加密秘钥注意它其实也是发起交易时需要的解密秘钥的选择就非常关键,这个秘钥是使用算法推导派生而出。加密推倒的相关配置是用于加密以太坊私钥的对称加密算法。 本文首发于深入浅出区块链社区原文链接:[使用 ethers.js 开发以太坊 Web 钱包 2 - 账号 Keystore 文件导入导出)](https://learnb...

    SegmentFault 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<