公钥私钥以及比特币地址的产生过程 - Go语言中文社区

公钥私钥以及比特币地址的产生过程


一个比特币钱包包含一系列的密钥对,每个密钥对都有一个公钥(PublicKey)和私钥(PrivateKey)。私钥是由一个随机产生的数字串经过哈希的十六进制字符串,通过椭圆加密算法可以用私钥产生公钥,然后就可以通过公钥产生比特币地址。从私钥到公钥再到比特币地址是一个单向产生的过程,也就是说不能反向的用比特币地址解出公钥,或者从公钥解出私钥。
公钥-->私钥-->比特币地址

私钥

私钥其本质就是一个256位的由0和1组成的随机数,这个随机数是怎么产生的不重要,只要是不可预测和不可重复的都可以,比如可以将硬币的正反面看成是0和1,然后随机掷256次,记录下的一串数字就可以作为私钥。在比特币中,私钥的格式是将这个256位的随机数以64位十六进制数显示,也就是64个(一个十六进制数占4位)我们所看到的用字母和数字组成的“乱码”。下面是一个私钥:

1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD

有人可能会想,这个私钥会不会存在重复的,也就是完全相同的两个私钥,比特币私钥的空间大小为2^256,用十进制表示大约是10^77,而在可见的宇宙中,原子数在 10^78 到 10^82 之间,所以私钥的空间是一个很大的数,可以认为不存在相同的两个私钥。

公钥

公钥是将私钥通过一个椭圆曲线乘法(K = k * G ,其中k是私钥,G是被称为生成点的常数点,而K是所得公钥)的算法计算得来,这是一个不可逆转的过程,即不可能反向计算由公钥计算得来私钥。

椭圆曲线加密算法

椭圆曲线加密法(可点击链接具体了解)是一种基于离散对数问题的非对称加密法,可以用对椭圆曲线上的点进行加法或乘法运算来表达。 下图是一个椭圆曲线的示例:
椭圆曲线
比特币使用的是由美国国家标准与技术研究院 (NIST)设立的secp256k1标准所定义的一种特殊的椭圆曲线和一系列数学常数。secp256k1曲线由下述函数定义,该函数可产生一条椭圆曲线,然后利用这条曲线进而生成公钥。
这里写图片描述

生成公钥

前面说过,比特币中私钥经过椭圆曲线乘法计算之后即可得到公钥,且该过程不可逆转,即只能通过私钥得到公钥,而不能右公钥得到私钥,下面讲述一下椭圆曲线乘法的计算过程。
首先将之前所提到的私钥与生成点G相乘得到公钥K

K = 1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD * G

公钥K 被定义为一个点K = (x, y) 其中

x = F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A 
y = 07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB

我们的目标是找到生成点G 的倍数点kG ,在椭圆曲线中,点的相加等同于从该点画切线找到与曲线相交的另一 点,然后翻折到x轴。下图展示的是在椭圆曲线上找G、2G、4G的几何操作。
这里写图片描述

比特币地址

比特币地址是由公钥经过一系列单向的哈希算法得到。哈希算法是一种单向函数,可以接收任意长度的输入产生指纹或哈希。由公钥生成比特币地址时使用的算法是Secure Hash Algorithm (SHA)和the RACE Integ rity Primitives Evaluation Message Digest (RIPEMD),具体一点说就是SHA256RIPEMD160

以公钥K为输入,计算其SHA256哈希,然后再计算RIPEMD160哈希,所得到的160位(20字节)的数字就是比特币地址。

A = RIPEMD160(SHA256(K))  //其中K是公钥,A是比特币地址

但是,我们会发现产生的比特币地址和我们用户通常所见到的不一样,这是因为为了提高可读性、避免歧义并有效地防止在地址转录和输入中产生错误,我们看到的比特币地址是经过Base58Check编码的,下图描述了从公钥产生比特币地址的过程:
公钥生成比特币地址

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/luckydog612/article/details/81166555
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2019-09-04 17:15:33
  • 阅读 ( 2282 )
  • 分类:区块链

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢