主页 > imtoken硬件钱包安全吗 > 《精通比特币》英文版注释指南·第5章比特币钱包技术

《精通比特币》英文版注释指南·第5章比特币钱包技术

imtoken硬件钱包安全吗 2023-01-28 06:55:32

2.密钥和地址

1. 比特币所有权

比特币所有权是通过数字密钥、比特币地址和数字签名建立的

2.数字钥匙

密钥成对出现,由私钥和公钥组成。 一般来说,比特币地址是由公钥生成并对应的。

私钥和公钥的关系为:K = k * G(椭圆曲线乘法。其中k为私钥,G为常数点,称为生成点,K为生成的公钥),即一个不可逆的过程,即可以用私钥计算出公钥,但是不能从公钥计算出私钥。 这种非对称加密可以将比特币地址安全地传播到比特币网络中,任何人都可以验证每一笔交易的每一个签名,从而实现去中心化的信任和控制。

2.1 私钥由一个随机数(二进制256位)生成p网买btc,更准确地说,私钥可以是1到n-1之间的任意数,其中n为常数(n=1.158 * 10^77,略小于2^256)。 可以使用加密安全伪随机数生成器 (CSPRNG) 和具有足够熵源的种子生成。 (应该是用SHA256哈希算法计算的)

十六进制私钥:

1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD

2.2 椭圆曲线乘法K = k * G:所有比特币用户的生成点(G)相同,G点可以用坐标(x,y)表示,在椭圆曲线中,点的相加相当于Stipple Tangent 找到曲线相交的另一个点,然后翻转到 x 轴。 公钥K是在生成点(G)上加上k次得到的。

b网怎么btc提美元_p网买btc_btc官网下载

椭圆曲线乘法

2.3 公钥生成地址如下:

从Bitbill钱包也可以看出p网买btc,比特币地址相当于支付宝转账收款人,由公钥通过单向哈希函数生成。

1)公钥生成地址公式:A = RIPEMD160(SHA256(K))(K为公钥,A为生成的比特币地址)

即通过二次哈希得到公钥哈希,再通过Base58Check编码生成。

b网怎么btc提美元_p网买btc_btc官网下载

公钥生成地址流程

2)Base58Check编码

Base58不包含0(数字0)、O(大写字母o)、l(小写字母L)、I(大写字母i)和Base64中的“+”和“/”两个字符。 这种编码格式不仅实现了数据压缩,保持了易读性,还提供了错误诊断。

a) 为数据添加一个称为“版本字节”的前缀

b) 对之前的结果(prefix和data)运行两次SHA256 hash算法(checksum = SHA256(SHA256(prefix+data))),得到一个32字节长的hash值(两次hash操作),我们只取前 4 个字节作为校验和并添加数据

c) Base58编码

b网怎么btc提美元_p网买btc_btc官网下载

Base58Check编码过程

3)Base58Check版本前缀和编码结果(比特币地址以1..开头)

b网怎么btc提美元_p网买btc_btc官网下载

Base58Check 版本前缀和编码结果

2.4 密钥格式

b网怎么btc提美元_p网买btc_btc官网下载

私钥格式

b网怎么btc提美元_p网买btc_btc官网下载

相同的私钥,不同的格式

1)公钥的格式

以未压缩或压缩的公钥形式提供

公钥是椭圆曲线上的一个点,由一对坐标(x,y)组成,每个公钥有520位,一个256位的数字是公钥的x坐标,另一个256- bit number为y坐标,前缀04用于区分非压缩格式公钥,压缩格式公钥以02或03开头。(需要这两个不同前缀的原因是:因为解y来自平方根,如果y是偶数,则使用02作为前缀;如果y是奇数,则使用03作为前缀)

如果我们知道公钥的 x 坐标,我们可以通过求解方程 y2 mod p = (x3 + 7) mod p 得到 y 坐标。 该方案允许我们只存储公钥的 x 坐标而省略 y 坐标,从而将公钥的大小和存储空间减少了 256 位,每笔交易所需的字节数减少了近一半。 久而久之,大大节省了大量的数据传输和存储。

压缩格式的公钥逐渐成为各种比特币客户端的默认格式。 两种格式的私钥是一样的,但是公钥可以生成两个不同的比特币地址。 所以,在处理来自不支持压缩公钥的老客户端的交易时,私钥只会以WIF格式(前缀为5)导出; 比特币钱包导出私钥时,会将钱包导入格式(WIF)修改为WIF压缩格式,即在私钥上附加一个字节大小的后缀01(“压缩私钥”其实就是“一个”用于生成压缩格式公钥的私钥”)

b网怎么btc提美元_p网买btc_btc官网下载

相同的密钥,不同的格式

2.5 加密私钥(BIP0038)

BIP0038 加密方案是:输入比特币私钥,通常使用 WIF 编码,带有 base58chek 字符串的前缀“5”。 此外,BIP0038加密方案需要一个长密码作为密码,通常由多个单词或复杂的字母数字字符串组成。

2.6 多重签名

以数字 3 开头的比特币地址是 P2SH 地址,有时被错误地称为多重签名或多重签名地址。脚本将比特币交易中的受益人指定为哈希,而不是公钥的所有者

3. 钱包

从广义上讲,钱包是为用户提供界面的应用程序。 钱包控制用户访问、管理密钥和地址、跟踪余额以及创建和签署交易。 从狭义上讲,即从程序员的角度来看,“钱包”指的是一种用于存储和管理用户密钥的数据结构。

因此,钱包里没有钱,只有钥匙。

1)钱包类型

有两种类型,区别在于它们包含的多个键是否相互关联:

第一种是非确定性钱包,其中每个密钥都是从随机数中独立生成的。 键是相互独立的。

第二种是确定性钱包,其中所有密钥都来自称为种子的主密钥。 这类钱包中的所有密钥都是相互关联的,如果有原始种子,所有密钥都可以重新生成。 确定性钱包中使用了许多不同的密钥派生方法。 最常用的推导方法是使用树结构,称为分层确定性钱包或HD钱包。

HD钱包有两个主要优势。 首先,树结构可以用来表达额外的组织意义。 在企业环境中可以使用不同的分支密钥,可以管理不同的分支部门、子公司、特定职能和会计类别。

HD 钱包的第二个好处是,它们允许用户创建一系列公钥,而无需访问相应的私钥。 这可能允许 HD 钱包在不安全的服务器中使用,或者为每笔交易发布不同的公钥。 公钥不需要预先加载或推导出来,私钥也不需要在服务器中用于支付。

2)种子和助记词(BIP-39)

HD钱包的一切确定性都源于这根种子。 任何兼容的 HD 钱包的根种子也可以重新创建整个 HD 钱包。 因此,只需传输 HD 钱包的根种子,就可以复制、存储、导出和导入 HD 钱包中包含的数百万个密钥。 当您注册 Bitbill 时,系统会提示您创建新钱包或导入钱包。 这个助记词在你导入钱包的时候会用到,所以一定要备份好。

助记词的生成过程:

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

b. 建议使用 SHA256 哈希(熵长度/32)的前几位数字来创建随机序列的校验和。

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

d. 将序列分成包含 11 位的不同部分。

e. 将包含11位的每个值对应到预先定义的字典(2048个单词)。

F。 生成的排序词组就是助记词。

b网怎么btc提美元_p网买btc_btc官网下载

生成助记词过程

生成种子:

一种。 PBKDF2密钥扩展函数的第一个参数是第6步生成的助记词。

b. PBKDF2 密钥扩展函数的第二个参数是盐。 由字符串常量“mnemonic”和可选的用户提供的密码字符串组成。

C。 PBKDF2 使用 HMAC-SHA512 算法,使用 2048 个哈希扩展助记符和盐参数,并产生一个 512 位的值作为其最终输出。 这个 512 位的值就是种子。

b网怎么btc提美元_p网买btc_btc官网下载

生产种子

从种子创建钱包:

b网怎么btc提美元_p网买btc_btc官网下载

从种子创建 HD 钱包

3) 私有子键

分层确定性钱包使用 CKD(子密钥派生)功能从父密钥派生子密钥。 该函数基于单向散列函数。 这个功能结合了:

父私钥或公钥(ECDSA 未压缩密钥)

称为链码(256 位)的种子(链码用于将确定性随机数据引入过程,以便索引无法充分派生其他子密钥)

索引号(32 位)

4) 加固子键

背景:只要将私钥与父链代码一起泄露就可以暴露所有子密钥。 更糟糕的是,子私钥和父链码可以用来推断父私钥。

这个加固的派生函数使用父私钥来派生子链码,而不是父公钥。这在父/子序列中创建了一个“防火墙”——有一个链码,但它不能用于推导子链码或妹妹的私钥

b网怎么btc提美元_p网买btc_btc官网下载

强化子项