区块链网站|NFTS 比特币地址 【区块链技术发展(二)】比特币私钥、公钥、地址深度解析

【区块链技术发展(二)】比特币私钥、公钥、地址深度解析

广告位

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

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

先说私钥。通常,我们看到的私钥是如下所示的字符串:

5 kyzdueo 39 z 3 fprtux 2 qbbwgnnp 5 ztd 7 yyr 2s C1 j 299 sbcnwjss

支持比特币协议的应用可以正确的把这个字符串转换成比特币的私钥,再转换成公钥,然后得到一个地址。如果这个地址上有对应的比特币,可以用这个私钥消费上面的比特币。私钥本质上是一个随机数。私钥本质上是一个随机数,一个32字节的数组。一个字节等于一个8位二进制,一个二进制只有0和1两个值。所以私钥总数将近2 (8 * 32)=2 256,但是有些私钥不能用。它们的实际大小介于:

1 ~0x ffff FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE 6 AF48 A03B bfd 2 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)是一种公钥-私钥加密技术;

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

DSA(数字签名标准)的数字签名技术;

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

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

04 a 34 b 99 f 22 c 790 C4 e 36 b 2 b 3c 35 a 36 db 06226 e 41 c 692 fc 82 b 8 b 56 AC 1540 c 5 BD 5b 8 dec 5235 a 0 fa 8722476 c 7709 c 02559 E3 aa 73 aa 03918 ba2d 492 EEA 75 a 235

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

回答上面的问题。为什么会出现以5或者L,K开头的私钥?这是因为不同格式的公钥会产生不同格式的私钥。早期的比特币开发者并没有使用压缩公钥(椭圆曲线是对称的,如果你知道一半的信息,就可以推导出另一半),所以你只需要保存一般的公钥信息。的压缩公钥只有33个字节,而未压缩公钥有65个字节。私钥开头第一位的差异用来区分私钥使用的公钥是否支持压缩格式。

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

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

例子中的私钥不仅包含了32字节数组的信息,还包含了私钥版本的信息和其公钥是否被压缩的信息(通过位数和值的个数来判断)。公钥是否被压缩将影响地址以及私钥的显示。

地址的公钥太长,于是就有了较短地址的概念。另一方面,从未发送过事务的地址不希望暴露其公钥,该地址由摘要算法生成,不会暴露公钥的真实内容:

地址由公钥生成,地址长度为25byte,采用base58处理,地址末尾增加4个字节的校验位。

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

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

经过hash160处理后,hash 160:RIPEMD(pace integrity primitives evaluation message digest)是原始的完整性检查消息摘要,160标准对应20字节:

哈希160=哈希160(sha-256哈希)

Hash160处理结果可以得到一个20字节的数组。在这个20位字节数组前面加一个字节,这个字节就是地址的版本信息。地址版本的当前值为0,版本信息将在比特币的测试网络上使用不同的值。比特币地址的完整表示为:

地址=Base58(版本哈希160(SHA-256(公钥))校验和)

校验和用于检查比特币地址,然后将地址的版本信息添加到hash160中。对信息执行两次SHA-256后,前四位是校验和:

校验和=get _ front _ four(SHA-256(SHA-256(版本hash160)))

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

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

1 hzwjkeozftsajxdw 6 akkxp 45 agdiezn(未压缩公钥)

1 F3 Sam 6 ztwlaunj 7d 38 PGF xtp 3 rvevtsbv(压缩公钥)

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

总结私钥、公钥、地址,公钥作为私钥到地址的中间桥梁,其在交易中的验证最为关键。

对于交易的验证,公钥的作用是:

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

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

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

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

广告位
本文来自网络,不代表区块链网站|NFTS立场,转载请注明出处:https://www.qklwz.com/btb/qianbao/19959.html
上一篇
下一篇

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

返回顶部