• home > theory > CST > blockchain >

    区块链之公钥、私钥、地址之间的关系

    Author:zhoulujun Date:

    区块链中公钥、私钥、钱包地址之间的关系通过图形阐述的更加直观明了。随机数发生器生成一个『私钥』。后续的公钥、地址都会由私钥生成,所以一句话概括私钥的重要性:”谁掌握了私钥, 谁就掌握了该钱包的使用权!”

    公钥、私钥、地址概念诠释

    • 私钥:实际上是一组随机数,关于区块链中的随机数我们已经介绍过了

    • 公钥:对私钥进行椭圆曲线加密算法生成,但是无法通过公钥倒推得到私钥。公钥的作用是在和对方交易时,使用自己的私钥加密信息,然后对方使用自己的公钥解密获得原始信息,这个过程俗称签名。

    • 地址:由于公钥太长,在交易中不方便使用,就对公钥哈希进行SHA256、RIPEMD160、Base58算法加密生成地址

    9c07f208f2cb6192736aaf9ebded1aad.png

    具体过程:

    1. 首先使用随机数发生器生成一个『私钥』。后续的公钥、地址都会由私钥生成,所以一句话概括私钥的重要性:”谁掌握了私钥, 谁就掌握了该钱包的使用权!”

    2. 『私钥』经过椭圆曲线算法(SECP256K1)算法加密生成了’公钥’。这是一种非对称单向加密算法,知道私钥可以算出公钥,但知道公钥却无法反向算出私钥

    3. 『公钥』经过单向Hash算法(SHA256、RIPEMD160)生成『公钥Hash』

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

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

    私钥、公钥、钱包地址之间的关系

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

    f08748d6e99348662e545f8e0534c8f9.png
    可以看出:通过『私钥』可以得到上述计算过程中所有的值。『公钥哈希』和『钱包地址』可以通过互逆运算进行转换,所以它们是等价的。

    使用『私钥』对交易进行签名

    比特币钱包间的转账是通过交易(Transaction)实现的。交易数据是由转出钱包『私钥』的所有者生成,也就是说有了『私钥』就可以花费该钱包的比特币余额。生成交易的过程如下:

    使用『私钥』对交易进行签名

    1. 交易的原始数据包括“转账数额”和“转入钱包地址”,但是仅有这些是不够的,因为无法证明交易的生成者对“转出钱包地址”余额有动用的权利。所以需要用『私钥』对原始数据进行签名。

    2. 生成“转出钱包公钥”,这一过程与生成『钱包地址』的第2步是一样的。

    3. 将“转出签名”和“转出公钥”添加到原始交易数据中,生成了正式的交易数据,这样它就可以被广播到比特币网络进行转账了。


    使用『公钥』对签名进行验证

    ad054e1fa8b4db2c2cb687bc85eece05.png

    交易数据被广播到比特币网络后,节点会对这个交易数据进行检验,其中就包括对签名的校验。如果校验正确,那么这笔余额就成功地从“转出钱包”转移到“转入钱包”了。


    转载本站文章《区块链之公钥、私钥、地址之间的关系》,
    请注明出处:https://www.zhoulujun.cn/html/theory/ComputerScienceTechnology/blockchain/8257.html