主页 > imtoken浏览器 > 【区块链技术开发(二)】深入解析比特币的私钥、公钥和地址

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

imtoken浏览器 2023-01-18 18:39:21

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

比特币钱包私钥论坛_比特币的私钥是什么_查看比特币私钥

私钥

先说私钥。 一般我们看到的私钥是像下面这样的字符串:

5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss

支持比特币协议的应用程序可以将这个字符串正确转换成比特币私钥,再转换公钥得到地址。 如果地址上有对应的比特币,就可以用这个私钥在上面消费比特币。 私钥本质上是一个随机数。 私钥本质上是一个随机数,一个 32 字节的数组。 一个字节等于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

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

我们所说的比特币私钥在密码学上是安全的。 并不是说不能有重复的私钥,而是说不可能通过遍历找到具体的私钥,或者通过其他方式找到。 ,地址上的比特币可以不使用私钥进行消费,从数学上保证了私钥的安全性。 私钥总数很大比特币的私钥是什么,但是私钥的生成依赖于随机数。 真正的随机性很难实现。 私钥的生成大部分依赖于伪随机算法(PRNG):“伪随机是使用一个函数来生成随机数。它不是真正的随机。它只是一个接近于真正随机的随机数。”

比特币的私钥是什么_比特币钱包私钥论坛_查看比特币私钥

私钥生成的随机性非常重要。 密码学上的安全随机性是指:“随机是不可预测的,随机结果是不可遍历的。如果不是安全的随机数生成器,生成的私钥就有可能被其他人撞到。不依赖随机生成的私钥将大大降低了它产生的概率空间。” 公钥和地址的生成依赖于私钥,所以我们只需要保存私钥即可。 有了私钥就可以生成公钥和地址,就可以消费对应地址上的比特币了。

字符串的私钥

上述改进后的私钥串是由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

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

回答上面的问题为什么会有5或者L、K开头的私钥?

查看比特币私钥_比特币的私钥是什么_比特币钱包私钥论坛

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

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

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

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

地址

公钥太长,所以有一个更短地址的概念。 另一方面,没有发送过交易的地址不想暴露自己的公钥比特币的私钥是什么,地址是通过摘要算法生成的,公钥不会暴露。 真实内容:

地址由公钥生成,地址长度为25bytes,经过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,并且版本信息在比特币测试网络上会使用不同的值,完整的比特币地址表示为:

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

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

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

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

查看比特币私钥_比特币钱包私钥论坛_比特币的私钥是什么

私钥的不同对地址有什么影响?

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

1HZwkjkeaoZfTSaJxDw6aKkxp45agDiEzN(未压缩公钥)

1F3sAm6ZtwLAUnj7d38pGFxtP3RVEvtsbV(压缩公钥)

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

总结

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

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

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

关注@blockchainlearningnotes,一起学习区块链