前言
这篇记录笔者进行计算机网络相关知识学习过程中遇到的对称加密与非对称加密问题
一、密钥
网上关于密钥的概念很多,这里就简单说一下,密钥是作用于加密时的一串密码,通过密钥进行信息加密,传输,到达接收者和监听者,由于接收者也有密钥,所以接收者可以根据密钥进行解密。从而防止通讯信息泄露。
最简单的理解便是,密钥就是一串数字或一串字符串,在加解密时传给加解密算法
如我们学习C语言时候练习的凯撒加密,便可以理解为,一个置换过顺序的英文字母连续串(密钥),加密算法则是根据原始字符串每个字母在二十六个英文字母表中的位置到我们定义的密钥中去进行转换
二、对称加密
密和解密都是使用的同一个密钥。对称加密只有一个密钥作为私钥。 常见的对称加密算法:DES,AES等。
对称加密的优势在于加解密速度快,但是安全性较低,密钥一旦泄露,所有的加密信息都会被破解。同时密钥的传输和保密也成为难题。为了解决密钥传输的问题,出现通过密钥交换建立共享密钥的技术。
对称加密最大的问题在于密钥泄漏问题,如服务端向客户端发送公钥,如果不采取措施直接发送,发生公钥泄漏问题则会造成不可预计的损失;常见的业内解决方案如下
颜色混合方法
最简单的一个比喻:小明、小红、小偷三者在一个房间,但是三者彼此看不见对方的行为; 现在,小明要交给小红公钥,我们姑且认为公钥在这里为一个颜色,小明将蓝色与自己的私钥-黄色进行混合,并告诉大家,我要交的小明-蓝色,交给小红; 小红将蓝色与自己的私钥红色混合,并告诉大家,我要交的是小红-蓝色,并且交给小明; 小明将小红-蓝色与自己的私钥-黄色混合,得到一种颜色,小红将小明-蓝色与自己的私钥-红色混合,得到一种颜色; 这时大家会发现,小红得到的颜色与小明得到的颜色相同,那么此时公钥便建立起来了,小偷并不知道他们使用了什么私钥进行混合,从而无法得到公钥 公钥建立起来后,接下来便是使用公钥的数字化传输了
乘法把戏
乘法把戏类似颜色混合方法: 小明公开了一个数字5,然后小明选择了一个私人数字4,然后利用乘法将两者混合起来,得到“小明-5”(20),接下来小红也选择了一个私人数字7得到“小红-5”(35),小明拿到354=140,小红拿到207=140。共享密钥建立完成。
迪菲–赫尔曼密钥交换算法
我们都知道幂运算,但是要让计算机计算就比较难了。所以,我们会用幂运算作为建立共享密钥的乘法把戏。同时,我们还要了解钟算的原理,这里的钟可以理解成我们经常看到的时钟,我们常见的时钟最大是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这几个数字计算出密钥或小明小红的私钥。有了共享密钥后,小明和小红就可以安全进行加密传输了。
具体的计算过程如下: “小明-11,2”(2^4 mod 11 =5)和“小红-11,2”(2^7 mod 11 =7)是各自的公钥,然后对方拿到公钥后,跟自己的私钥做一个幂运算,再和11做一个钟算(7^4 mod 11 =3, 5^7 mod 11 =3),就能建立共享秘钥了
AES对称加密算法
AES 的全称是 Advanced Encryption Standard ,是最流行的对称加密算法,其加解密速度快。AES支持128位,192位,256位三种长度的密钥,密钥越长安全性越高。AES加密时会把明文切分成许多小块的明文,然后对每块明文单独加密,将加密后的密文传送出去,接收方再将密文切块解密,得到明文。
如通过上一层的密钥3进行加密,接下来就可以通过对称加密进行通信了。
在小明、小红和小偷的房间中,小明想把密码“462315”告诉小红,于是:
第一步:将密码按照一位的长度进行切分(实际中通常按128位进行切分);就变成了“4”“6”“2”“3”“1”“5”; 第二步:对每块明文通过密钥3进行加密,结果就是“795648”,然后小明告诉小红和小偷:“我的密码是795648”; 第三步:小红拿到密文后,对密文进行切块,对每块通过密钥3进行解密,就得到了正确的密码“462315”,而小偷由于不知道密钥,就无法解密出正确的信息。
三、非对称加密
在对称加密中,加密和解密使用的是同一份密钥。所以,在非对称加密中,加密和解密使用的是不同的密钥。非对称加密中的密钥分为公钥和私钥。公钥顾名思义就是公开的,任何人都可以通过公钥进行信息加密,但是只有用户私钥的人才能完成信息解密。非对称加密带来了一个好处,避免了对称式加密需要传输和保存同一份密钥的痛苦。 公钥加密的信息,只有私钥才能解密。反之,私钥加密的信息,只有公钥才能解密。 现在最流行的非对称加密算法就是RSA加密算法
四、摘要
所谓的摘要就是一段信息或者一个文件通过某个哈希算法(也叫摘要算法)而得到的一串字符。摘要算法的特点就是不同的文件计算出的摘要是不同的(也有可能相同,但是可能性非常非常低),比如一个1G的视频文件,哪怕只是改动其中一个字节,最后计算得到的摘要也是完全不同的,所以摘要算法通常是用来判断文件是否被篡改过。其还有一个特点就是通过摘要是无法推导出源文件的信息的。常用的摘要算法有MD5、SHA等。
五、数字签名
数字签名就是一个文件的摘要加密后的信息。数字签名是和源文件一起发送给接收方的,接收方收到后对文件用摘要算法算出一个摘要,然后和数字签名中的摘要进行比对,两者不一致的话说明文件被篡改了。
数字签名的作用
设想一下,王五截获了李四的报价文件,王五虽然无法知道李四的实际报价,但是他完全可以伪造一份李四的报价(文件名:lisi.txt,文件内容:报价60万),然后将这份伪造文件用张三公布的公钥zhangsan2进行加密后替换原来的报价文件。张三收到后解密发现报价是60万,于是张三就以为李四报的价是60万,最后决定将装修的活给报价55万的王五来做。 发生这个问题的关键就在于张三无法知道报价文件是否被篡改过。要解决这个问题就需要用到数字签名。 首先李四需要自己生成一对非对称加密的秘钥,私钥lisi1自己保存,公钥lisi2发给张三。然后李四对自己的报价文件通过摘要算法得到一个摘要(假设摘要是aaa),再用自己的私钥lisi1加密这个摘要就得到了报价文件的数字签名,最后将加密的报价文件和数字签名一起发给张三,张三收到后先用李四发过来的公钥lisi2解密数字签名得到摘要aaa,然后用自己的私钥zhangsan1解密加密的文件得到报价源文件,然后对报价源文件进行摘要算法,看计算得到的结果是不是aaa,如果不是aaa的话就说明报价文件被篡改了。 在这种情况下,如果王五截获了李四发给张三的文件。王五是无法解密报价文件的。如果王五伪造一份报价文件的话,等张三收到后就会发现报价文件和数字签名不匹配。那王五能不能伪造报价文件的同时也伪造签名呢?因为王五没有李四的私钥,所以没法对伪造的报价文件的摘要进行加密,所以也就没法伪造签名。 结论: 非对称加密虽然能确保加密文件内容不被窃取,但不能保证文件不被篡改。数字签名就是用来验证文件是否被篡改过。
六.数字签名
既然非对称加密可以保证文件内容的安全性,数字签名又可以保证文件不被篡改,那还要数字证书有什么用呢? 我们再来设想一下,王五自己也生成了一对用于非对称加密的秘钥,私钥是wangwu1,公钥是wangwu2。前面李四将自己的公钥lisi2发给张三的过程中被王五给截获了,王五用自己的公钥wangwu2替换了李四的公钥lisi2,所以张三最后收到的公钥实际上是王五的,但张三对这并不知情。后面李四发的数字签名和加密的报价文件都被王五截获,并且王五伪造了一份报价文件,同时用自己的私钥加密报价文件的摘要生成伪造的签名并发给张三,张三收到后进行验证发现数字签名和报价文件是匹配的,就以为这份报价文件是真实的。 出现这个问题的关键就在于张三没法确认收到的公钥到底是不是李四发的,这个时候数字证书就起到作用了。李四到权威的数字证书机构申请数字证书,证书里面包含了公钥(lisi2)和公钥的拥有者(李四)等相关信息,然后李四将证书发给张三,张三通过证书里面的信息就可以知道公钥到底是不是李四的了。 那证书在发送过程中有没有可能被王五截获并篡改呢?要知道证书里面还包含CA的数字签名,这个签名是证书机构用他们自己的私钥对证书的摘要进行加密的,而公钥是公开的。所以即便王五截获并篡改了证书内容,他也无法伪造证书机构的签名,张三在收到证书后通过验证签名也会发现证书被篡改了。
参考博客 对称加密、非对称加密、摘要、数字签名、数字证书 加密原理详解
|