在区块链技术中,HD(Hierarchical Deterministic)钱包是一种强大且灵活的钱包类型,它提供了多种功能,包括生成助记词、生成地址、离线签名和验证签名。本文将详细讲述这些功能的实现原理。
一、钱包的发展历史
1.传统钱包
- 物理钱包:我们日常使用的钱包,用来存放现金、信用卡等。
- 电子钱包:随着科技的发展,电子钱包(如支付宝、微信支付)出现,用于存放和管理电子货币。
2.数字货币钱包
单密钥钱包(Single-key Wallet):最早期的数字货币钱包,每个钱包地址对应一个私钥。私钥用于签名交易,控制资金。
- 优点:简单易用。
- 缺点:如果私钥丢失,资金无法找回;管理多个地址时较为繁琐。
3.多重签名钱包(Multi-signature Wallet)
多重签名技术:要求多个私钥签名才能完成一笔交易,提高了安全性。
- 优点:更高的安全性,适合企业级应用。
- 缺点:复杂度增加,管理多个私钥较为繁琐。
4.分层确定性(HD)钱包
HD钱包:利用分层确定性算法生成一系列私钥,所有私钥都由一个种子(seed)生成。
- 优点:只需备份一个种子即可恢复所有地址和私钥,管理更方便。
- 缺点:种子一旦泄露,所有地址和私钥都可能被盗。
二、HD钱包的原理
1.BIP标准
- BIP32:描述了HD钱包的基本结构和原理。
- BIP39:定义了助记词(Mnemonic Phrase)和种子(Seed)的生成方式。
- BIP44:规定了多币种钱包的路径结构。
2.生成助记词
助记词是一组随机生成的单词,用于生成种子。助记词的生成过程如下:
- 2.1.生成随机熵:生成128到256位的随机数。
- 2.2.计算校验和:对随机熵进行SHA-256哈希,取前几位作为校验和。
- 2.3.组合熵和校验和:将随机熵和校验和组合在一起。
- 2.4.映射到单词表:将组合后的数据按11位一组映射到单词表,生成助记词。
3.生成地址
从助记词生成地址的过程如下:
- 3.1.生成种子:从助记词生成种子。
- 3.2.生成根密钥:从种子生成根密钥。
- 3.3.生成子密钥对:根据 BIP44 标准的派生路径生成子密钥对。
- 3.4.生成地址:从子公钥生成地址。
4.离线签名
离线签名的过程如下:
- 4.1.构建交易数据: 将交易构建之后生成待签名的 Msg。
- 4.2.将 Msg 递给签名机签名,签完之后返回 signature。
- 4.3.构建完整交易:将交易数据,签名信息和公钥添加到交易数据中,构建完整的交易。
5.验证签名
验证签名的过程如下:
- 5.1.提取公钥和签名:从交易数据中提取公钥和签名。
- 5.2.重建交易哈希:对交易数据执行双重SHA-256哈希,得到交易哈希。
- 5.3.验证签名:使用公钥和交易哈希验证签名。