众所周知,咱们军工行业越来越牛,对应的各个研究所之间的通信保密程度越来越高对吧!!
现在有研究所A(以下简称A)和研究所B(以下简称B)之间进行通信交流,有如下几个问题:
将通信的内容进行加密。
不行
,A将通信内容加密后,B收到的是密文,无法获取原本的内容可以
,A通过密钥s将通信内容加密后,只要B拥有密钥s
,就可以解密获取原本的内容可以
,A通过自己的私钥将通信内容加密后,B通过A的公钥进行解密,同样可以获取原本的内容由于通信往往会交流频繁,数据交互多,所以加密解密要看重速度。
所以,使用对称加密。
大家也知道,随着咱们的技术越来越牛,国外的间谍对咱们的渗透也越来越强烈。如果,上诉对称加密的密钥s
泄露并且被间谍f
截取到,那么AB之间的通信内容是不是就被破解泄密了?
那么如何保证密钥s不泄露呢?难道对密钥s也通过密钥s1进行对称加密
?那s1泄露了怎么办?再加密再泄露。。。这种方法当然不行!
所以要想保证密钥s不泄露,需要对密钥s
进行非对称加密
。由于密钥s
文本短,所以可以忽略上述的非对称加密性能不好的缺点;并且只需要加密一次,保证安全的传输和获取密钥s
后,后续的通信不需要再对密钥s
加密解密了。
对称加密
的方式进行加密密钥s
泄露被间谍f截取,怎么办?非对称加密
,生成一对公钥、私钥
,并且把公钥
给B公钥
对密钥s
加密,传给A,由于需要A的私钥
才能正确解密,所以并不怕间谍窃取到公钥
加密的,所以A用自己配对的私钥
对其密文进行解密,获取到了密钥s
密钥s
进行对称加密
的通信了上述总结中的情况,看起来是一个 安全的通信模式,可是如果研究所B获取到的公钥
不是A真正的公钥
,而是间谍f
的公钥
呢?B还以为此时的公钥是A传递给自己的公钥!
这是怎么回事呢?
公钥
过程中,被间谍f
掉包成自己的公钥
后,发给了B公钥
是A的,其实此时已经被掉包成间谍f
的公钥
了,就用间谍的公钥对密钥s
进行加密,得到密文s0
s0
发给A的过程中,又被间谍拦截,间谍就用自己的私钥
解密,得到了他们的密钥s
密钥s
后,自己备份一份,再把此密钥s
用A的公钥
加密,得到密文s1
,发给As1
后,用自己的私钥
解密,得到密钥s
对称加密
、密钥s
进行通信了间谍
获取了。中间人攻击
。怎么安全的传输A的公钥呢?
到此,通过我们解决过的问题,已经知道了:
对称加密
的方式进行通信密钥s
传输给对方?非对称加密
方式,A把自己的公钥
给B,B用A的公钥
对密钥s
加密后传给A,A用自己的私钥
解密,这个过程只有A能解密,所以是安全的现在,新的问题是公钥如何安全的传输给对方呢
?难道再用对称加密或非对称加密?都不行!
试想一下 ,生活中,我们最相信谁呢?谁最能提供最可信的消息或服务呢?当然是政府啊!
如今,我从A那里下载获取的公钥
已经不靠谱、不安全 了,那我们应该相信谁呢?到底应该从谁那里获取的公钥
才是真正的公钥
呢?
所以,我们也搞一个机构,做一个大家都相信的机构,无条件百分百相信这个机构,这是规定。
好,我们把这个机构取名叫做CA机构
。
然后,我们把最后那个问题抛给这个CA机构
,不管是研究所B也好,还是研究所C、研究所D等等,只要是想获取A的公钥
,都从CA机构
那里获取。
那么,CA机构哪里来的A的公钥
呢?当然是A给的啊,对于A来说,反正我已经把我的公钥
给你CA了,你CA机构
就要保证安全将我的公钥
传输给别人。
ok,那CA机构
是怎么安全的传输公钥的呢?
答案是数字证书
!数字证书就是用来解决公钥传输问题的!
在解释数字证书的使用过程之前,我们先看看如下一个问题
结合前面说的加密知识,我们知道可以用单向加密算法
,以md5
加密算法举例
md5
算法对信件内容进行一次加密运算,得到一个唯一的字符串,我们把这个字符串起个名字,叫做摘要
md5
,以及md5对信件内容运算出来的摘要
,一块发给Bmd5
算法,于是就用md5
对信件内容进行加密运算,得到B自己算出来的新的摘要
新的摘要
和信件底部A写的摘要
进行对比,如果相等,说明该信件的内容没有被人篡改过ok,如上这个过程也会出问题的,如果间谍又出现了呢?如下:
新的加密字符串
新的加密串
,放在信件底部 ,发给了B所以,单纯的使用单向加密算法,生成摘要,是不能保证内容不被篡改的!
答案是签名
!ok,我们用签名修改一下上面的例子,如下:
摘要
签名
md5
、摘要
、签名
一块发给B公钥
对签名
进行解密,得到信件摘要1
,假如为d1md5
对信件内容进行运算,得到信件摘要2
,假如为d2相等
说明信件内容没有被篡改过不相等
,说明信件内容已经被篡改过了此时,这个信件传输过程就是安全的了!
ok,我们看看如果间谍截取到信件
了呢?间谍可以修改信件内容,再次用md5
算出一个新的摘要
出来,但是信件上的签名
,间谍是修改不了的!因为,签名
是用A的私钥
加密出来的,间谍是没有A的私钥的,所以即使间谍破解了签名,但是由于没有A的私钥,间谍无法生成新的A的签名
!
而且 ,B在收到信件后 ,是会用A的公钥
进行对签名
解密的,如果间谍用自己的私钥
对摘要
进行加密生成新的签名
,那B是用A的公钥
解密不了的,这个时候B就知道信件内容被截获并且被篡改过了的!
通过单向加密算法(如:md5),对内容进行加密出来的字符串,叫做摘要
A用自己的私钥对摘要进行加密运算,得到的加密字符串,叫做签名
B用A的公钥,对签名进行解密操作,解密出来的摘要和原来的摘要进行对比,这个过程叫做验签
数字证书是有CA机构颁发的,首先如果研究所A想要有一个数字证书,就需要像CA机构申请。CA机构会给A颁发一张数字证书,里面包含了如下:
知道了证书里面包含的内容,我们了解一下证书是如何产生的?
从上面我们知道,数字证书就是解决公钥传输问题的,同时我们也知道,数字证书就是一个文件。
那么,数字证书到底是怎么解决传输问题的呢?
现在,A有了自己的证书了,我们就不会公开传输公钥了,只需要传输证书就行了。
那么,A和B现在需要安全的通信,流程是怎么样的呢?如下:
从上面可以知道:
B收到了A的数字证书,首先对数字证书进行验证,验证此数字证书是不是CA机构颁发的
因为我们的操作系统系统内置了所有CA机构的数字证书,所有我们可以对数字证书进行验证
先回顾一下摘要和签名:
摘要: 通过单向加密算法(如:md5),对内容进行加密出来的字符串,叫做摘要
签名:私钥对上一步摘要加密,产生签名
数字证书的验证流程如下:
好了,如果证书通过验证了,就说明此证书的确是CA颁发的,B就可以从数字证书中拿到A的公钥了。
至此,解决了问题六:A怎么安全的把自己的公钥传输给B呢?
我们来看看A再次给B进行通信,就和前面不一样了,如下:
公钥s
对信件内容的验证流程如下:
公钥s
,对信件的签名
进行解密 ,得到摘要D1公钥s
对信件内容
进行解密(因为B收到的信件内容是通过A的私钥进行加密过的,所以需要用A的公钥进行解密),得到原始的信件内容m以上内容包括了:加密解密、数字证书、摘要、签名、验签的过程。