美文网首页
比特币中的非对称加密

比特币中的非对称加密

作者: RickJay | 来源:发表于2018-05-20 22:03 被阅读11次

    阅读要求:已经了解加密算法的分类,了解什么是非对称加密及密钥的概念,了解比特币的交易流程

    在比特币我们的钱包地址,和我们自己保存的私钥是怎么来的?那是不是还有公钥呢?

    没错,产生私钥的同时,的确产生了公钥,他们是成对存在.

    其实钱包地址就是公钥另一种存在形式,怎么理解?

    公钥长这样:

    0406CCAE7536386DA2C5ADD428B099C7658814CA837F94FADE365D0EC6B1519385FF83EC5F2C0C8F016A32134589F7B9E97ACBFEFD2EF12A91FA622B38A1449EEB

    我们通常看到的钱包地址是这样的:

    1QCXRuoxWo5Bya9NxHaVBArBQYhatHJrU7

    我们对公钥,分别进行了SHA256RIPE160BASE58,也就是两次哈希散列加密,一次编码操作.

    得到钱包地址.

    总结流程:

    产生私钥->产生公钥->产生钱包地址

    比特币中私钥,公钥,钱包地址关系如下图: image

    我将从产生私钥到钱包地址的产生,分成9步:

    先上图:

    image

    第一步:随机生成私钥

    私钥是随机数,32字节,范围:1 ~ 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE,那我们生成一个合法的私钥:

    8F72F6B29E6E225A36B68DFE333C7CE5E55D83249D3D2CD6332671FA445C4DD3

    第二步:利用椭圆曲线加密(ECDSA)生成公钥

    椭圆曲线加密算法(ECDSA-SECP256K1),目前无法被破解,由此我们生成非压缩形式的公钥,一共66字节,字节被分为三个部分,1.标志位:0x04;2.32字节X坐标;3.32字节Y坐标

    公钥X:

    06CCAE7536386DA2C5ADD428B099C7658814CA837F94FADE365D0EC6B1519385

    公钥Y:

    FF83EC5F2C0C8F016A32134589F7B9E97ACBFEFD2EF12A91FA622B38A1449EEB

    标准公钥:

    0406CCAE7536386DA2C5ADD428B099C7658814CA837F94FADE365D0EC6B1519385FF83EC5F2C0C8F016A32134589F7B9E97ACBFEFD2EF12A91FA622B38A1449EEB

    第三步:计算标准地址的SHA256哈希值

    公钥第一次散列哈希,便于表达,我将哈希值记为X

    2572e5f4a8e77ddf5bb35b9e61c61f66455a4a24bcfd6cb190a8e8ff48fc097d

    第四步:进一步计算RIPEMD-160

    将X进行RIPEMD-160哈希计算,我们记为Y

    0b14f003d63ab31aef5fedde2b504699547dd1f6

    第五步:加入地址版本号(比特币主网版本号"0x00")

    我们在Y前面加上16进制的0x00,记为Z,如下:

    869ac57b000b14f003d63ab31aef5fedde2b504699547dd1f6

    第六步:计算SHA-256哈希值

    将Z再进行两次SHA-256计算,得到哈希P

    ddc2270f93cc84cc6869dd373f3c340bbf5cb9a8f5559297cc9e5d947aab2536

    再来一次,这里就是P了

    869ac57b83ccf75ca9da8895823562fffb611e3c297d9c2d4612aeeb32850078

    第七步:取得P的前4字节(8位16进制)

    869ac57b

    第八步:将取得的4字节添加到Z后面,作为校验码

    这也就是比特币钱包地址的16进制形态了:

    000b14f003d63ab31aef5fedde2b504699547dd1f6869ac57b

    第九步:用Base58编码,变换地址格式,唯一可以反向推导的步骤

    对上一步结果进行Base58编码:

    1QCXRuoxWo5Bya9NxHaVBArBQYhatHJrU7

    思考:公钥理论上是可以推出私钥,但是非常困难,作为数字资产,我们肯定需要严谨,所以我们对公钥进行了散列处理,就得到我们所用的钱包地址,这注定是不可逆的,就保护了公钥和私钥的安全.

    还想提一点,比特币除了生成钱包用到了SHA256,在挖矿时,也就是矿工处理加工交易信息时,同样也是用的SHA256.

    相关文章

      网友评论

          本文标题:比特币中的非对称加密

          本文链接:https://www.haomeiwen.com/subject/bqdtjftx.html