熟悉比特币的朋友必须知道,买卖比特币最终是通过钱包地址实现的,就像我们每天使用的银行卡号一样,我们可以随机找到一个比特币钱包地址,让我们来看一下:
1QCXRuoxWo5Bya9NxHaVBArBQYhatHJrU7
但是,关于比特币钱包地址的计算方式,很少有人能够弄清楚。
接下来,通过实际的计算,陈静将向您解释比特币钱包地址如何产生,公钥和私钥如何产生以及它们之间的关系。
在以下过程中,您不一定了解转换的原理,只知道它们的流通过程。
众所周知,比特币基于数学加密,而不是像银行卡那样基于信用。我们都熟悉基于信用系统的银行卡号。这是我们向银行申请银行卡的时间。随机,比特币钱包地址是怎么来的?
在文章“比特币:对等电子现金系统”中,中本聪提到使用椭圆加密算法(ECDSA)来生成比特币的私钥和公钥。
基于椭圆加密原理,可以从私钥中计算出公钥,然后可以通过一系列数字签名操作从公钥中获取比特币钱包地址。
因为公钥可以计算比特币地址,所以我们经常混淆公钥和比特币地址。他们都指同一个概念。比特币钱包地址只是另一种格式的公钥。但是两者的外在表现是不同的。
然后我们可以整理上下文:
私钥-公钥-比特币钱包地址
从比特币私钥获取用于日常转移的比特币钱包地址总共需要九个步骤,中间使用SHA256加密,RIPEMD160加密和BASE58编码。
接下来,让我们用实际案例模拟整个过程:
第1步:生成随机私钥
私钥是一个随机数。随机选择一个32字节的数字。这个数字的范围是1〜0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间的数字,为了便于后续计算,我们随机生成一个合法的私钥:
8F72F6B29E6E225A36B68DFE333C7CE5E55D83249D3D2CD6332671FA445C4DD3
第2步:椭圆曲线计算公钥
生成私钥后,我们使用椭圆曲线加密算法(ECDSA-secp256k1)计算与私钥相对应的未压缩公钥。生成的公钥共有65个字节,其中之一是0x04,X坐标为32个字节,Y坐标为其他32个字节:
P.X公钥:
06CCAE7536386DA2C5ADD428B099C7658814CA837F94FADE365D0EC6B1519385
公钥P.Y:
FF83EC5F2C0C8F016A32134589F7B9E97ACBFEFD2EF12A91FA622B38A1449EEB
第3步:计算公钥的SHA-256哈希值
组合以上公共密钥地址以获得标准地址:
0406CCAE7536386DA2C5ADD428B099C7658814CA837F94FADE365D0EC6B1519385FF83EC5F2C0C8F016A32134589F7B9E97ACBFEFD2EF12A91FA622B38A1449EEB
对齐并执行SHA-256哈希计算,并获得结果:
2572e5f4a8e77ddf5bb35b9e61c61f66455a4a24bcfd6cb190a8e8ff48fc097d
第4步:计算RIPEMD-160哈希值
取上一步的结果并执行RIPEMD-160计算以获得结果:
0b14f003d63ab31aef5fedde2b504699547dd1f6
第5步:添加地址版本号(比特币主网版本号“ 0x00”)
取上一步的结果,并在前面加上十六进制的00,即:
000b14f003d63ab31aef5fedde2b504699547dd1f6
第6步:计算SHA-256哈希值
取上一步的结果并执行SHA-256计算,您可以获得:
ddc2270f93cc84cc6869dd373f3c340bbf5cb9a8f5559297cc9e5d947aab2536
然后,再次为上述结果计算SHA-256哈希值,并得到:
869ac57b83ccf75ca9da8895823562fffb611e3c297d9c2d4612aeeb32850078
第7步:取上一步结果的前4个字节(8位十六进制)
869ac57b
第8步:将这4个字节添加到第5步的结果中
作为校验位,在第五步的结果之后装入这4个字节。这是比特币地址的十六进制形式:
869ac57b000b14f003d63ab31aef5fedde2b504699547dd1f6
第9步:使用Base58编码更改地址
使用Base58编码上一步的结果,并获得:
1QCXRuoxWo5Bya9NxHaVBArBQYhatHJrU7
这是我们经常看到的传统比特币钱包地址。
可以简化上述步骤,如下图所示:
我们经常说的比特币公钥是指图中第二步的结果,而HASH160是指第四步RIPEMD160签名的结果。由于RIPEMD也是HASH算法,因此统称为HASH160,我们常用的比特币地址是BASE58编码的结果。
推荐以前的读物: