主页 > imtoken官网版下载地址 > 以太坊密钥破解需要多久 了解开发HD钱包涉及的BIP32、BIP44、BIP39

以太坊密钥破解需要多久 了解开发HD钱包涉及的BIP32、BIP44、BIP39

imtoken官网版下载地址 2023-01-28 07:27:49

最新内容会在主站更新,深入浅出地讲解区块链社区

原文链接:理解HD钱包开发涉及的BIP32、BIP44、BIP39

如果你还对HD钱包、BIP32、BIP44、BIP39一头雾水,不妨看看这篇文章。

数字钱包概念

钱包是用来存钱的。 在区块链中,我们的数字资产会对应一个账户地址。 只有拥有账户密钥(私钥)的人才能消费资产(使用私钥签署消费交易)。

私钥与地址的关系如下:

以太坊和以太经典未来哪个好_以太坊密钥破解需要多久_购买以太坊 需要注册钱包

图片

(图片来自精通比特币)

一句话概括就是:私钥通过椭圆曲线生成公钥,公钥通过哈希函数生成地址。 这两个过程是单向的。

因此,实际上,数字钱包实际上是一种管理私钥(生成、存储、签名)的工具。 注意钱包不存储资产,资产在链上。如何创建账户

创建账户的关键是生成一个私钥,私钥是一个32字节的数字。 生成私钥本质上是选择 1 到 2^256 之间的一个数字。

因此,生成密钥的第一步也是最重要的一步是找到足够安全的熵源,即随机源。 只要所选的结果不可预测或不可重复,具体的选号方法并不重要。

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

从编程的角度来说,一般是从加密安全的随机源中取出一长串随机字节(不建议自己写随机数),使用SHA256哈希算法对其进行运算得到,这样就可以轻松生成一个256位的数。

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

BIP32

钱包也是私钥的容器。 按照上面的方法,我们可以生成一堆私钥(一个人也需要很多个账号,可以更好的保护隐私)以太坊密钥破解需要多久,而且每一个私钥都备份起来特别麻烦。

最早的比特币钱包就是这样,还有一个昵称:“Just a Bunch Of Keys(一串私钥)”

为了解决这种麻烦,有一个BIP32提案:根据一个随机数种子,通过层次确定性推导得到n个私钥,这样保存的时候只需要保存一个种子,私钥就可以了得到。 如图所示:

以太坊和以太经典未来哪个好_以太坊密钥破解需要多久_购买以太坊 需要注册钱包

图片

(图片来自Mastering Bitcoin) 上图中的Sun Secret Key可以用来发行交易。

BIP下补充说明:Bitcoin Improvement Proposals比特币改进提案,bip32是第32个改进提案。

BIP32提案的名称是:Hierarchical Deterministic Wallets,也就是我们所说的HD钱包。

分析一下这个分层推导的过程,第一步就是推导主密钥:

以太坊密钥破解需要多久_以太坊和以太经典未来哪个好_购买以太坊 需要注册钱包

图片

根种子输入HMAC-SHA512算法得到一个秘钥(通过私钥或公钥)和主链,主链可以用来创建主私钥(m)和主链码(a master chain代码)。 该代码加上一个索引号将作为HMAC-SHA512算法的输入,继续推导出下一层的私钥和链码,如下图所示:

以太坊密钥破解需要多久_以太坊和以太经典未来哪个好_购买以太坊 需要注册钱包

图片

推导方案实际上有两种:一种是使用父私钥进行推导(称为增强推导方程),另一种是使用父公钥进行推导。 同时,为了区分这两种不同的推导,还区分了索引号。 小于231的索引号用于常规推导,而231和232-1之间的范围用于增强推导。 为了便于表达索引号i',表示为231+i。

因此,增加索引(水平扩展)和将子密钥传递到下一层(深度扩展)可以无限生成私钥。

注意,这个推导过程是确定的(相同的输入总是有相同的输出)并且也是单向的。 子键不能推导出同级的兄弟键,也不能推导出父键。 没有子链码就无法导出孙密钥。 现在我们对层次推导有了一个了解。

一句话,BIP32是:为了避免管理一堆私钥的麻烦而提出的一种分层推导方案。 密钥路径和 BIP44

从这种层级(树状结构)衍生出的秘钥通常用路径表示,每一层都用斜杠/表示,从主私钥衍生出的私钥以“m”开头。 . 因此,第一个父密钥生成的子私钥为m/0。 第一个公钥是 M/0。 第一个子键的子键是m/0/1,依此类推。

BIP44 为这个路径规定了规范的含义(同时也扩展了对多种货币的支持),BIP0044 规定了一个包含 5 个预定义树级别的结构:

m /purpose'/coin'/account'/change/address_index

m是固定的,Purpose也是固定的,值为44(或0x8000002C)

硬币类型

这个代表币种,0代表比特币,1代表比特币测试链,60代表以太坊

完整币种列表地址:

帐户

代表该币种的账户索引,从0开始

改变

常量 0 用于外部链,常量 1 用于内部链(也称为更改地址)。 外部链用于在钱包外可见的地址(例如,接收付款)。 内链用于钱包外不可见的地址,用于返回交易变更。 (所以一般用0)

地址索引

这是地址索引,从0开始,代表生成的地址。 官方建议每个账号下的address_index不要超过20

根据EIP85提出的讨论以太坊密钥破解需要多久,以太坊钱包也遵循BIP44标准,确定的路径为m/44'/60'/a'/0/n

a代表账号,n是第n个生成的地址,60是SLIP44提案中确定的以太坊代码。 因此,如果我们要开发以太坊钱包,还需要了解比特币钱包提案BIP32和BIP39。

BIP44一句话概括就是:定义BIP32层次路径的规范

BIP39

BIP32提案允许我们保存一个随机数种子(通常用十六进制数表示)而不是一堆秘钥,这确实更方便,但用户使用起来也比较麻烦(比如冷备份)。 种子使用助记词生成,用户只需记住12(或24)个单词,单词序列通过PBKDF2和HMAC-SHA512函数生成一个随机种子作为BIP32种子。

大家可以简单的做个对比,下面这个对于备份比较友好:

// 随机数种子
090ABCB3A6e1400e9345bC60c78a8BE7  
// 助记词种子
candy maple cake sugar pudding cream honey rich smooth crumble sweet treat

使用助记词作为种子实际上包括两部分:生成助记词和从助记词中推导出随机种子。 下面我们来分析一下这个过程。

生成助记词

助记词生成过程如下:先生成一个128位的随机数,加上4位校验随机数,得到一个132位的数,再除以11位,这样就有得到12个二进制数字,然后用每个数字去查找BIP39定义的单词表,得到12个助记词。 过程图如下:

以太坊和以太经典未来哪个好_以太坊密钥破解需要多久_购买以太坊 需要注册钱包

图片

(图片来源于网络)种子来源于助记词

这个过程使用了Key stretching函数,用于增强弱密钥的安全性。 PBKDF2 是常用的密钥拉伸算法之一。

PBKDF2的基本原理是使用一个随机函数(如HMAC函数),将助记明文和salt值作为输入参数,然后重复运算,最终生成一个更长(512位)的密钥种子。 然后,这个种子会构建一个确定性钱包并派生出它的密钥。

key stretch 函数有两个参数:mnemonic 和 salt。 盐可以增加暴力破解的难度。 salt 由常量字符串“mnemonic”和一个可选的密码组成。 请注意,如果使用不同的密码,使用相同的助记词时,拉伸功能将生成不同的种子。 过程图如下:

以太坊和以太经典未来哪个好_以太坊密钥破解需要多久_购买以太坊 需要注册钱包

图片

(图片来自网络)

校验和地址是EIP-55中定义的一种要求大写的地址形式。

密码可用作保护种子的附加安全因素。 即使助记词的备份被盗,也能保证钱包的安全(也要求密码有足够的复杂度和长度),但另一方面,如果我们忘记了密码,那么将无法恢复我们的数字资产。

BIP39一句话概括就是:通过定义助记词让种子备份更友好

给大家录了个视频:以太坊去中心化网页钱包开发,从如何创建账户开始,深入探讨BIP32、BIP44、BIP39等提案,以及如何存储私钥、发送离线签名交易和Token。

概括

HD Wallet(Hierarchical Deterministic Wallets)是BIP32提出的一种分层推导方案,避免了管理一堆私钥的麻烦。

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

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

目前市场上单一的以太坊和比特币钱包基本上都遵循这些标准。

最后推荐一个助记词生成网站

欢迎来到知识星球提问。 全球汇聚了300多位区块链技术爱好者。

深入浅出地讲解区块链——系统学习区块链,打造最好的区块链技术博客。