主页 > imtoken用什么id下载 > 一起来学习比特币钱包(三)钱包文件,区块链技术系列之一

一起来学习比特币钱包(三)钱包文件,区块链技术系列之一

imtoken用什么id下载 2023-05-21 06:52:24

钱包文件

比特币钱包的核心是一串私钥,这些私钥存储在文件中,也可以复制在纸上。

私钥格式

私钥用于解锁地址上的比特币。 在比特币中,标准格式的私钥是一个大于0且小于0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140的256位数字。范围由加密标准secp256k1控制比特币使用的。

钱包导入格式

为了减少复制私钥时的错误,可以使用钱包导入格式。 钱包导入格式对私钥使用Base58Check编码,大大减少了复制带来的错误,很像标准的比特币地址。

比特币qt钱包地址_如何创建比特币钱包_如何创建比特币钱包地址

1 获取私钥

2 如果是主网地址,私钥前加0x80,测试网地址前加0xef。

3 如果是计算压缩公钥,在私钥后面加上0x01。

4 对以上三步得到的扩展私钥进行SHA-256哈希。

5 对上一步的结果执行 SHA-256。

如何创建比特币钱包_比特币qt钱包地址_如何创建比特币钱包地址

6 取第二次哈希结果的前四个字节,即校验和

7 将四字节校验和附加到第 3 点中获得的结果

8 将7的结果用Base58Check编码转成base58字符串

这个过程是可逆的,使用Base58解码函数去除填充字节。

迷你私钥格式

比特币qt钱包地址_如何创建比特币钱包地址_如何创建比特币钱包

Mini私钥格式是一种将私钥编码成30个字符格式的方法,可以让私钥集成在一个很小的物理空间中,就像物理比特币,更防破坏的二维码。

1 第一个字符是“S”。

2 为了确定迷你私钥是否格式正确如何创建比特币钱包地址,在末尾添加hello。

3 SHA256 计算哈希,如果第一个字节是 00,格式良好。 此限制作为类型检测机制运行。 用户通过随机数进行暴力计算,直到生成一个格式良好的迷你私钥。

4 为了得到完整的私钥,用户对迷你私钥进行 SHA256 散列。 这个过程是不可逆的:很难从得到的私钥中计算出迷你私钥。

比特币qt钱包地址_如何创建比特币钱包地址_如何创建比特币钱包

许多实现不允许在迷你私钥中使用“1”,因为它很容易与“I”混淆。

公钥格式

比特币的 ECDSA 公钥代表特定椭圆曲线 (secp256k1) 上的一个点。 在传统的未压缩形式中,公钥由一个标识字节、32 个字节的 X 坐标和 32 个字节的 Y 坐标组成。 下面的简化图显示了比特币中使用的椭圆曲线上的点,y^2 = x^3 + 7,在一个连续的域上。

比特币qt钱包地址_如何创建比特币钱包_如何创建比特币钱包地址

(secp256k1其实是对一个大质数取模得到坐标,导致整数域不连续,分值明显减少,但原理是一样的)

比特币qt钱包地址_如何创建比特币钱包地址_如何创建比特币钱包

通过丢弃 Y 坐标,公钥可以减少 50%,而不会改变任何基本原理。 这是可能的,因为曲线上只有两个点的X坐标相同,所以32字节的Y坐标可以用一个位代替,表示该点是在上图的上部还是下部。

创建这些压缩公钥时不会丢失数据——只需要一点 CPU 计算就可以得到 Y 坐标,这反过来会产生未压缩的公钥。 secp256k1 的官方文档中描述了压缩和未压缩的公钥,OpenSSL 默认支持。

然而,在 Bitcoin Core 0.6 之前使用的是未压缩的公钥。 这就造成了一些困难,无论是压缩公钥还是未压缩公钥,都无法通过哈希值来区分,所以同一个公钥有两个不同的P2PKH地址。 这也意味着签名脚本中的公钥格式必须正确,并与上一个输出的公钥脚本匹配。

出于这个原因,比特币核心使用不同的字节标志来帮助程序识别密钥的使用方式:

Base58编码前,私钥后加0x01压缩公钥。

未压缩的公钥从0x04开始,压缩的公钥从0x03或0x02开始如何创建比特币钱包地址,取决于它是大于还是小于曲线的中点。 这些前缀字节在官方 secp256k1 文档中使用。