手机版 | 登陆 | 注册 | 留言 | 设首页 | 加收藏
当前位置: 网站首页 > 炒币软件 > 文章 当前位置: 炒币软件 > 文章

比特币的公钥与私钥

时间:2021-12-29    点击: 次    来源:网络    作者:佚名 - 小 + 大

在比特币交易中,也采用了这种公钥与私钥加密机制,但与一般的公钥与私钥有所不同。

在比特币交易中,私钥是一段字符串,例如这样的一段字符串:5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss,就是一个私钥。只要是正确支持比特币协议的应用都可以把这段字符串识别为私钥,并把私钥转换成公钥,再转换为地址,如果对应的地址上有比特币,就可以使用这个私钥来花费该地址的比特币。公钥和地址的生成都依赖私钥,所以私钥在比特币交易中相当重要,有了私钥就能生成公钥和地址,就能够花费对应地址上的比特币。私钥花费比特币的方式就是对这个私钥拥有的未花费的交易进行签名(加密)

私钥本质上是32个字节组成的数组,1个字节等于8位二进制,一个二进制只有两种可能性:0或者1,所以私钥的总数就是2(8*32)2=236个。这个数量已经超过了宇宙中原子的总数,想要遍历所有的私钥来试图找出加密用的私钥是不可能的,因此私钥从密码学上来讲是安全的。

私钥的总数很大,但是私钥由随机函数生成,它是随机的结果、是不可预测的,而且随机的结果是不可遍历的,这样才能使私钥不至于因耦合而造成比特币持有者的损失。

私钥是由32个字节组成的数组,即由2560或者1组成的,原样显示的话太长且不便于识别。为了便于显示和识别,一般会对私钥的32个字节的数组做Base58的转换,形成了前面的私钥的例子。Base58是比特币中使用的一种独特的编码方式,主要用于产生比特币的钱包地址和私钥。

私钥除了以5”开头的以外,还有以“L”和“K"开头的私钥,其中5LK有不同的含义,这些含义与公钥有关。

公钥是由私钥生成的,通过椭圆曲线(ECPoint)生成,一个私钥经过椭圆曲线变换之后会生成一个65个字节的数组,一般我们会看到这样的一个公钥:04a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd5b8dec5235a0fa8722476c7709c02559e3aa73aa03918ba2d492eea75abea235。为了显示方便,公钥一般是把字节数组经过Hex(十六进制)处理之后显示出来的,不同于私钥所用的Base58编码方式。公钥的作用是解开私钥签名的数据,交易者在使用私钥对交易进行签名之后,会把交易与自己的公钥一起发送;经过私钥加密(即数字签名)的数据可以使用公钥解密,矿工接收到公钥之后,通过解密交易才能验证私钥的签名的正确性。私钥和公钥是成对出现的,一个私钥签名的数据,只有对应的公钥才能解开,而地址也是由公钥生成的,这样就可以验证花费的交易是不是属于这个地址的。

上述例子中的私钥不仅仅包含了32个字节数组的信息,还是私钥version的信息和公钥是否压缩的信息。压缩后的公钥只有33个字节,而未压缩的公钥有65个字节,通过压缩减少了32个字节的数据。这一点对比特币系统的意义很大,因为比特币是去中心化的点对点加密货币,每个节点都会拥有完整的交易记录,除了coinbase(挖矿得到的比特币)以外,每个交易都会发送公钥,公钥采用压缩格式,交易数据就会减少32个字节,整个比特币网络的数据都会因此减少。


在对私钥进行Base58编码的时候,5开头的私钥都是不支持压缩格式的私钥,而LK开头的都是支持压缩格式的私钥。

地址是由公钥产生的,在比特币网络中看到的地址都是经过Base58编码处理的。地址的生成过程比较复杂,它是由公钥生成的,但是公钥生成地址的时候会先生成一个Hash160字符申。生成的过程是:先对公钥进行一次SHA256,再对得到的结果做次RIPEMD160,再从结果中取20个字节数组,这个得到的数组就是得到的hash160.例如:9a1c78a507689f6f54b847adlcef1e614ee23fle。在这个20位的字节数组前面再加上一个字节(地址的版本信息),得到一个21位的字节数组,再对这个数组进行Base58转换就生成了钱包的地址信息(如图2.12所示的过程)

一个私钥可以生成一个压缩的公钥和一个未压缩的公钥,每个公钥都会生成一个地址,上述例子中的私钥就会产生两个地址,分别为:1HZwkjkeaoZfTSaJxDw6aKkxp45agDiEzN(未压缩公钥)1F3sAm6ZtwLAUnj7d38pGFxtP3RVEvtsbV(压缩公钥)。这两个地址都是这一个私钥的地址,每个地址上的钱都可以用这个私钥花费。但是目前大多数的应用都是支持压缩格式的私钥。

过程描述如下:

(1)首先使用随机数发生器生成一个私钥。一般来说这是一个256bits的数,拥有了这串数字就可以对相应“钱包地址”中的比特币进行操作,所以私钥必须被安全地保存起来。

(2)私钥经过SECP256K1算法处理生成了公钥。SECP256K1是一种椭圆曲线算法,通过一个已知私钥时可以算得公钥,而公钥已知时却无法反向推算出私钥。这是保障比特币安全的算法基础。

(3)SHA256一样,RIPEMD160也是种哈希算法,由“公钥”可以计算得到“公钥哈希”,而反过来是行不通的。

(4)将一个字节的地址版本号连接到公钥哈希头部(对于比特币网络的公钥地址,这一字节为0),然后对其进行两次SHA256运算,将结果的前4字节作为公钥哈希的校验值,连接在其尾部。

(5)将上一步结果使用Base58进行编码(比特币定制版本),就得到了钱包地址。

比如,1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa.

在上述五个步骤里只有Base58编码”有相应的可逆算法(Base58解码),其他算法都是不可逆的,所以这些数据之间的关系如图2.13所示。

以上内容由自动量化软件提供!

上一篇:区块链与物联网、大数据、人工智能深度融合

下一篇:使用“私钥”对交易进行签名

备案ICP编号  |   标题:炒数字虚拟加密货币-自动炒币量化交易机器人软件-免费测试  |  地址:自动炒币量化交易机器人软件  |  电话:12345678910  |