主页 > imtoken钱包app安卓版 > 【区块链技术开发(二)】深入解析比特币的私钥、公钥和地址)

【区块链技术开发(二)】深入解析比特币的私钥、公钥和地址)

imtoken钱包app安卓版 2023-01-17 14:04:25

在比特币中,经常出现三个词:私钥、公钥和地址。他们的意思是什么?他们之间是什么关系?了解它们之间的关系和区别是了解比特币的基础。

【区块链技术开发之(二)】深度分析比特币的私钥、公钥和地址

私钥

我们先来谈谈私钥。一般我们看到的私钥是如下字符串:

5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss

支持比特币协议的应用程序可以正确地将这个字符串转换成比特币的私钥,然后再转换公钥得到地址。如果地址上有对应的比特币早期比特币密码怎么样的,就可以用这个私钥在上面花费比特币。私钥本质上是一个随机数。私钥本质上是一个随机数,由一个 32 字节的数组组成。1字节等于8位二进制,而一个二进制只有0或1两个值。所以私钥的总数接近2^(8*32)=2^256,但有些无法使用私钥,其实际大小介于:

1 ~ 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141

之间的数字。这个数字已经超过了宇宙中原子的总数。不可能遍历所有的私钥,耗尽整个太阳的能量。

我们正在谈论的比特币私钥是加密安全的。不是说不可能有重复的私钥,而是说不可能通过遍历找到特定的私钥,或者通过其他方式找到。,地址上的比特币可以不用私钥就可以花掉,私钥的安全性在数学上是有保证的。私钥的总数非常大,但私钥的生成依赖于随机数,很难实现真正的随机性。使用函数生成随机数。这不是真的随机。它只是一个接近真正随机性的随机数。”

私钥生成的随机性非常重要。Cryptographically secure randomness 的意思是:“随机性是不可预测的,随机结果是无法遍历的。如果不是安全的随机数生成器,生成的私钥有可能会被其他人碰撞。不依赖随机生成的私钥会大大降低其生成的概率空间。” 公钥和地址的生成依赖于私钥,所以我们只需要保存私钥,用私钥就可以生成公钥和地址,并且可以花掉对应地址上的比特币。

字符串的私钥

上述私钥字符串是由 32 位字节数据按照一定的规则格式化生成的。32 字节数组由 256 个 0 或 1 组成。如果显示,不仅识别率不高,而且私钥太长。因此,私钥串就是将原始随机数转换成识别率高的形式。上面的私钥是将32字节数组转换为Base58。

Base58是比特币中使用的一种独特的编码方式,主要用于生成比特币的钱包地址和私钥。与Base64相比,Base58不使用数字“0”、大写“O”、大写“I”、小写“l”以及“+”和“/”符号。主要原因是肉眼易于识别,打字时不易出错。

但是,上面的不规则字符串输入起来相当费力。当然,你也可以将私钥转换成其他形式,比如字的形式(12或24字),大脑钱包的形式,或者自己。使用某个语句来生成私钥。注意,大脑钱包生成的私钥的随机安全性不高。除了我们看到的以 5 开头的私钥外,还有以 L 和 K 开头的私钥,为什么会这样呢?5. L 和 K 波段代表什么?这是关于公钥的。

公钥

比特币的基础是椭圆曲线数字签名算法:

椭圆曲线数字签名算法 (ECDSA) 是使用椭圆曲线密码术 (ECC) 的数字签名算法 (DSA) 的模拟

椭圆曲线密码术 (ECC) 是一种公私钥加密技术:

ECC是基于椭圆曲线理论,利用椭圆曲线方程的性质来生成密钥,而不是使用传统方法使用大素数的乘积来生成密钥。其特点是:密钥长度小、安全性能高、全数字签名。耗时的。

DSA(DigitalSignature Standard)数字签名技术:

在DSA数字签名和认证中,发送者使用自己的私钥对文件或消息进行签名,接收者在收到消息后使用发送者的公钥来验证签名的真实性。

这里很清楚,私钥是用来签名的,公钥是用来验证签名的。公钥由私钥生成,私钥由椭圆曲线(ECPoint)生成。私钥可以通过椭圆曲线变换得到公钥。公钥是一个 65 字节的数组。一般我们会看到这样一个公钥:

04a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd5b8dec5235a0fa8722476c7709c02559e3aa73aa03918ba2d492eea75abea235

显示的公钥一般显示经过十六进制(hexadecimal)处理后的字节数组。不经过Base58的原因是:公钥用于验证私钥的签名。通常早期比特币密码怎么样的,我们很少看到公钥。在用私钥签署交易后,他会将自己的公钥与交易一起发送,这样对于一笔完整的交易,他将使用交易中包含的公钥来验证私钥的签名是否正确。私钥和公钥成对出现。私钥签名的数据只能通过对应的公钥进行验证,地址也是由公钥生成的,这样就可以验证花费的交易是否属于这个地址。!

要回答上面的问题,为什么会出现以 5 或 L、K 开头的私钥?

这是因为不同格式的公钥产生不同的私钥格式。早期的比特币开发者没有使用压缩公钥(椭圆曲线是对称的,知道一半信息可以推导出另一半信息),所以只需要保存通用公钥信息。压缩后的公钥只有 33 个字节,而未压缩的公钥只有 65 个字节。私钥开头的第一个数字的差异用于区分私钥使用的公钥是否支持压缩格式。

压缩后的公钥对比特币来说意义重大。比特币是一种去中心化的 p2p 加密货币。每个节点都会有完整的交易记录。除了 coinbase(挖出来的比特币),每笔交易都需要发送公钥,支持压缩格式的公钥,每笔交易的数据可以减少 32 字节,这对于整个比特币网络来说是非常有意义的,整个比特币网络可以在传输和存储方面进行改进。效率很高。私钥为Base58编码时,旧版未压缩公钥的私钥为33位字节数组,第一个存储私钥的版本信息,当前值为128,生成的Base58以 5 开头。版本未压缩私钥 = Base58(版本 + 32 位随机数)。

支持压缩公钥的私钥是34位,第一位是版本信息,它的值也是128,额外的位是最后一个字节,存放是否压缩信息的信息,1表示是支持压缩格式的公钥。经过Base58处理后,只是以L或K开头。新版本的私钥格式=Base58(版本+32位随机数+是否支持压缩)。

例子中的私钥不仅包含了一个32字节数组的信息,还包含了私钥的版本信息以及公钥是否被压缩(根据位数和数值判断)。公钥是否压缩不仅仅是私钥的显示。除了产生影响之外,它还会对地址产生影响。

地址

公钥太长,所以有一个较短地址的概念。另一方面,没有发送交易的地址,我不想公开我的公钥。地址由摘要算法生成,不会暴露公钥。真实内容:

地址由公钥生成,地址长度为25字节。经过base58处理后,在地址末尾添加一个4字节的校验位。

我们看到的地址一般都是经过Base58编码处理的,地址的生成比较复杂。从公钥到地址生成的过程是首先对公钥进行SHA256(哈希算法)。

sha-256-hash= SHA-256(公钥)

经过hash160处理后,hash160:RIPEMD(PACE integrity Primitives Evaluation Message Digest)是一种原始的完整性校验消息摘要,160标准对应20个字节:

hash160=hash160(sha-256-hash)

对结果进行hash160处理得到一个20字节的数组,在20位字节数组前面加一个字节,这个字节就是地址的Version信息,地址的Version当前值为0,Version信息在比特币的版本信息中。测试网络会使用不同的值,比特币地址表示为:

地址=Base58(版本+hash160(SHA-256(公钥))+校验和)

校验和用于验证比特币地址,然后将地址的版本信息加到得到的hash160中,前4位在SHA-256信息后取两次,即校验和:

校验和=get_front_four(SHA-256(SHA-256(版本+hash160)))

其中,hash160是这个过程中最重要的信息。从这个值可以得到地址的前21位(第一位是版本)和下面的校验和,然后就可以生成Base58格式的地址了。而hash160也可以从base58格式的地址中得到,也就是说hash160格式可以和base58格式的地址互换。

私钥的差异如何影响地址?

如前所述,一个随机数可以有一个压缩的公钥和一个未压缩的公钥。每个公钥都会生成一个地址,上面的私钥其实可以有两个地址:

1HZwkjkeaoZfTSaJxDw6aKkxp45agDiEzN(未压缩的公钥)

1F3sAm6ZtwLAUnj7d38pGFxtP3RVEvtsbV(压缩公钥)

这两个地址就是这个随机数生成的地址,每个地址上的比特币都可以用这个随机数对应的私钥来消费。今天的大多数应用程序默认使用压缩私钥。

总结

公钥生成地址,验证发送交易的地址是否与公钥生成的地址一致;

公钥验证私钥的签名,用于验证交易是否使用正确的私钥签名;

私钥生成 公钥成对出现,公钥可以生成对应的唯一地址,从而可以确认该地址发送的交易是否使用了对应的私钥。

关注@blockchain学习笔记,一起学习区块链