当前位置: 首页 > news >正文

HD 钱包- MetaMask

前言

钱包用来存钱的,在区块链中,我们的数字资产都会对应到一个账户地址上, 只有拥有账户的钥匙(私钥)才可以对资产进行消费(用私钥对消费交易签名.私钥和地址的关系一句话概括就是:私钥通过椭圆曲线生成公钥, 公钥通过哈希函数生成地址,这两个过程都是单向的。因此实际上,数字钱包实际是一个管理私钥(生成、存储、签名)的工具.

BIP32

钱包也是一个私钥的容器,我们可以随机生成一堆私钥(一个人也有很多账号的需求,可以更好保护隐私),而每个私钥都需要记忆就特别麻烦的。

为了解决这种麻烦,就有了 BIP32 提议: 根据一个随机数种子通过分层确定性推导的方式得到 n 个私钥,这样保存的时候,只需要保存一个种子就可以,私钥可以推导出来

BIP32
1:N
ECDSA
HMAC-SHA512
种子
私钥
公钥
地址

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

推导主密钥

在这里插入图片描述

  1. 根种子随机生成,可以根据自己喜号生成128,256或512bits
  2. 根种子输入到 HMAC-SHA512 算法中就可以得到一个可用来创造主私钥 (m) 和 一个主链编码( a master chain code) 这
  3. 主私钥 (m)根据椭圆曲线生成主公钥M

衍生推导

衍生推导的方案其实有两个:一个用父私钥推导(强化衍生),一个用父公钥推导(常规衍生)。
同时为了区分这两种不同的衍生,在索引号也进行了区分,索引号小于 2312^{31}231 用于常规衍生,而2312^{31}231232−12^{32}-12321之间用于强化衍生,为了方便表示索引号i′i'i,表示231+i2^{31}+i231+i

在这里插入图片描述
主的秘钥(由私钥或公钥)及主链编码再加上一个索引号,将作为 HMAC-SHA512 算法的输入继续衍生出下一层的私钥及链编码.

索引的加入则可实现水平扩展, 利用子私密钥 生成再进行衍生推导则是深度扩展

在这里插入图片描述
强化衍生与普通衍生的主要区别在于私钥的参与程度和安全性

  • 普通派生允许仅使用公钥就生成子公钥链…当链中父公钥与子私钥补泄露, 则当前父公钥下挂的所有派生链的密钥全部泄露
  • 强化衍生加入了主私钥,上述情况发生后 仍能保证兄弟节点的安全

BIP44

通过这种分层(树状结构)推导出来的秘钥,通常用路径来表示,每个级别之间用斜杠 / 来表示,由主私钥衍生出的私钥起始以 “m” 打头。因此,第一个母密钥生成的子私钥是 m/0。第一个公共钥匙是 M/0。第一个子密钥的子密钥就是 m/0/1,以此类推。

BIP44 则是为这个路径约定了一个规范的含义 (也扩展了对多币种的支持),BIP0044 指定了包含 5 个预定义树状层级的结构:

m / purpose’ / coin’ / account’ / change / address_index

  • m 是固定的
  • Purpose 也是固定的,值为 44(或者 0x8000002C)
  • Coin type
    这个代表的是币种,0 代表比特币,1 代表比特币测试链,60 代表以太坊
    完整的币种列表地址:https://github.com/satoshilabs/slips/blob/master/slip-0044.md
  • Account
    代表这个币的账户索引,从 0 开始
  • Change
    常量 0 用于外部链,常量 1 用于内部链(也称为更改地址)。外部链用于在钱包外可见的地址(例如,用于接收付款)。内部链用于在钱包外部不可见的地址,用于返回交易变更。 (所以一般使用 0)
  • address_index
    这就是地址索引,从 0 开始,代表生成第几个地址,官方建议,每个 account 下的 address_index 不要超过 20

一句话概括下 BIP44 就是:给 BIP32 的分层路径定义规范. 防止丢失了生成路径后,密钥遗失
例如: 根据以太坊钱包也遵循 BIP44 标准,确定路径是: m/44’/60’/0’/0/n

生成根主密钥 则是 m, 生成索引号随机数 index
44’ , 索引以 index + 44 使用 强化衍生
60’, 索引以 index + 60 使用 强化衍生
0’, 索引以 index + 0 使用 强化衍生
0, 索引以 0 使用 普通衍生(PS: 普通不用加上index)
n, 索引以 n 使用 普通衍生

BIP39

BIP32 提案可以让我们保存一个随机数种子(通常 16 进制数表示),而不是一堆秘钥,确实方便一些,不过用户使用起来 (比如冷备份) 也比较繁琐,这就出现了 BIP39,它是使用助记词的方式,生成种子的,这样用户只需要记住 12(或 24)个单词,单词序列通过 PBKDF2 与 HMAC-SHA512 函数创建出随机种子作为 BIP32 的种子。
可以简单的做一个对比,下面那一种备份起来更友好:
在这里插入图片描述

种子->助记词

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

助记词->种子

这个过程使用密钥拉伸(Key stretching)函数,被用来增强弱密钥的安全性,PBKDF2 是常用的密钥拉伸算法中的一种。
PBKDF2 基本原理是通过一个为随机函数 (例如 HMAC 函数),把助记词明文和盐值作为输入参数,然后重复进行运算最终产生生成一个更长的(512 位)密钥种子。这个种子再构建一个确定性钱包并派生出它的密钥。
密钥拉伸函数需要两个参数:助记词和盐。盐可以提高暴力破解的难度。 盐由常量字符串 “mnemonic” 及一个可选的密码组成,注意使用不同密码,则拉伸函数在使用同一个助记词的情况下会产生一个不同的种子,这个过程图示图下:
在这里插入图片描述
密码可以作为一个额外的安全因子来保护种子,即使助记词的备份被窃取,也可以保证钱包的安全(也要求密码拥有足够的复杂度和长度),不过另外一方面,如果我们忘记密码,那么将无法恢复我们的数字资产。
一句话概括下 BIP39 就是:通过定义助记词让种子的备份更友好

小结

HD 钱包(Hierarchical Deterministic Wallets)是在 BIP32 中提出的为了避免管理一堆私钥的麻烦提出的分层推导方案。而 BIP44 是给 BIP32 的分层增强了路径定义规范,同时增加了对多币种的支持。BIP39 则通过定义助记词让种子的备份更友好。

PBKDF2
密码
BIP32
1:N
ECDSA
HMAC-SHA512
随机数
助记词
种子
私钥
公钥
地址

MetaMask

MetaMask 本质上是一个浏览器钱包

  • 它实现了 Signer 接口的功能. 并基于EIP-1193 与 EIP-6963 等协议, 注入的JavaScript对象(如window.ethereum).
  • 当用户在浏览器中安装MetaMask 后,它可以作为 Signer 来签名交易和消息.MetaMask 管理用户的私钥,并提供签名服务.
  • 安全性: 采用 BIP44 标准分层确定性钱包(HD Wallet),通过助记词派生密钥对‌

在这里插入图片描述

主要参考

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

http://www.dtcms.com/a/532457.html

相关文章:

  • 米拓做的网站如何改代码互联网站备案登记表
  • 【Go】--抛出和处理异常
  • Word转PDF工具,免费生成图片型文档
  • [sam2图像分割] MemoryAttentionLayer._forward_ca | 交叉注意力
  • 孝感网站建设公司电子商务平台内经营者享有公平交易的权利
  • Go语言:常量计数器iota的意义
  • 27-Scikit Learn:讲解Python中经典的机器学习工具库
  • 做网站运营工作流程网络营销概念
  • nnUNetv2
  • Android Studio新手开发第三十二天
  • 《神领物流》day08-作业范围微服务_完整代码【简单易懂注释版】
  • 西安网站定制开发h5课件制作软件
  • ABAP 调用接口传输文件(multipart form-data)
  • 联邦学习:现状与展望!
  • Linux IPC 为什么要这么架构
  • 实验室PRCV 2025论文分享|如何利用大模型自动生成高质量英语阅读理解练习题
  • C 转 C++:高效上手的核心容器与函数指南
  • 网站建设人员岗位设置网站建设职业兴趣要求
  • MyBatis操作数据库入门
  • 美团网站开发北京网站建设外包公司
  • [nanoGPT] 编排训练 | `get_batch` | AdamW | `get_lr` | 分布式训练(DDP)
  • 2.2.1.1 大数据方法论与实践指南-公司产品功能命名管理
  • Spring Boot3零基础教程,@SpringBootApplication 注解详细说明,笔记63
  • Flutter 响应式 + Clean Architecture / MVU 模式 实战指南
  • 免费注册二级域名的网站网站制作哪些公司好
  • 【Go】--time包的使用
  • VR 工业组装案例
  • 网络运维管理
  • 使用STM32H723VGT6芯片驱动达妙电机
  • 【计算机通识】进程、线程、协程对比讲解--特点、优点、缺点