文章简介:
可能很多人接触了区块链很久,至今还未搞清楚比特币私钥、公钥、钱包地址之间的关系。为什么有私钥就有了地址的控制权?交易验证这个过程是如何执行的呢?虽然这些底层处理并不一定得搞清楚,但如果明白,可以让你更深刻的理解私钥的重要性。
知其然,知其所以然……
知识点扫盲
非对称加密算法:有公钥私钥,用公钥加密的数据只有对应的私钥才能解密,反之亦然;
钱包地址的生成
首先使用随机数发生器生成一个【私钥】,一般来说是一个256位的数。
【私钥】经过SECP256K1算法处理生成了【公钥】。SECP256K1是一种椭圆曲线算法,通过一个已知【私钥】时可以算得【公钥】,而【公钥】已知时却无法反向计算出【私钥】。这是保障比特币安全的算法基础。
同SHA256一样,RIPEMD160也是一种Hash算法,由【公钥】可以计算得到【公钥哈希】,而反过来是行不通的。
将一个字节的地址版本号连接到【公钥哈希】头部(对于比特币网络的pubkey地址,这一字节为“0”),然后对其进行两次SHA256运算,将结果的前4字节作为【公钥哈希】的校验值,连接在其尾部。
将上一步结果使用BASE58进行编码(比特币定制版本),就得到了【钱包地址】。
上述可能包含了比较多的专业术语,我们简单点来讲,私钥,公钥以及钱包地址之间的关系可以用下图来表示:
看到这里,相信大家已经明白了这三者的生成关系,那在交易验证中,三者又是又是起怎样的作用呢?
交易验证过程
首先我们看下生成交易的过程(交易验证的过程就运用了非对称加密):
用私钥对交易签名
用【私钥】对交易原始数据进行签名,得到转出签名。
用【私钥】推出【公钥】。
将【转出签名】和【公钥】添加知道原始数据中。
用公钥对签名进行验证
交易数据广播到比特币节点对交易数据进行验证。
使用 【转出公钥】对【转出签名】进行解密,得到的交易数据与原始数据比较,若一致,则验证成功,反之亦然。
本文由币乎社区(bihu.com)内容支持计划赞助。
早赞声明:为方便早赞、避免乱赞,“BH好文好报群”为点赞者、写作者牵线搭桥,实行“先审后赞、定时发表”的规则,也让作品脱颖而出、速登热门!本文授权BH好文好报群摘编推广,加群微信:we01230123(天平)。
本文参考链接:http://www.bitcoin86.com/teach/6494.html
如有侵权,请联系译者
版权所有,转载需完整注明以上内容。