xiaoyu2520 发表于 2018-7-23 00:28:37

用数学的方式解释非对称加密算法


  阅读过<<互联网项目架构之安全的账号系统设计,即使被拖库撞库,也可以保证密码绝不泄露>>和<<互联网项目架构之账号系统安全设计的正确姿势>>这两篇文章的朋友应该知道了加密的重要性,加密也是为了防止用户信息被泄露,今天我们继续研究加密,但今天主要研究非对称加密。
  我们设计用户表的时候采用的是不可逆的对称加密算法,也就是理论上一个原文对应一个密文,但一个密文可能对应多个原文,所以在数学上不可逆。
  而今天我们研究的非对称加密,却是数学上可逆的加密算法,既然是可逆的,那为什么又能保证原文的安全?不管对称加密还是非对称加密,其加密算法都是公开的,为什么也不能被爆破?为什么自己实现的加密算法却不推荐使用?
  接下来我们就针对这些问题,进行一个深入的探讨和研究。
  首先我们还是:
  从对称加密说起
  什么是对称加密?所谓对称加密就是加密算法和解密算法互为相反过程的加密算法,比如我想把一句“我爱你”通过网络传给远方的女朋友,如果直接以原文传输,那么在传输的过程中可能就会被黑客劫持,黑客一看,哎呀,这小子还挺肉麻,给你改成了“我恨你”再继续传输,等到远方的女朋友收到“我恨你”,这下好了,这关系黄了。为什么明明发的是“我爱你”,却变成了“我恨你”,这很纳闷啊。
  所以有人发明了对称加密,比如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位长度的二进制数,目前普通的计算机还没有这样的能力,计算机能乘出这样大的数字是一瞬间的事,但如果要分解这么大的数字,就比较难了,所以认为这样的加密是安全的,即使是量子计算机,也需要很多天才能破解。
  不过为了安全起见,像银行系统、支付宝这样的金融项目,通常也需要定期的更换密钥能保证数据的安全性。

SOCN 发表于 2018-7-23 00:35:11

支持楼主,用户楼主,楼主英明呀!!!

qwerr 发表于 2018-7-23 17:07:22

支持你哈...................................

哭给我看呀 发表于 2018-7-23 19:33:57

LZ是天才,坚定完毕

何幸_ 发表于 2018-7-24 07:57:14

支持你哈...................................

xiaoyu2520 发表于 2018-7-24 15:53:01

佩服佩服!

会笑的鸭子 发表于 2018-7-29 09:24:46

我只是路过,不发表意见

zdwlsm 发表于 2018-7-29 10:34:15

确实不错,顶先

@Xizi_DMGd3634 发表于 2018-7-30 12:46:44

报告!别开枪,我就是路过来看看的。。。

1893354006 发表于 2018-7-31 11:31:03

好,很好,非常好!
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 用数学的方式解释非对称加密算法