主页 > imtoken冷钱包官方下载 > HD钱包的助记词和密钥生成原理

HD钱包的助记词和密钥生成原理

imtoken冷钱包官方下载 2023-09-27 05:08:07

在区块链相关话题不断发酵的时候,应该很多人都知道加密货币钱包。 钱包是普通用户与加密货币系统交互的入口。 手机钱包、桌面钱包、硬件钱包、网页钱包等各种货币形式百花齐放。 和纸钱包等。通过钱包,您可以无边界、无限制地转移您的数字资产。 从开发者的角度来看,钱包的作用是管理用户的私钥,通过私钥签名交易管理用户在区块链上的数字货币。

比特币地址+私钥=比特币钱包

钱包根据key是否关联可以分为两类:nondeterministic wallet和deterministic wallet

* 非确定性钱包:密钥对之间没有关联

*确定性钱包:密钥对源自原始种子主密钥。 最常见的推导方式是树级推导(hierarchical

确定性的)简称HD

比特币钱包(Bitcoin Core)生成没有任何关联的密钥对,属于非确定性钱包

,如果要备份和导入这类钱包,比较麻烦,用户必须对钱包中的私钥和对应地址一一进行操作。 基于 BIP32 的确定性钱包

(Bitcoin Improvement Proposal 32) 标准实施,由共同种子 n 维护

多个私钥,种子推导 私钥采用不可逆哈希算法。 当您需要备份钱包私钥时,只需要备份种子(大多数情况下种子是BIP44生成的助记词,方便复制)。

BIP32、BIP44标准钱包只需要导入助记词即可导入所有私钥。

避免地址重用原则:提倡避免地址重用。 当数字货币地址已经过转账时,存在私钥泄露的可能。

符合BIP-32/BIP-44的HD钱包

如上所述,确定性钱包可以通过种子派生出许多密钥。 它是基于BIP32标准实现的。 种子可以推导出主密钥(master

密钥),主密钥派生子密钥(children keys),子密钥派生孙密钥(grandchildren keys),等等。

* 具有树状特征的HD钱包非常适合有组织的公司

* HD钱包可以在不知道私钥的情况下生成大量公钥,非常适合只负责收款的服务

比特币扩展公钥_比特币价值比特币最新_比特币行情实时走势图比特币行情

BIP32 标准的种子是一个随机的 16 字节十六进制字符串。 如果能用英文单词作为助记词,无疑会降低种子备份和钱包恢复的难度。 BIP39

该标准是为了解决助记词需求,通过随机生成12~24个易记单词,单词序列通过PBKDF2和HMAC-SHA512函数创建随机种子为

BIP32 的种子。

BIP32/BIP39标准详解

BIP39

该标准定义了钱包助记词和种子生成规则。

钱包助记词和种子可以通过九个步骤生成:

* 步骤1~6生成助记词

* Steps 7~9将前六步生成的助记词转化为BIP32种子

生成助记词

* 规定熵的位数必须是32的整数倍,所以熵的长度在128到256之间应该是32的整数倍,分别是128、160、192、224,

256;

* 校验和的长度是熵的长度/32位,所以校验和的长度可以是4、5、6、7、8位;

* 助记词库中有2048个词,词库中的所有词都可以用11位作为词的索引进行定位,所以一个词用11位表示,助记词的个数可以是(熵+校验和) /11,值为

12, 15, 18, 21, 24

熵(位)校验和(位)熵+校验和

比特币价值比特币最新_比特币扩展公钥_比特币行情实时走势图比特币行情

(bits) 助记符长度 128413212160516515192619818224723121256826424

* 生成长度为128~256位(bits)的随机序列(熵)

* 取熵散列后的前n位作为校验和(n=熵长度/32)

* 随机序列 + 校验和

* 将第3步得到的结果截成11位

* 第4步得到的每个11位字节匹配词库中的一个词

* 第5步得到的结果就是助记词串

从助记词生成种子

助记词通过长度为128~256位的随机序列(熵)进行匹配,然后使用PBKDF2函数

衍生出更长的种子。 生成的种子用于生成确定性钱包并派生钱包密钥。

在密码学中比特币扩展公钥,密钥拉伸

技术用于增强弱密钥的安全性,添加暴力攻击

尝试破解每个可能的密钥时,攻击难度会增加。 各种编程语言本机库提供了密钥拉伸的实现。 PBKDF2

(Password-Based Key Derivation Function 2)是一种常用的密钥拉伸

算法之一。 其基本原理是使用一个随机函数(如HMAC函数),将明文和salt值作为输入参数,然后重复上述操作,最终生成密钥。

为了从助记词中生成二进制种子,BIP39使用PBKDF2函数计算种子,其参数如下:

比特币扩展公钥_比特币行情实时走势图比特币行情_比特币价值比特币最新

* 助记词作为密码

* "mnemonic" + 密码作为盐

* 2048为重复次数

* HMAC-SHA512 作为随机算法

* 512 位(64 字节)是所需的密钥长度

DK = PBKDF2(PRF, 密码, 盐, c, dkLen)

BIP32

该标准定义了 HD 钱包的生成规则。 HD钱包中的所有层级密钥都是从根种子中推导出来的,通常根种子是通过以上步骤推导出来的BIP39

产生。 所以钱包只能通过助记词进行备份和恢复,这也是HD钱包的一个缺陷。 如果你的根种子泄露,所有的密钥也会泄露。

掌握私钥和掌握链码

首先是从根种子生成主密钥和主链码

上图中根种子通过不可逆的HMAC-SHA512算法计算出一个512位的哈希串,左边256位为Master Private key(m),右边256位

bit为主链码,结合m和推导公钥的椭圆曲线算法比特币扩展公钥,可以推导出对应的264位主公钥

(男)。 链码用作派生从属密钥的熵。

子私钥推导

HD钱包使用CKD(child key derivation)功能从parent keys(父密钥)派生出child keys(子密钥),CKD

比特币扩展公钥_比特币价值比特币最新_比特币行情实时走势图比特币行情

单向散列函数由以下三个元素执行。

* Parent key(未压缩椭圆曲线导出私钥或公钥ECDSA未压缩密钥)

* 链码作为熵(链码256位)

* 子索引号(索引32位)

索引号个数为2的32次方,每个父键可以派生子键个数的一半(索引号从0x00到0x7fffffff(0到2的21次方减去

1)生成普通密钥; 从 0x80000000 到 0xffffffff 的索引号生成增强密钥)。 CKD使用不可逆的HMAC-SHA512

不可逆加密算法,子密钥不能向上推导出父密钥,同时也不能横向推导出同级密钥。

扩展密钥

CKD派生子密钥的三要素中,父密钥与链码的组合统称为扩展密钥。 256位密钥和256位链码串联512

这些位是扩展密钥。

* 包含私钥的扩展密钥用于推导子私钥,从子私钥可以推导出对应的公钥和比特币地址

* 包含公钥的扩展密钥用于派生子公钥

扩展密钥使用 Base58Check 算法加上特定前缀进行编码。 包含私钥的编码前缀为xprv,包含公钥的扩展密钥前缀为xpub

,与比特币的公钥和私钥相比,扩展密钥编码后得到的长度为512位或513位。

子公钥推导

通过上述方法推导出的私钥可以推导出对应的公钥,但是HD

比特币行情实时走势图比特币行情_比特币扩展公钥_比特币价值比特币最新

钱包的一个非常好用的特性是在隐藏私钥的前提下,从公钥中推导出子公钥,大大增强了安全性。 在只需要生成地址接受比特币而不消费比特币的场景下非常有用。 公钥扩展密钥可以生成无穷无尽的公钥和比特币地址。

HD钱包通过公钥推导子公钥的使用场景: 在接受数字货币支付的电子商务系统中,Web

该服务集成了比特币扩展公钥服务。 系统为客户的每笔订单生成一个接受比特币支付的地址。 不涉及私钥的web服务大大降低了被盗币的可能性。 如果不使用高清

钱包通常在物理隔离的服务器中批量生成比特币地址,然后导入到电商系统中。 该方法需要定期生成和导入地址维护,以防止web服务系统用完预先导入的地址。

子私钥的推​​导过程与子公钥的过程基本相同,有两点不同:

* 在子私钥推导过程中用公钥替换私钥。

* 子公钥导出对应的子链码

增强的扩展密钥派生

密钥需要严格保管,以免泄露。 泄露私钥意味着对应地址上的币可以被转走。 泄露公钥意味着HD钱包的隐私被泄露。 增强的密钥派生(强化子密钥

推导)解决了以下两个问题:

* 虽然公钥泄露不会导致币丢失,但是包含公钥的扩展密钥泄露会导致从该根节点派生的所有扩展公钥泄露,从而破坏隐私一定程度。

* 泄露扩展公钥加上从公钥派生出的后续扩展公钥对应的私钥,有可能是从扩展公钥的所有后代私钥派生出来的

这里,BIP32协议将CKD函数改为HKD(硬化密钥派生公式),生成增强的密钥派生函数。

CKD函数用于导出扩展密钥的序号(0x00到0x7fffffff),父链码和父公钥,或者父私钥导出子链码和子公钥,子私钥从父私钥派生; 而港元

增强子私钥和增强子链码由父私钥、父链码和序列号(0x80000000 到 0xffffffff)导出增强扩展密钥。

高清钱包密钥路径表示

HD路径密钥描述m/0由主私钥(m)推导 第一代第一子私钥m/0/0由第一代子密钥m(0)推导 第二代First来自第一代增强密钥的孙子私钥 m/0'/0

(m/0') 从第一代的第二个子密钥导出第二代的第一个孙密钥 m/1/0 从第一代的第二个子密钥导出第二代的第一个孙密钥