用数学的方式解释非对称加密算法
阅读过<<互联网项目架构之安全的账号系统设计,即使被拖库撞库,也可以保证密码绝不泄露>>和<<互联网项目架构之账号系统安全设计的正确姿势>>这两篇文章的朋友应该知道了加密的重要性,加密也是为了防止用户信息被泄露,今天我们继续研究加密,但今天主要研究非对称加密。
我们设计用户表的时候采用的是不可逆的对称加密算法,也就是理论上一个原文对应一个密文,但一个密文可能对应多个原文,所以在数学上不可逆。
而今天我们研究的非对称加密,却是数学上可逆的加密算法,既然是可逆的,那为什么又能保证原文的安全?不管对称加密还是非对称加密,其加密算法都是公开的,为什么也不能被爆破?为什么自己实现的加密算法却不推荐使用?
接下来我们就针对这些问题,进行一个深入的探讨和研究。
首先我们还是:
从对称加密说起
什么是对称加密?所谓对称加密就是加密算法和解密算法互为相反过程的加密算法,比如我想把一句“我爱你”通过网络传给远方的女朋友,如果直接以原文传输,那么在传输的过程中可能就会被黑客劫持,黑客一看,哎呀,这小子还挺肉麻,给你改成了“我恨你”再继续传输,等到远方的女朋友收到“我恨你”,这下好了,这关系黄了。为什么明明发的是“我爱你”,却变成了“我恨你”,这很纳闷啊。
所以有人发明了对称加密,比如A和B私下约定好,我们之间的所有消息都通过了一个函数进行加密,收到消息之后再按这个函数来进行解密,过程就成了这样:
A和B约定函数f(x)就是将原文“我爱你”转换成一些看不懂的乱码,通过网络传输,黑客即使劫持到消息,他也看不懂这是什么意思,当B收到消息的时候,按照约定通过函数f(x)进行求解得到原文“我爱你”,这样就保证了A和B之间发消息不会被篡改。
在这之间,“我爱你”就是原文,f(x)就是密钥,乱码就是密文,这样的一个加密通信过程是互为相反过程,所以叫对称加密。
那么问题来了,如果黑客劫持到了消息,他知道这段消息是通过某种固定的算法得到的,那么他完全可以劫持大量的消息之后,通过不断的尝试,最终拿到你的加密过程,即密钥,这样一来,黑客同样破解了你的加密过程,那么你不得不重新约定加密算法。
但A和B可以约定每发一条消息就换一个密钥,这完全可以,但A和B又不是面对面交流,那么密钥的重新约定又成了一个问题,你说A可以打电话告诉B新的密钥,这又不排除电话被监听的可能性。
所以,后来才有数学家和信息安全专家发明了MD5、SHA1等加密算法,让原文加密之后得到一个密文,而这个密文可以对应多个原文的加密算法,这样一来即使加密算法是公开的,但过程是不可逆的,所以没办法进行爆破,而我们也并不是什么信息安全专家,我们不应该尝试自己实现的加密算法。
非对称加密
但显然这样的不可逆算法不适用于A和B进行通信,所以,非对称加密算法就该出场了,A和B通过某种新的算法来得到密钥,这个算法同时产生一个公钥和一个私钥,而公钥和私钥又存在着某种关系,那么,A和B的通信就变成了这样:
B通过密钥生成器得到公钥e和私钥d,B可以通过任何方式将公钥e传给A,然后B跟A约定好:你发消息通过e进行加密,我拿到消息之后就知道你表达的是什么意思。这样一来,即使黑客劫持了密文和公钥e,而e只能进行加密,不能解密,只要d没有被泄露,是没办法爆破的。
RSA非对称加密
而RSA非对称加密就是实现了这样的一个过程,RSA其实是由麻省理工的三位数学家发明的,分别叫罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman),他们名字的缩写就是RSA了。
那RSA为什么安全?我们不妨来研究一下它的数学过程:
其基本原理就是质因数分解,以刚才A和B通信的例子,密钥生成器的过程是这样的:
1.先找出两个素数p和q;
2.求出p和q的乘积x;
3.有一个函数f(x)=(p-1)(q-1),欧拉函数;
4.求公钥e:在1到f(x)之间找出一个整数并且e和f(x)互为质数;
5.求私钥d:e和d的乘积再模以f(x)等于1,假设f(x)=20,e=3,那么d=7;
假设现在A和B之间传输一个数字m,那么加密则是:me%n=c;得到密文c,则解密过程则是:cd%n=m,由此还原出原文m。
RSA的安全性
根据上面的推导,如果要加密的话,需要已知n、公钥e得到密文c,如果要解密的话,需要已知n、私钥d和密文c得到原文。
但由于黑客劫持,知道n、e、c,但不知道d,所以,不能还原到原文,即使要通过计算得到d,那就需要知道f(x),而f(x)又是由p和q决定的,需要进行质因数分解,但是,RSA的加密是非常大的两个质因数得到的f(x),通常是1024位长度的二进制数,目前普通的计算机还没有这样的能力,计算机能乘出这样大的数字是一瞬间的事,但如果要分解这么大的数字,就比较难了,所以认为这样的加密是安全的,即使是量子计算机,也需要很多天才能破解。
不过为了安全起见,像银行系统、支付宝这样的金融项目,通常也需要定期的更换密钥能保证数据的安全性。 支持楼主,用户楼主,楼主英明呀!!! 支持你哈................................... LZ是天才,坚定完毕 支持你哈................................... 佩服佩服! 我只是路过,不发表意见 确实不错,顶先 报告!别开枪,我就是路过来看看的。。。 好,很好,非常好!