DEDAO 发表于 2018-9-16 09:26:15

区块链之私链,公链

在私钥、公钥、地址(一)一文中,已经对私钥的生成和换算做了简单的说明,公钥和地址也都是因私钥而生的。在平时大众新闻资讯介绍中,我们也常常听到相关的说明,但是往往都是一句话带过:经过一系列哈希运算得到结果等等这样的描述。确实,在公钥地址的运算过程中,的确用到了很多次的哈希运算,但是具体的步骤流程是怎么样的,大概很少有人去了解一下。这一文,吴哥就跟大家一起边学边分享,相信,通过这一系列的学习,这一系列的算法一定会深深的吸引酷爱比特币和区块链的你。为了明确三者之间的关系,我们先来梳理一下从私钥到公钥到钱包地址的生成路径,如下图。http://cdn-app.zdpvt.com/public/5af91f434b/641a2fd4e9.png我们根据以往的知识进行一下流程的梳理:一、私钥的产生前面我们已经学习过私钥的产生,其本质就是一串随机数,并且运用Base58算法进行了转化,通常,这个私钥产生的都是由软件来完成,我们所要做的就是安全的保存好自己的私钥。不过,现在的私钥也有很多其他的样式,就像我们在imtoken钱包或其他类型的钱包中常常见到的助记词也是私钥的一种表现方式。助记词的重要性等同于私钥,也是要个人安全保存。二、公钥的产生有了私钥,就可以利用椭圆曲线加密算法(ECDSA-secp256k1)计算私钥所对应的非压缩公钥。曲线加密算法是一种不可逆的加密算法,这也就意味着从私钥到公钥是单向推导关系,只能由私钥推导出公钥,而无法从公钥推导出私钥,这个单向性也是非对称加密的精髓所在。基于这一点,我们的公钥可以告诉任何人而不必担心私钥被破解。其中的椭圆曲线加密算法是一种极其复杂的数学算法,不少人第一眼看到曲线这一词自然而然的想到椭圆曲线公式,不过实际上,椭圆曲线加密算法跟椭圆基本没有关系,后面我们会单独就椭圆曲线加密及其不可逆性进行学习。我们先看一看它的样子吧,如下图。http://cdn-app.zdpvt.com/public/5af91f434b/5fe513c2b7.png是不是很意外,别急,后面吴哥跟大家一起来慢慢探讨椭圆曲线加密算法。其实,现在我就有两个问题想弄明白:1、椭圆曲线加密算法具体是什么过程2、既然是有算法,为什么是不可逆的,又是怎样做到不可逆的。相信带着这些问题去学习,你一定会理解的更加深刻。三、由公钥计算公钥哈希经常看吴哥文章的人,对这一步一定非常理解,也更容易消化。由公钥计算公钥哈希就是进行了两次哈希运算,这两次哈希运算分别是SHA256和RipeMD160。在哈希运算一文中,吴哥也进行过详细的说明,在文中我也提到过进行哈希运算的一个网站,网站里面就提到了各种不同的哈希运算。网址:http://www.fileformat.info/tool/hash.htm http://cdn-app.zdpvt.com/public/5af91f434b/c91493a3f0.pngSHA256和RipeMD160都位列其中,认真读吴哥文章的朋友一定有印象。如果把哈希运算比作中餐的话,那SHA256和RipeMD160和其他的算法就相当于鲁菜、苏菜、粤菜、川菜等等各种菜系。哈希运算的特性决定了,从公钥到公钥哈希也是单向不可逆的。公钥哈希计算后放在一边,后面都会用到。然后准备好地址版本号(比特币主网版本号“0x00”)如图所示四、公钥哈希进行两次哈希运算这一步的运算不是为了减少长度或增加推导难度,而是为了取其哈希值的前4个字节当做效验。哈希运算在这里就不在重复说明了。五、经过Base58得到钱包地址地址版本号(图中的0x00)+公钥哈希+公钥哈希的效验三个组合进行Base58换算,最终得出了钱包地址。Base58算法在上一文中也介绍了,这里不在重复,其本质就是58进制。就这样,从私钥到公钥到地址的整个过程梳理完毕,可以看到,其中用到了多次多种的哈希算法,并且用到了Base58算法。我们知道,哈希算法是单向不可逆的,Base58是可逆的,所以,私钥、公钥、公钥哈希、和钱包地址直接的方向关系可以用下图进行简单说明。http://cdn-app.zdpvt.com/public/5af91f434b/f75519acf4.png关于私钥、公钥和钱包地址今天就先学习到这里,后面会对其中的一些细节进行学习和分享。希望有技术大神能指教留言,毕竟,关于区块链知识我也是一名小白,文中所述也是一个外行人根据自己的理解所写,其中不乏不妥之处,还望技术大神赐教。
页: [1]
查看完整版本: 区块链之私链,公链