2019-03-11

比特币背后好玩的密码学原理!

我们今天来聊聊比特币背后好玩的密码学原理?为什么会有密码呢?就是人们的隐私和秘密不想让更多的人知道或者财物不想被人窃取。在现实世界中,你锁上房间的门,是不想让父母知道你的隐私,你外出锁上家里的门,是想让你的财物不被小偷窃取。

在网络世界中,你不想让别人看到你与朋友的通信内容,你可以把明文进行加密,其他人看到的就是乱码。那么,在网络世界中加密方式有几种呢?一共有两种,一种是对称加密,另一种是非对称加密。我们先来看什么是对称加密,就是加密与解密用同一个密码,比如你把一段明文进行加密发给你的朋友,你朋友看到的是乱码,只有用你加密的密码进行解密,他才能看到明文的内容。

那么,用对称加密就好了,为什么会有非对称加密呢?对称加密有一个非常大的缺陷,就是分发密码很不方便,很容易把密码泄露出去,造成不必要的损失。就像刚才我们讲的,你给朋友发一段明文进行加密处理,你朋友想看明文的内容,必须要用你加密的密码进行解密,你怎样把密码告诉你的朋友呢?

是通过网络、短信,还是电话,都有可能被第三方窃取。那么,怎么解决对称加密密码分发的问题呢?

非对称加密能很好的解决这个难题。

什么是非对称加密呢?就是在加密和解密的过程中,分别使用一个密钥对中的两个密钥,如果两个密钥满足:对信息用其中一个加密,只有用另一个才能解密;其中一个密钥公开后,用公开的密钥无法推算出另一个密钥,我们就称这个密钥对为非对称加密。其中公开的叫公钥,不公开的叫着私钥。公钥是可以公开的,所有人都可以用你的公钥进行加密,生成一段密文,来保证发送给你的信息是安全的,私钥你要保存好,只有你自己才能知道,用你的公钥加密过的信息,只能用你的私钥才能解密。 比如公钥就相当于你的工资卡卡号,私钥就相当于你的工资卡的密码。

对称加密和非对称加密的区别就是密钥,对称加密,加密和解密使用的是同一个密钥,非对称加密,加密和解密使用的密钥是不一样的。你可能会问,为什么知道公钥,推算不出私钥呢?就是公钥是确定的,私钥却有多种可能性。比如,你知道公钥是100,你很难推出私钥是1乘100得到,还是1加99得到,当公钥100变成接近无限大的一个数,你更难推出这个数是怎么得来的。比较有名的非对称加密算法是RSA,就是通过随机数生成器,进行运算生成私钥,其中也包含公钥,私钥能推出公钥,但公钥无法推出私钥。

那么,刚才讲了这么多,非对称加密有漏洞吗?有,就是用非对称加密,你发出去的重要信息有可能被篡改过,收件人压根儿不知道。比如你给朋友发一封重要文件,用他的公钥进行加密,因为他的公钥是公开的,别人很容易拿到他的公钥,你发送给他的邮件可能被别人截获,篡改后再用你朋友的公钥进行加密,发送给他,他却很难验证邮件是谁发的。

那么,怎样解决非对称加密发送的信息可能被篡改呢?

这就要用到单项散列函数,什么是单项散列函数呢?它也叫哈希函数,当然你也可以叫它指纹。就是将任意长度的明文转化为一个长度较短、位数固定的输出,即哈希值,也就是通过这样的算法,明文就变成固定长度的字符串。比如不管你输入的信息是1G或者是80G,通过哈希256运算,产生的结果是固定的256位的哈希值

目前,最有名的单向散列函数是SHA256,SHA是美国国家安全局设计的,美国国家标准与技术研究院发布的一系列密码散列函数,经历了SHA-0,SHA-1,SHA-2,SHA-3系列的发展。

比特币采用的是SHA256算法,属于SHA-2系列。它有以下几个特点:

首先,每个哈希值是唯一的,就是你给定一段明文,通过哈希运算,哈希值只会有一个。有没有可能两段不同的明文,产生一个相同的哈希值呢?就是说产生哈希碰撞,理论上是有的,只是概率非常小,就像宇宙中有没有外星人,理论上是有的,至于能不能发现,现在是个未知数。

其次,生成的哈希值不可逆,就是不能从生成的哈希值推出原始数据。与我们刚才举的公钥推不出私钥例子相似,哈希值是固定的,原始数据却有多种可能性。

最后,相同数据产生同样的哈希值,不同数据产生的哈希值千差万别,哪怕只有一个标点符号的不同,产生的结果也不相同。

比特币系统中但凡有需要做Hash运算的地方都是用SHA256运算的,到目前为止,没有发现SHA256有漏洞。

那么,哈希函数怎样解决非对称加密发送的信息可能被篡改呢?

就是先把发送的文件进行哈希运算,再通过非对称加密发送出去。

比如你发送一些重要的文件给你的朋友,为防止被人篡改,你可以把要发的文件进行哈希运算,把产生的哈希值和文件通过你朋友的公钥进行加密发送给他,他收到你的信息后,用他的私钥进行解密,再把你给的文件进行哈希,如果哈希值与你给的哈希值一致就是文件没有被篡改,这里进行了双重保险,非对称加密一次,哈希运算又一次。

最后,我们来看比特币是怎样运用非对称加密、哈希函数和数字签名技术的。比特币地址其实是一套非对称密钥对中的公钥,那么,它是怎么生成的呢?你可以简单理解成,通过随机数生成一个私钥,再通过椭圆曲线算法,生成公钥。再把公钥进行SHA等一系列运算生成比特币地址。你看通过比特币地址想要推出私钥,堪比登天还难。

刚才讲的是比特币地址生成的流程,比特币转账又用到哪些密码学技术呢?用到了非对称加密和数字签名。比如你给朋友转账比特币,先要知道它的比特币地址,相当于知道它的公钥,你可以用他的公钥进行加密,你朋友可以通过他的私钥进行解密,你在发送的比特币下方签上你的私钥,也就是数字签名,你朋友很容易用你的公钥验证比特币是你转给他的。

好了,我们来回顾一下今天聊的重点内容,主要讲了对称加密、非对称加密和哈希函数,比特币地址是通过非对称加密、哈希函数等密码学技术生成的,比特币转账用了非对称加密技术和数字签名等密码学技术。

你可能感兴趣的:(2019-03-11)