1. 首页
  2. 文章列表
  3. 用数学的方式解释非对称加密算法

阅读过《互联网项目架构之安全的账号系统设计,即使被拖库撞库,也可以保证密码绝不泄露》和《互联网项目架构之账号系统安全设计的正确姿势》这两篇文章的朋友应该知道了加密的重要性,加密也是为了防止用户信息被泄露,今天我们继续研究加密,但今天主要研究非对称加密。

我们设计用户表的时候采用的是不可逆的对称加密算法,也就是理论上一个原文对应一个密文,但一个密文可能对应多个原文,所以在数学上不可逆。

而今天我们研究的非对称加密,却是数学上可逆的加密算法,既然是可逆的,那为什么又能保证原文的安全?不管对称加密还是非对称加密,其加密算法都是公开的,为什么也不能被爆破?为什么自己实现的加密算法却不推荐使用?

接下来我们就针对这些问题,进行一个深入的探讨和研究。

首先我们还是:

从对称加密说起

什么是对称加密?所谓对称加密就是加密算法和解密算法互为相反过程的加密算法,比如我想把一句“我爱你”通过网络传给远方的女朋友,如果直接以原文传输,那么在传输的过程中可能就会被黑客劫持,黑客一看,哎呀,这小子还挺肉麻,给你改成了“我恨你”再继续传输,等到远方的女朋友收到“我恨你”,这下好了,这关系黄了。为什么明明发的是“我爱你”,却变成了“我恨你”,这很纳闷啊。

所以有人发明了对称加密,比如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位长度的二进制数,目前普通的计算机还没有这样的能力,计算机能乘出这样大的数字是一瞬间的事,但如果要分解这么大的数字,就比较难了,所以认为这样的加密是安全的,即使是量子计算机,也需要很多天才能破解。

不过为了安全起见,像银行系统、支付宝这样的金融项目,通常也需要定期的更换密钥能保证数据的安全性。

下载为Word文档

文章历史版本:

修改次数:3 次 查看历史版本

版权声明:

本文仅用于学习、研究和交流目的,欢迎非商业性质转载。本文链接:https://masuit.com/1205

l  博主在此发文(包括但不限于汉字、拼音、拉丁字母)均为随意敲击键盘所出,用于检验本人电脑键盘录入、屏幕显示的机械、光电性能,并不代表本人局部或全部同意、支持或者反对观点。如需要详查请直接与键盘生产厂商法人代表联系。挖井挑水无水表,不会网购无快递。

l  文章内容部分来源于互联网,不代表本人的任何立场;涉及到的软件来源于互联网,仅供个人下载使用,请勿用于商业用途,版权归软件开发者所有,下载后请于24小时内删除,请支持正版!因下载本站任何资源造成的损失,全部责任由使用者本人承担!如果你是版权方,认为本文内容对您的权益有所侵犯,请联系博主,待博主进行严格地审查和背景调查后,情况属实的将在三天内将本文删除或修正。

l  博主的文章没有高度、深度和广度,只是凑字数。由于博主的水平不高(其实是个菜B),不足和错误之处在所难免,希望大家能够批评指出。

l  博主是利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的纯镀 24k 文章,请原谅博主成为一个无耻的文档搬运工!

l  博主只是一名普通的互联网从业者,不懂修电脑,不会卖电脑,不会帮你盗号,不会破解开机密码,找不回你丢失的手机等,如有这样的想法请绕道!

相关推荐:

这样也许能更直观地理解HTTPS为什么安全 互联网项目架构之安全的账号系统设计,即使被拖库撞库,也可以保证密码绝不泄露
绕开北京等4城市,带毒激活工具感染近60万用户 互联网项目架构之账号系统安全设计的正确姿势

评论区:

    还没有评论哦,赶紧来写评论吧