主页 > imtoken钱包官网下载 > 技术指南:了解HD钱包开发涉及的BIP32、BIP44、BIP39

技术指南:了解HD钱包开发涉及的BIP32、BIP44、BIP39

imtoken钱包官网下载 2023-02-03 07:45:21

如果你还对HD钱包、BIP32、BIP44、BIP39一头雾水,可以看这里的文章。

数字钱包的概念

钱包是用来存钱的。 在区块链中,我们所有的数字资产都对应一个账户地址,只有账户密钥(私钥)才能消费资产(用私钥签署消费交易)。 私钥与地址的关系如下:

比特币qt钱包发币地址_无限生成比特币钱包_比特币钱包提币要多久

(图片来自 Mastering Bitcoin)。 一句话概括为:私钥通过椭圆曲线生成公钥,公钥通过哈希函数生成地址。 这两个过程都是单向的。

所以其实数字钱包其实就是一个管理私钥(生成、存储、签名)的工具。 请注意,钱包不持有资产,但资产是在链上的。

无限生成比特币钱包_比特币钱包提币要多久_比特币qt钱包发币地址

如何创建一个帐户

创建账户的关键是生成一个私钥,私钥是一个32字节的数字。 生成私钥。 本质上,选择一个介于 1 和 2256 之间的数字。因此,密钥生成的第一步也是最重要的一步是找到一个安全的熵源,即随机源。 选号的具体方法并不重要,只要所选的结果不可预测或不可重复即可。

例如,你可以抛硬币256次,用纸笔记录正面和反面,并转化为0和1。随机得到的256位二进制数可以作为钱包的私钥。

从编程的角度来说,一般是从加密安全的随机源中取出一长串随机字节(不建议自己写随机数),使用SHA256哈希算法进行计算,这样一个256-位数。

实际过程中需要比较是否小于n-1(n=1.158 * 10^77,略小于2^256),这样我们就有了合适的私钥。 否则,我们用另一个随机数再次重复。 得到的私钥还可以根据上述方法生成公钥和地址。

BIP32

比特币qt钱包发币地址_比特币钱包提币要多久_无限生成比特币钱包

钱包也是私钥的容器。 按照上面的方法,我们可以生成一堆私钥(一个人也有很多账户,可以更好的保护隐私),每个私钥都需要备份,特别麻烦。

最早的比特币钱包就是这样,它有个外号:“就是一堆私钥”

为了解决这个问题,有一个BIP32提案:根据一个随机数种子,通过层次确定性推导可以得到N个私钥,所以在保存的时候,可以只保存一个种子来推导私钥。

BIP Supplement: Bitcoin Improvement Suggestion 比特币改进建议,bip32是第32条改进建议。 BIP32提案的名称是:Hierarchical Deterministic Wallet,也就是我们所说的HD Wallet。

比特币qt钱包发币地址_无限生成比特币钱包_比特币钱包提币要多久

来分析这个层次化的推导过程。 第一步是派生主密钥的过程:

比特币钱包提币要多久_无限生成比特币钱包_比特币qt钱包发币地址

将根种子输入HMAC-SHA512算法得到一个密钥(通过私钥或公钥)和这一步生成的主链码加上主链码。 作为HMAC-SHA512算法的输入,继续推导出下一层的私钥和链码,如下图所示:

比特币qt钱包发币地址_比特币钱包提币要多久_无限生成比特币钱包

推导其实有两种方案:一种是从父私钥推导(称为增强推导方程),另一种是从父公钥推导。 同时,为了区分这两种不同的推导,还区分了一个索引号。 小于 2.31 的索引号用于常规推导,而 2.31 和 2.32-1 之间的索引号用于增强推导。 为方便起见,索引编号 I' 表示 2.31i。

比特币钱包提币要多久_比特币qt钱包发币地址_无限生成比特币钱包

因此,增加索引(水平扩展)和通过子密钥进入下一层(深度扩展)可以无限生成私钥。 注意这个推导过程是确定的(相同的输入,总是相同的输出)并且也是单向的。 子键不能推导出同一级别的兄弟键,也不能推导出父键。 没有子链码就无法推导出 Sun 密钥。 我们现在对层次推导有了一个了解。 简而言之,BIP32是:为避免管理一堆私钥的麻烦而提出的一种分层推导方案。 BIP44通过这一层(树形结构)导出的秘钥路径和秘钥通常用路径表示,每一层用斜线/表示,主私钥导出的私钥以“m”开头。 因此,第一主密钥生成的子私钥为m/0。 第一个公钥是 M/0。 第一个子项的子项是m/0/1,依此类推。 BIP44 为该路径指定了标准含义(并且还扩展了对多种货币的支持)。 BIP0044 指定了一个具有五个预定义树级别的结构:M/Purpose '/coin'/account'/change/address_indexm 是固定的,Purpose 也是固定的。 该值为 44(或 0x800002c)。 CoinType代表币种,0代表比特币,1代表比特币测试链无限生成比特币钱包,60代表以太坊的完整币种列表。

地址: 。 com/Satoshi labs/slips/blob/master/slip-0044 。 MD account 代表币种的账户索引。 从 0 开始,将外部链的常量更改为 0。 外部链用于在钱包外可见的地址(例如,接收付款)。 内链用于钱包外不可见的地址,用于返回交易变更。 (所以一般用0) address_index 这是地址索引。 从0开始,表示生成哪个地址。 官方建议每个账户下的address_index不要超过20。EIP85建议以太坊钱包的讨论也遵循BIP44标准。 确保路径是m/44'/60'/a'/0/na代表账号,N是第N位生成的地址,60在哪里? SLIP44 提案中确定的以太坊代码。 因此,要开发以太坊钱包,我们还需要了解比特币钱包提案BIP32和BIP39。 综上所述,BIP44是:对于BIP32 BIP39BIP32提案允许我们保存一个随机数种子(通常表示为十六进制数)而不是一堆密钥。 确实方便,但是用户使用起来比较麻烦(比如冷备份)。 这样用户只需要记住12(或24)个单词,单词序列通过PBKDF2和HMAC-SHA512函数创建一个随机种子作为BIP32的种子。 大家可以做个简单的对比,下面是对备份比较友好的:

比特币qt钱包发币地址_无限生成比特币钱包_比特币钱包提币要多久

1234 // 随机数种子 090 abcb 3 a6 e 1400 e 9345 BC 60 c 78 A8 be 7 // 助记种子糖果枫糖蛋糕糖布丁奶油蜂蜜丰富光滑的休息Sweet Treat

用助记词做种子其实包括两部分:助记词的生成和助记词衍生出的随机种子,下面会分析。 生成助记词生成助记词的过程是这样的:王先生变成一个128位的随机数,加上随机数的4位校验,得到一个132位的数,再按11位进行分段,所以有12个二进制数,每个数用来查找BIP39定义的字表,这样就得到了12个助记词。 这个过程的示意图如下:

(插图来自网络)

下面是一段使用 bip39 生成助记词的代码:

比特币qt钱包发币地址_无限生成比特币钱包_比特币钱包提币要多久

1234 VAR bip 39 = require(' bip 39 ') // 生成助记词 VAR MNEMONIC = BIP39. 小易网编辑器2022生成助记词。 Console.log(助记)

无限生成比特币钱包_比特币qt钱包发币地址_比特币钱包提币要多久

用于推导种子的助记词 这个过程使用了密钥拉伸功能,用于加强弱密钥的安全性。 PBKDF2 是常用的密钥拉伸算法之一。 PBDF 2 的基本原理是以助记明文和盐为输入参数,使用随机函数(如 HMAC 函数)生成更长(512 位)的密钥种子,然后重复运算。 种子构建一个确定性钱包并派生出它的密钥。 keystretching 函数有两个参数:助记符和盐。 盐可以增加暴力破解的难度。 它由一个常量字符串“mnemonic”和一个可选的密码组成。 请注意,如果使用不同的密码短语,则在使用相同的助记符时无限生成比特币钱包,拉伸函数将产生不同的种子。 这个过程如图所示:

(图片来自网络)

用同样的代码表示:

无限生成比特币钱包_比特币qt钱包发币地址_比特币钱包提币要多久

12345678910112 var HD key=require('Ethereum js-wallet/HD key')var util=require('Ethereum js-' var HD wallet=HD key . from masterseed(seed); var key 1=HD wallet . derivepath (' m/44'/60'/0'/0/0'); Console.log('私钥: 'util.bufferthex(key 1._hdkey._private key));var address 1=util.pubtoaddress(key 1 . _hdkey. _publicKey, true); console.log('address:' util 2022.bufferthex(address 1)); Console.log('checksum address:' util.tochecksumaddress(address 1.tostring('hex'))) ;

校验和地址是EIP-55中定义的一种要求大写的地址形式。 密码可用作保护种子的附加安全因素。 即使助记词备份被盗,钱包也安全(也要求密码足够复杂和长度)。 但是,另一方面,如果我们忘记了密码,我们将无法恢复我们的数字资产。 总而言之,BIP39就是:通过定义助记词让种子备份更友好 我给大家录了个视频:以太坊去中心化网页钱包开发。 从如何创建帐户开始,我深入研究了 BIP32、BIP44 和 BIP39 等提案,以及如何存储私钥、发送离线签名交易和令牌。 总结 HD Wallets(hierarchical deterministic wallet)是BIP32提出的一种分层推导方案,免去了管理一堆私钥的麻烦。 BIP44加强了BIP32分层路径定义规范,增加了对多种货币的支持。 BIP39通过定义助记词让种子备份更加友好。 目前,我们市场上的单一以太坊和比特币钱包基本上都遵循这些标准。 最后,推荐一个深入浅出地解释区块链的助记词生成网站? ——系统研究区块链,打造区块链最佳技术博客。