用过数字钱包的人,都知道私钥的重要性。如果拥有了一个私钥,就等于拥有了这个钱包里的数字资产。
可能大多数人,知道的也就是仅仅这些,但如果你知道一些更深层的知识,或许你会豁然开朗。
下面,小编就来跟大家分享一下这些基本的概念。
比特币(其它数字货币也一样),正是采用了一种叫公钥加密的密码学原理,也叫非对称性加密学,这种加密学诞生于上个世纪70年代。
最简单的加密学,就是一个密码,猜对了就可以。而这个非对称加密学,它是有两把锁的,也就我们说的,私钥 和 公钥。
私钥: 一个长256位的随机数,用来产生公钥,并用于交易时的数字签名。
公钥:可以产生更简单的地址,类似于银行帐号。
在这个之间,还有一些问题,就是如何产生?包括私钥如何产生?
整个过程可以用一张图来演示:
私钥的产生
如果你丢一枚硬币,正面的话 写1, 反面的话写0。 如果你连丢256次后,把所有的1和0连在一起,这就是一个很好的随机数。随机数就是私钥。
因为,另一个人要丢出和你一样的随机数,几乎为0,不信你找另一个人练练,看看你们能丢出几次相同的,记住要顺序一模一样,大概前6次你们还能相同,到10次你就能中彩票特等奖了,何况还是256次。
256位全部用0和1表示,因为计算机只认识0和1,我们所有存在计算机的内容最终全是0和1,这是计算机的世界。
那么,256位长度的随机数,就是2的256次方,大概是10000……一共有77个0。可以有这么多个随机数,也就是可以有这么多个私钥。
关于随机数的产生,也是有相关的算法的,也就是我们听到的SHA256哈希算法。不是真的让去丢硬币,总之,你只要记住,它是一个很长的数字。
SHA256哈希算法,通过读入一段随机的字典,就会生成一个256位的随机数。这个数必须小于2的256次方,那么这个随机数就是合格的私钥,如果不符合就再生成一次。
随机字典就是我们钱包里的助记词,由12到24个单词组成,用这个来产生私钥。有没有豁然开朗的感觉?
公钥
有了私钥,再通过椭圆曲线算法,就可以产生出公钥啦!这个私钥和公钥是配对的!
随圆曲线算法,也是一个高度复杂的数学公式,在这个世界上只有数学公式是唯一的真理,有没有让你想起高中数学题椭圆,双曲线,抛物线?对,就是高中数学,但是财神现在感觉好像没上过高中一样。
还有一点,椭圆曲线算法是一个单向计算过程。
就是说,只能通过私钥计算出公钥,不能由公钥计算出私钥来,否则你想想后果。
计算出来的公钥就是一个平面上的点,点它就是由(x, y)坐标来表示的。那么一个公钥长度就是256+256=512位,这么长长长的一个数字。
后面会讲,其实还有其它前缀,所以长度大于512位。
比特币地址
比特币地址大家就更加了解了,平时我们转帐,充值用的都是比特币地址,它是一个数字+字母的字符串,比特币地址相当于我们的银行卡号一样,供别人使用。
比特币地址又是由公钥,经过一个加密哈希算法函数计算而来的,比如我们说比特币使用SHA256加密算法,就是一个这样的哈希函数。
比特币地址 = RIPEMD160(SHA256(公钥))
嵌套两层哈希加密算法,SHA256 和 RIPEMD160,也有称作“双哈希”之称,最后得到了160位长度的比特币地址,即20个字节。目的就是让512位长度的公钥变得短一些,可读性更强,更重要是为了节省区块空间。
因为每笔交易记录,都要记录转帐的地址,而如果用512位长度的地址,那将极大的浪费空间。一个比特币区块的大小也就1M。
不同数学货币使用的算法有差别,但过程和原理是一样的。
我们说的一个比特币地址长度为160位,就是要160个数字那么长,写起来不方便也不好读,所以还会增加其它方式的编码。
在计算机硬盘上都是二进制,0和1,现实中我们用的是十进制,即0-9。还有其它编码如8进制,16进制,已经开始用字母表示啦,a表示10,b表示11,f表示16。
那么,比特币最后的地址还采用了58进制,64进制等编码格式,即包括了所有大小写的字母,这样160位长的数字就变得更短了,就是我们现在看到的长度。
58进制? 即0-9,a-z, A-Z,加起来62个,其中再减去几个容易出错的字母,0和字母O很像,所以去掉了0,还有字母I等等。
整个压缩过程如下
记住,编码方式可以有多种,它只是一种展示的方式,并不会改变数字本身。所以,地址前都有一个前缘,代表使用了何种编码。比特币第一个字字符是“1”,代表了一种编码格式。
经过后最后的编码后,比特币地址就诞生了,比如财神的比特币接收地址长成这样:1DeRhwdYkLy9mSdHrfpFEdNNUFZkkwGBx6。