整理自通俗大白话,彻底弄懂 https 原理本质
场景
众所周知,咱们军工行业越来越牛,对应的各个研究所之间的通信保密程度越来越高对吧!!
现在有研究所A(以下简称A)和研究所B(以下简称B)之间进行通信交流,有如下几个问题:
问题一:怎么保证通信安全呢?
将通信的内容进行加密。
问题二:使用哪种加密方式呢?
- 单向加密:
不行
,A将通信内容加密后,B收到的是密文,无法获取原本的内容 - 对称加密:
可以
,A通过密钥s将通信内容加密后,只要B拥有密钥s
,就可以解密获取原本的内容 - 非对称加密:
可以
,A通过自己的私钥将通信内容加密后,B通过A的公钥进行解密,同样可以获取原本的内容
问题三:对称加密和非对称加密,如何选择呢?
由于通信往往会交流频繁,数据交互多,所以加密解密要看重速度。
- 对称加密:速度快
- 非对称加密:速度慢
所以,使用对称加密。
问题四:如何保证密钥s不泄露呢?
大家也知道,随着咱们的技术越来越牛,国外的间谍对咱们的渗透也越来越强烈。如果,上诉对称加密的密钥s
泄露并且被间谍f
截取到,那么AB之间的通信内容是不是就被破解泄密了?
那么如何保证密钥s不泄露呢?难道对密钥s也通过密钥s1进行对称加密
?那s1泄露了怎么办?再加密再泄露。。。这种方法当然不行!
所以要想保证密钥s不泄露,需要对密钥s
进行非对称加密
。由于密钥s
文本短,所以可以忽略上述的非对称加密性能不好的缺点;并且只需要加密一次,保证安全的传输和获取密钥s
后,后续的通信不需要再对密钥s
加密解密了。
暂时总结一下(1)
- 研究所 AB为了通信安全,决定采用加密的方式,对通信内容进行加密传输
- 比对性能,选用
对称加密
的方式进行加密 - 为了防止对称加密的
密钥s
泄露被间谍f截取,怎么办? - 研究所A使用
非对称加密
,生成一对公钥、私钥
,并且把公钥
给B - B用
公钥
对密钥s
加密,传给A,由于需要A的私钥
才能正确解密,所以并不怕间谍窃取到 - 因为用的是A的
公钥
加密的,所以A用自己配对的私钥
对其密文进行解密,获取到了密钥s
- 此时,A和B就能用经过安全传输的
密钥s
进行对称加密
的通信了
问题五:遇到中间人攻击怎么办?
上述总结中的情况,看起来是一个 安全的通信模式,可是如果研究所B获取到的公钥
不是A真正的公钥
,而是间谍f
的公钥
呢?B还以为此时的公钥是A传递给自己的公钥!
这是怎么回事呢?
- B在获取A的
公钥
过程中,被间谍f
掉包成自己的公钥
后,发给了B - B还以为获取到的
公钥
是A的,其实此时已经被掉包成间谍f
的公钥
了,就用间谍的公钥对密钥s
进行加密,得到密文s0
- 密文
s0
发给A的过程中,又被间谍拦截,间谍就用自己的私钥
解密,得到了他们的密钥s
- 间谍得到
密钥s
后,自己备份一份,再把此密钥s
用A的公钥
加密,得到密文s1
,发给A - A得到密文
s1
后,用自己的私钥
解密,得到密钥s
- 此后,A和B就用
对称加密
、密钥s
进行通信了 - 他们还以为是安全的,其实通信内容早就被
间谍
获取了。 - 并不安全!
这就是中间人攻击
。
针对这种情况,为了安全通信,问题转变成了怎么安全的传输A的公钥呢?
问题六:A怎么安全的把自己的公钥传输给B呢?
到此,通过我们解决过的问题,已经知道了:
- 如何安全的把通信内容传输给对方?
解决方法:使用对称加密
的方式进行通信 - 如何安全的把
密钥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
加密算法举例
- A给B写完信后,用
md5
算法对信件内容进行一次加密运算,得到一个唯一的字符串,我们把这个字符串起个名字,叫做摘要
- A在信件的底部某块空处,写上自己用的单向加密算法
md5
,以及md5对信件内容运算出来的摘要
,一块发给B - B收到信件后,看到信件底部是
md5
算法,于是就用md5
对信件内容进行加密运算,得到B自己算出来的新的摘要
- B将自己算出来的
新的摘要
和信件底部A写的摘要
进行对比,如果相等,说明该信件的内容没有被人篡改过 - 如果不相等,就说明该信件内容被别人篡改了
ok,如上这个过程也会出问题的,如果间谍又出现了呢?如下:
- 首先间谍截取信件了,把信件改了
- 间谍用md5算法,重新把内容加密运算一次,得到
新的加密字符串
- 间谍把
新的加密串
,放在信件底部 ,发给了B - 此时B收到信件后,是没有办法判断出来该信件是不是被篡改过的
所以,单纯的使用单向加密算法,生成摘要,是不能保证内容不被篡改的!
问题八:如何保证信件的内容不被篡改呢?
答案是签名
!ok,我们用签名修改一下上面的例子,如下:
- A用md5对信件内容进行运算,得到一个加密字符串 ,我们起名叫
摘要
- A用自己的私钥对摘要进行加密运算,得到另一个字符串,我们起名叫
签名
- A将加密算法
md5
、摘要
、签名
一块发给B - B用A的
公钥
对签名
进行解密,得到信件摘要1
,假如为d1 - B用
md5
对信件内容进行运算,得到信件摘要2
,假如为d2 - B对比d1和d2是否相等 ,
相等
说明信件内容没有被篡改过 - 如果d1和d2
不相等
,说明信件内容已经被篡改过了
此时,这个信件传输过程就是安全的了!
ok,我们看看如果间谍截取到信件
了呢?间谍可以修改信件内容,再次用md5
算出一个新的摘要
出来,但是信件上的签名
,间谍是修改不了的!因为,签名
是用A的私钥
加密出来的,间谍是没有A的私钥的,所以即使间谍破解了签名,但是由于没有A的私钥,间谍无法生成新的A的签名
!
而且 ,B在收到信件后 ,是会用A的公钥
进行对签名
解密的,如果间谍用自己的私钥
对摘要
进行加密生成新的签名
,那B是用A的公钥
解密不了的,这个时候B就知道信件内容被截获并且被篡改过了的!
暂时总结一下(2)
摘要
通过单向加密算法(如:md5),对内容进行加密出来的字符串,叫做摘要
签名
A用自己的私钥对摘要进行加密运算,得到的加密字符串,叫做签名
验签
B用A的公钥,对签名进行解密操作,解密出来的摘要和原来的摘要进行对比,这个过程叫做验签
问题九:数字证书是怎么生成的?
数字证书是有CA机构颁发的,首先如果研究所A想要有一个数字证书,就需要像CA机构申请。CA机构会给A颁发一张数字证书,里面包含了如下:
- 公钥:A的公钥
- 颁发者:CA(证书认证机构)
- 有效期:证书的使用期限
- 摘要算法:指定的摘要算法,用来计算证书的摘要
- 指纹:也就是证书的摘要,保证证书的完整性
- 签名算法:用于生成签名,确保证书是由CA签发
- 序列号:证书的唯一标识
知道了证书里面包含的内容,我们了解一下证书是如何产生的?
- 将A的公钥、颁发者、有效期、摘要算法、哈希算法写入证书
- CA根据证书中的指定的哈希算法,计算出整个证书的摘要,即digest
- CA根据签名算法以及上一步计算出来的摘要,CA用自己的私钥对摘要进行加密,生成CA的签名, 即signature
- 最后把摘要,签名以及证书的基本信息,一起发布,就得到了A的证书
问题十:数字证书的作用
从上面我们知道,数字证书就是解决公钥传输问题的,同时我们也知道,数字证书就是一个文件。
那么,数字证书到底是怎么解决传输问题的呢?
现在,A有了自己的证书了,我们就不会公开传输公钥了,只需要传输证书就行了。
那么,A和B现在需要安全的通信,流程是怎么样的呢?如下:
- A把自己的数字证书发送给B
- 担心证书被间谍掉包,B需要对证书进行验证,验证什么呢?
- 其实就是验证此数字证书到底是不是CA机构颁发的,不是CA机构颁发的证书,我们就认为传输是不安全 的
- 验证数字证书是不是CA颁发的,需要有CA自己的数字证书(因为里面有CA自己的公钥)
- 那我们去哪里找CA的数字证书呢?其实CA机构的数字证书存在于咱们电脑的操作系统里,不管是windows还是linux、mac,或者你刚买的电脑,里面都已经内置了非常多的CA机构的证书
- 所以,电脑操作系统内的CA机构数字证书是可信的(除非安装的是盗版系统!!!)
- 那么,我们就可以对数字证书进行辨别真伪了
问题十一:怎么对数字证书进行验证?
从上面可以知道:
B收到了A的数字证书,首先对数字证书进行验证,验证此数字证书是不是CA机构颁发的
因为我们的操作系统系统内置了所有CA机构的数字证书,所有我们可以对数字证书进行验证
先回顾一下摘要和签名:
摘要: 通过单向加密算法(如:md5),对内容进行加密出来的字符串,叫做摘要
签名:私钥对上一步摘要加密,产生签名
数字证书的验证流程如下:
- B用内置的CA的数字证书,得到CA的公钥
- A发过来的数字证书,我们假如叫做C, B用CA的公钥对C证书里的签名进行解密(查看问题九,C证书里的签名是用CA机构的私钥进行加密的,所以用CA的公钥进行解密),得到摘要D
- B根据C证书里的摘要算法,假如写的是md5,则B用md5对证书证书整个内容进行计算,得到摘要D1
- B对比摘要D和摘要D1是否相等
- 如果D==D1,则说明此证书是CA机构颁发的,正版!
- 如果D!=D1,则说明此证书不是CA机构颁发的,不安全,有风险!
好了,如果证书通过验证了,就说明此证书的确是CA颁发的,B就可以从数字证书中拿到A的公钥了。至此,解决了问题六:A怎么安全的把自己的公钥传输给B呢?
问题十二:完整的安全通信过程
我们来看看A再次给B进行通信,就和前面不一样了,如下:
- A把写完的信通过自己的私钥加密,并且在信的底部,附加上摘要算法,假如是md5,以及通过md5算出来的摘要
- A用自己的私钥,对上一步的摘要进行加密,得到签名
- A把摘要算法、摘要、签名都附加到信件底部后,再把自己的数字证书一起发给B
- B收到信后,首先用自己的CA数字证书,拿到CA公钥,再用CA公钥对数字证书进行验证(也就是上面我们讲的流程)
- 数字证书验证通过后,说明证书确实是CA颁发的,没有被篡改
- B就从证书中拿到了A的
公钥s
- 有了A的公钥,接下来,就是对信件内容进行验证了
对信件内容的验证流程如下:文章来源:https://www.toymoban.com/news/detail-408046.html
- B用从A的数字证书中获取到的
公钥s
,对信件的签名
进行解密 ,得到摘要D1 - B用
公钥s
对信件内容
进行解密(因为B收到的信件内容是通过A的私钥进行加密过的,所以需要用A的公钥进行解密),得到原始的信件内容m - B用摘要算法,对信件的原始内容m进行运算,得到摘要D2
- B对比摘要D1是否等于摘要D2
- 如果不相等,说明信件内容被人篡改过,不安全!
- 如果相等,说明信件内容没有被篡改过,安全!
- 相等的情况中,B就拿到了经过安全传输的A的通信内容了!
总结
以上内容包括了:加密解密、数字证书、摘要、签名、验签的过程。文章来源地址https://www.toymoban.com/news/detail-408046.html
到了这里,关于怎样加密才能保证通信安全?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!