【私钥|地址|公钥】你知道私钥为什么那么重要吗?

文章简介:
可能很多人接触了区块链很久,至今还未搞清楚比特币私钥、公钥、钱包地址之间的关系。为什么有私钥就有了地址的控制权?交易验证这个过程是如何执行的呢?

虽然这些底层处理并不一定得搞清楚,但如果明白,可以让你更深刻的理解私钥的重要性。

知其然,知其所以然……


知识点扫盲

非对称加密算法:有公钥私钥,用公钥加密的数据只有对应的私钥才能解密,反之亦然;


钱包地址的生成

地址生成.png
  1. 首先使用随机数发生器生成一个【私钥】,一般来说是一个256位的数。

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

  3. 同SHA256一样,RIPEMD160也是一种Hash算法,由【公钥】可以计算得到【公钥哈希】,而反过来是行不通的。

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

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

上述可能包含了比较多的专业术语,我们简单点来讲,私钥,公钥以及钱包地址之间的关系可以用下图来表示:

三者关系.png

看到这里,相信大家已经明白了这三者的生成关系,那在交易验证中,三者又是又是起怎样的作用呢?


交易验证过程

首先我们看下生成交易的过程(交易验证的过程就运用了非对称加密):

用私钥对交易签名
私钥签名.png
  1. 用【私钥】对交易原始数据进行签名,得到转出签名。

  2. 用【私钥】推出【公钥】。

  3. 将【转出签名】和【公钥】添加知道原始数据中。

用公钥对签名进行验证
公钥验证.png
  1. 交易数据广播到比特币节点对交易数据进行验证。

  2. 使用 【转出公钥】对【转出签名】进行解密,得到的交易数据与原始数据比较,若一致,则验证成功,反之亦然。


本文由币乎社区(bihu.com)内容支持计划赞助。

早赞声明:为方便早赞、避免乱赞,“BH好文好报群”为点赞者、写作者牵线搭桥,实行“先审后赞、定时发表”的规则,也让作品脱颖而出、速登热门!本文授权BH好文好报群摘编推广,加群微信:we01230123(天平)。

本文参考链接:http://www.bitcoin86.com/teach/6494.html

如有侵权,请联系译者

版权所有,转载需完整注明以上内容。

你可能感兴趣的:(【私钥|地址|公钥】你知道私钥为什么那么重要吗?)