主页 > imtoken钱包如何解除授权 > 钱包技术原理解析

钱包技术原理解析

imtoken钱包如何解除授权 2023-04-19 06:57:03

现在我们常用的钱包是HD钱包(Hierarchical Deterministic Wallets),其中现在有一些常用的标准,使得比特币钱包可以广泛互通、易用、安全、灵活。这些常用的标准是:

助记码:基于BIP-39协议

高清钱包:基于 BIP-32 协议

超高清钱包:基于 BIP-43 协议

多币种多账户钱包:基于BIP-44

随着这些标准的发展,这些标准可能会发生变化或过时,但现在已成为钱包标准中比特币的事实。用户可以将其中一个钱包生成的助记词导出并导入另一个钱包,恢复所有交易、密钥和地址。

一.如何生成助记词

提示:助记符经常与“大脑钱包”混淆。它们是不相同的。主要区别在于大脑钱包由用户选择的单词组成,而助记符是由钱包或用户提供随机数种子随机创建并呈现给用户。这一重要区别使助记符更加安全比特币硬件钱包原理,因为人类仍然无法猜测随机数。

生成助记符分为 6 个步骤。

1。创建一个 128 到 256 位(或熵)的随机序列。

比特币硬件钱包原理

2。得出 SHA256 哈希的前几位(熵长度/32=128/32=4 或 256/32 = 8),您可以创建随机序列的校验和。

3。将校验和添加到随机序列的末尾。

4。将序列分成 11 位部分。

5。将每个 11 位部分值与一个预先定义的 2048 个单词的字典进行对应。

6。生成的顺序词组就是助记符。

现在我们通过一段代码来看看这个过程。

根据熵值生成助记词

生成助记词的主要方法是BRBIP39Encode方法。参数1是指存储助记词的字符数组;参数2是字符数组的长度;参数3是熵值;参数4是熵值的长度。

现在我们输入这个 BRBIP39Encode 来看看生成步骤是如何实现的。

比特币硬件钱包原理

通过随机序列生成助记符

至此,我们已经明白,助记词其实是随机序列比特币硬件钱包原理,但是随机序列不易记忆和阅读,对普通用户也不友好,所以使用一种算法将随机值对应到我们的字库。至此,助记符序列就生成了。

现在有了助记词,我们现在可以生成私钥种子(root seed)了。通过这个种子,我们可以生成一个私钥,根据私钥生成公钥和地址,我们称之为父私钥,通过 HMAC_SHA512 可以生成子私钥、孙子私钥、孙子私钥。 ..让我们稍后再谈。现在让我们看看如何通过助记词生成私钥。

二、助记词产生种子

我们已经知道助记符表示一个从 128 位到 256 位的熵值。通过使用密钥扩展函数 PBKDF2,熵用于导出更长(512 位)的种子。生成的种子用于构建 HD 钱包并获取其密钥。

key扩展函数有两个参数:一个必须是我们的助记词,另一个叫做salt(盐)参数,这个salt的作用是增加构建一个可以进行暴力攻击的查找表的难度。在 BIP-39 标准中,盐还有另一个用途,它允许使用密码短语(passphrase),作为保护种子的附加安全因素。因此,使用相同的助记符会产生不同的种子,以确定是否使用密码。在这种情况下,我们必须保存并备份助记词和密码。

现在我们通过一张图来了解种子的生成过程:

私钥种子生成过程

比特币硬件钱包原理

通过上图。我们可以看到 PBKDF2 使用了 HMAC-SHA512 算法并对其进行了 2048 次散列。生成的 512 位私钥种子。

我们也是通过代码了解到的:

生成私钥种子

现在我们有了BRPBKDF2的参数介绍:

参数1:key64表示存储512位64字节私钥种子的字节数组。

参数2:私钥种子长度(64字节)

参数3:使用的sha算法是SHA512.

参数4:哈希长度

参数5:助记词

比特币硬件钱包原理

参数6:助记词长度

参数 7:盐

参数8:盐的长度

参数9:哈希数(2048)

提示密钥扩展功能,使用 2048 哈希是一种非常有效的保护,可以防止对助记词或密码短语的暴力攻击。它使攻击尝试非常昂贵(计算上),需要尝试数千个密码和助记符组合,并且可以生成的种子数量巨大(2^512)。

现在我们有了私钥种子,我们可以生成一个密钥对。使用CKD(child key derivation)算法实现确定性HD钱包,从父密钥中导出子密钥。

具体算法由单项哈希函数组合:

1。父私钥或公钥 2 。称为链码 3 的种子。索引号(32 位)

chaincode 用于将确定性随机数据引入流程中,使索引无法充分导出其他子键 key。因此,除非您已经拥有链码,否则拥有子密钥不会使其发现自己的姊妹密钥。初始链码种子(位于密码树的根部)由随机数据组成,随后是从它们各自的父链码派生的链码。

这三项(父私钥、链码、索引)组合在一起,经过哈希处理,生成子密钥。生成过程如下:

比特币硬件钱包原理

(1)父公钥——链码——和索引号结合并使用 HMAC-SHA512 函数进行散列以产生 512 位散列。

(2)得到的hash可以分成两部分。hash右半部分的256-bit输出可以作为子链的chaincode。256-bit的左半部分hash 和 index 加载到父私钥中 上来推导出子私钥。

(3)索引的作用是改变这个值可以生成不同的key。每个父key可以有2^31个子key。

子密钥生成原理图

将这个过程重复到密码树的下一层,每个子密钥可以依次成为父密钥,该密钥继续创建自己的子密钥,直到无限代。

我们也用代码形式来描述这个过程:

密钥生成过程

扩展密钥可以简单地存储和表示为简单地将 25 个 6 位密钥和 256 位链码的 512 位序列并行转换。有两种类型的扩展键。扩展私钥是私钥和链码的组合。可用于导出子私钥(子私钥可以导出子公钥)。

好的。以上基本上就是一个钱包密钥生成过程的原理。这篇文章在这里。