加密原理详解:对称式加密VS非对称式加密

1、前言

在了解加密原理前,咱们来看看这样一个故事。html

小红和小明是情侣,一天,小红给小明发短信说:“亲爱的,我银行卡上没有钱了,你给我转1万块吧。”有过上当受骗经历的人都知道这有多是小偷偷了小红手提包,而后拿手机发的短信。不过咱们小明学过加密原理,因而他回复说:“你直接拿个人银行卡刷吧,密码加上咱们第一次约会的日期就是663156。”很明显,只有小明和小红知道他们第一次约会是何时,假设是2008年4月1号,那么小红就能够根据计算663156-200841=462315获得银行卡密码,就能够消费了。java

这就是加密的本质,将信息与密钥相加获得加密后的信息。只有知道密钥的人才能解密。算法

2、什么是秘钥

既然加密须要密钥,那么密钥是什么呢?安全

密钥是做用于加密时的一串密码,经过密钥进行信息加密,传输,到达接收者和监听者,因为接收者也有密钥,因此接收者能够根据密钥进行解密。从而防止通信信息泄露。服务器

3、什么是对称加密

前言讲的故事就是一个对称式加密,小明和小红都知道第一次约会的日期。因此传统的对称式加密须要通信双方都保存同一份密钥,经过这份密钥进行加密和解密。因此非对称加密也称为单密钥加密。函数

对称加密的优点在于加解密速度快,可是安全性较低,密钥一旦泄露,全部的加密信息都会被破解。同时密钥的传输和保密也成为难题。为了解决密钥传输的问题,出现经过密钥交换创建共享密钥的技术。具体如何创建共享密钥呢?咱们往下看。学习

3.1 创建共享密匙

在小明、小红和小偷的三人世界中,因为小明是学过加密原理的,知道迪菲–赫尔曼密钥交换(Diffie-Hellman Key Exchange),因此他知道如何创建共享密钥。加密

3.1.1 颜料混合把戏:

接下来咱们看看如何经过颜料混合把戏创建共享密钥吧。spa

假设在房间中有小明、小红和小偷三我的,每一个人各自拥有相同颜色的颜料。在房间的正中间也有这些颜料。接下来,小明要和小红创建共享密钥了。此时,小明对你们说:“我要用蓝色。”而后小明从本身的颜料里选择了黄色,这个黄色就是小明的私钥,小红和小偷都不知道。小明将本身的私钥黄色与公钥蓝色混合后,获得了一种不能分解的颜色,咱们就叫“小明-蓝色”吧(虽然你们都知道黄+蓝变绿,可是这里咱们为了知道是谁的混合色,仍是以名字加公钥颜色来称呼),而后小明将“小明-蓝色”公布了出来。一样,小红听到了小明说用蓝色后,也选择了本身的私钥红色与公钥蓝色混合,获得了“小红-蓝色”并公布了出来。.net

此时,房间中小明、小红、小偷三人都知道了几个信息。

1.他们都用了蓝色

2.小明公布了“小明-蓝色”(小红和小偷不知道是什么颜料与蓝色的混合)

3.小红公布了“小红-蓝色”(小红和小偷不知道是什么颜料与蓝色的混合)

接下来,见证奇迹的时刻到了,小明拿到“小红-蓝色”与本身的私钥“黄色”混合,获得“小红-蓝色-小明”的新颜料。一样的,小红拿到“小明-蓝色”与本身的私钥“红色”混合,获得“小明-蓝色-小红”。你们发现了吗?“小红-蓝色-小明”和“小明-蓝色-小红”是如出一辙的颜色。而小偷不知道小明和小红的私钥颜色,没法混合出与他们相同的颜色。

至此,共享密钥创建起来了。在了解了共享密钥的创建过程后,咱们将告别实体颜料,采用数字的方式来创建共享密钥。

注:你们可能想到了,小偷能够根据本身的颜料与公钥“蓝色”混合,尝试得出“小明-蓝色”和“小红-蓝色”。这样的方法称之为穷举法,也就是尝试全部的可能性,进行信息破解,因此加密算法在理论上都是能够经过穷举法破解的,只不过实际上,超级计算机都须要计算万亿年才能穷举出全部可能性。

3.1.2 乘法把戏:

首先,咱们假设乘法如同颜料混合同样,是不能分解的,看看如何用乘法与数字创建共享密钥。

小明公开了一个数字5,而后小明选择了一个私人数字4,而后利用乘法将二者混合起来,获得“小明-5”(20),接下来小红也选择了一个私人数字7获得“小红-5”(35),小明拿到35*4=140,小红拿到20*7=140。共享密钥创建完成。

你们也发现了,小偷知道20,35,5这三个数字后,用除法就能算出小明和小红的私钥。因此,接下来咱们将了解实际使用中的如何使用乘法把戏来防止私钥被计算出来的。

3.2 迪菲–赫尔曼密钥交换算法

咱们都知道幂运算,可是要让计算机计算就比较难了。因此,咱们会用幂运算做为创建共享密钥的乘法把戏。同时,咱们还要了解钟算的原理,这里的钟能够理解成咱们常常看到的时钟,咱们常见的时钟最大是12,若是当前是10点,过了4个小时后,就变成了下午2点。也就是(10+4)mod12=2。了解了钟算和幂运算后,就开始进入正题吧。

仍是小明、小红和小偷的房间,小明声明了钟为11,幂运算的底为2,接下来小明和小红分别选择了本身的私钥4和7。

第一步,小明混合本身的“小明-11,2”获得,小红混合本身的“小红-11,2”获得。

第二步,小明拿到“小红-11,2”(7)进行计算,小红拿到“小明-11,2”(5)进行计算。

你们注意到了吗,小明和小红创建了共享密钥3,而小偷没法根据已知的11,2,5,7这几个数字计算出密钥或小明小红的私钥。有了共享密钥后,小明和小红就能够安全进行加密传输了。

迪菲-赫尔曼密钥交换

3.3 AES对称加密过程

AES 的全称是 Advanced Encryption Standard ,是最流行的对称加密算法,其加解密速度快。AES支持128位,192位,256位三种长度的密钥,密钥越长安全性越高。AES加密时会把明文切分红许多小块的明文,而后对每块明文单独加密,将加密后的密文传送出去,接收方再将密文切块解密,获得明文。

以下图所示:

AES加密原理

上一步中小明和小红已经协商好了密钥3。接下来就能够经过对称加密进行通讯了。

在小明、小红和小偷的房间中,小明想把密码“462315”告诉小红,因而:

第一步:将密码按照一位的长度进行切分(实际中一般按128位进行切分);就变成了“4”“6”“2”“3”“1”“5”;

第二步:对每块明文经过密钥3进行加密,结果就是“795648”,而后小明告诉小红和小偷:“个人密码是795648”;

第三步:小红拿到密文后,对密文进行切块,对每块经过密钥3进行解密,就获得了正确的密码“462315”,而小偷因为不知道密钥,就没法解密出正确的信息。

4、什么是非对称加密

在对称加密中,加密和解密使用的是同一份密钥。因此,在非对称加密中,加密和解密使用的是不一样的密钥。非对称加密中的密钥分为公钥和私钥。公钥顾名思义就是公开的,任何人均可以经过公钥进行信息加密,可是只有用户私钥的人才能完成信息解密。非对称加密带来了一个好处,避免了对称式加密须要传输和保存同一份密钥的痛苦。

如今最流行的非对称加密算法就是RSA加密算法,具体是怎么作的呢,咱们继续往下看。

4.1 AES对称加密过程

维基百科是这么解释的:RSA加密算法是一种非对称加密算法,在公开密钥加密电子商业中被普遍使用。RSA是由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)在1977年一块儿提出的。当时他们三人都在麻省理工学院工做。RSA 就是他们三人姓氏开头字母拼在一块儿组成的。

前面咱们讲了如何经过钟算和幂函数创建不可逆(计算机能够经过穷举法计算出私钥,实际场景中就算是超级计算机也要计算几万亿年之久)的共享密钥。因为小红是小明的女友,小明每天在小红面前给她讲RSA加密算法的原理,因此小红也知道怎么得出本身的公钥和私钥。接下来咱们一块儿跟着小红的脚步,看看RSA加密的公钥和私钥是怎么计算出来的。

第一步:小红选择了两个很大的质数p和q,这里为了便于计算,选择2和11;

第二步:计算p和q的乘积n=p*q=2*11=22;

第三部:计算n的欧拉函数φ(n)=(p-1)*(q-1)=10;

第四步:选择一个小于φ(n)且与φ(n)互质的整数e,{1,3,7,9},这里选择e=7;

第五步:计算e对于φ(n)的模反元素(ed mode φ(n) = 1)d,d=3

到这里小红就获得了他本身的公钥(n,e)和私钥(n,d)。其中n就是钟大小,e和d就是幂函数的幂。接下来就经过计算出来的公钥和私钥进行数据的加解密。

仍是小明、小红和小偷三我的,小红对你们说,个人公钥是(22,7),小明知道了小红的公钥后,想讲本身的信息“14”告诉小红,因而就用小红公开的公钥进行加密。

具体步骤以下:

第一步:小明根据要加密的信息14进行计算,获得加密后的信息20,而后将20告诉小红和小偷;

第二步:小红有本身的私钥,将加密信息20进行解密,,获得了小明想传递给小红的信息。而小偷呢,知道22,7,20,可是不知道小红的密钥(22,3),没法解密出正确的信息。

RSA加密算法在数字签名中也发挥着巨大的做用,假设小偷能够假冒小红,说小红的公钥是(22,9),而小明不知道是小偷假扮的,按照小偷的公钥加密后,结果被小偷解密了。数字签名的做用就是防止信息被篡改,小红说她的公钥是(22,7)的同时,使用私钥给这段信息(一般使用MD5值计算签名)加上签名,小明获得公钥(22,7)和签名13,小明拿到签名后利用公钥计算出信息是否被篡改。

5、加密的实际做用

本文使用的很小的数来进行加密原理的讲解,为了是读者能够方便进行计算。在实际使用中(n,e)都是特别大的数,其中n的长度都在768以上,1024长度被认为是基本安全的。

(1230186684530117755130494958384962720772853569595334792197322452151726400507263657518745202199786469389956474942774063845925192557326303453731548268507917026122142913461670429214311602221240479274737794080665351419597459856902143413=
 
33478071698956898786044169848212690817704794983713768568912431388982883793878002287614711652531743087737814467999489
 
×
 
36746043666799590428244633799627952632279158164343087642676032283815739666511279233373417143396810270092798736308917)

6、总结

最后总结一下,首先咱们经过一个诈骗短信的例子,引出了加密的原理就是信息+密钥,密钥就是对信息进行加解密的一串数字。而后经过颜料混合把戏形象的演示了如何创建共享密钥。在使用乘法创建共享密钥的过程当中,学习了钟算和幂运算,接着咱们了解了RSA加密算法的过程,经过两个质数生成公钥和私钥,最后,咱们根据公钥进行信息加密,再经过私钥完成信息解密。

7、写在最后

或许看到这里,你们内心还有许多疑惑。为何小明和小红创建共享密钥时,经过几回幂运算和钟算就能获得同样的共享密钥?为何RSA加密算法要用两个质数?为何经过公钥加密的信息能够经过私钥解开?

加密算法的背后,是一道道迷人的数学难题,而RSA加密算法之因此被普遍运用,是由于一个名为整数分解的古老数学问题,你能够轻易找到两个很大的质数相乘获得一个结果n,可是要将这个结果n分解回两个质数就变得极其困难。尽管这个所谓的“整数分解”问题被研究了数个世纪,还没人能找到一个足够高效的通用方法解决它,并对标准RSA钟大小形成危害。

数学史中充满了未解决的问题,尽管这些迷人的问题缺少任何实际应用,却单靠其美学特质就吸引了数学家进行深刻探究。使人颇感惊讶的是,许多这类迷人但显然无用的问题后来都有了很大的实用价值,这一价值只有在问题被研究数个世纪后才得以破解。整数分解这一问题由来已久。对其最先的严肃研究彷佛是在17世纪,由数学家费马(Fermat)和梅森(Mersenne)进行的。欧拉(Euler)和高斯(Gauss)两位数学“泰斗”也在接下来的世纪里对这一问题作出了贡献。但直到公钥加密于20世纪70年代被发明,分解大数字的困难才成为一个实际应用的关键。

8、参考资料

1.《RSA算法原理》

2.《RSA加密》

3.《RSA加密算法》

4.《改变将来的九大算法》

做者:vivo 互联网服务器团队-Deng Qian
相关文章
相关标签/搜索