整理自通俗大白話,徹底弄懂 https 原理本質(zhì)
場景
眾所周知,咱們軍工行業(yè)越來越牛,對應(yīng)的各個(gè)研究所之間的通信保密程度越來越高對吧?。?br> 現(xiàn)在有研究所A(以下簡稱A)和研究所B(以下簡稱B)之間進(jìn)行通信交流,有如下幾個(gè)問題:
問題一:怎么保證通信安全呢?
將通信的內(nèi)容進(jìn)行加密。
問題二:使用哪種加密方式呢?
- 單向加密:
不行
,A將通信內(nèi)容加密后,B收到的是密文,無法獲取原本的內(nèi)容 - 對稱加密:
可以
,A通過密鑰s將通信內(nèi)容加密后,只要B擁有密鑰s
,就可以解密獲取原本的內(nèi)容 - 非對稱加密:
可以
,A通過自己的私鑰將通信內(nèi)容加密后,B通過A的公鑰進(jìn)行解密,同樣可以獲取原本的內(nèi)容
問題三:對稱加密和非對稱加密,如何選擇呢?
由于通信往往會(huì)交流頻繁,數(shù)據(jù)交互多,所以加密解密要看重速度。
- 對稱加密:速度快
- 非對稱加密:速度慢
所以,使用對稱加密。
問題四:如何保證密鑰s不泄露呢?
大家也知道,隨著咱們的技術(shù)越來越牛,國外的間諜對咱們的滲透也越來越強(qiáng)烈。如果,上訴對稱加密的密鑰s
泄露并且被間諜f
截取到,那么AB之間的通信內(nèi)容是不是就被破解泄密了?
那么如何保證密鑰s不泄露呢?難道對密鑰s也通過密鑰s1進(jìn)行對稱加密
?那s1泄露了怎么辦?再加密再泄露。。。這種方法當(dāng)然不行!
所以要想保證密鑰s不泄露,需要對密鑰s
進(jìn)行非對稱加密
。由于密鑰s
文本短,所以可以忽略上述的非對稱加密性能不好的缺點(diǎn);并且只需要加密一次,保證安全的傳輸和獲取密鑰s
后,后續(xù)的通信不需要再對密鑰s
加密解密了。
暫時(shí)總結(jié)一下(1)
- 研究所 AB為了通信安全,決定采用加密的方式,對通信內(nèi)容進(jìn)行加密傳輸
- 比對性能,選用
對稱加密
的方式進(jìn)行加密 - 為了防止對稱加密的
密鑰s
泄露被間諜f截取,怎么辦? - 研究所A使用
非對稱加密
,生成一對公鑰、私鑰
,并且把公鑰
給B - B用
公鑰
對密鑰s
加密,傳給A,由于需要A的私鑰
才能正確解密,所以并不怕間諜竊取到 - 因?yàn)橛玫氖茿的
公鑰
加密的,所以A用自己配對的私鑰
對其密文進(jìn)行解密,獲取到了密鑰s
- 此時(shí),A和B就能用經(jīng)過安全傳輸?shù)?code>密鑰s進(jìn)行
對稱加密
的通信了
問題五:遇到中間人攻擊怎么辦?
上述總結(jié)中的情況,看起來是一個(gè) 安全的通信模式,可是如果研究所B獲取到的公鑰
不是A真正的公鑰
,而是間諜f
的公鑰
呢?B還以為此時(shí)的公鑰是A傳遞給自己的公鑰!
這是怎么回事呢?
- B在獲取A的
公鑰
過程中,被間諜f
掉包成自己的公鑰
后,發(fā)給了B - B還以為獲取到的
公鑰
是A的,其實(shí)此時(shí)已經(jīng)被掉包成間諜f
的公鑰
了,就用間諜的公鑰對密鑰s
進(jìn)行加密,得到密文s0
- 密文
s0
發(fā)給A的過程中,又被間諜攔截,間諜就用自己的私鑰
解密,得到了他們的密鑰s
- 間諜得到
密鑰s
后,自己備份一份,再把此密鑰s
用A的公鑰
加密,得到密文s1
,發(fā)給A - A得到密文
s1
后,用自己的私鑰
解密,得到密鑰s
- 此后,A和B就用
對稱加密
、密鑰s
進(jìn)行通信了 - 他們還以為是安全的,其實(shí)通信內(nèi)容早就被
間諜
獲取了。 - 并不安全!
這就是中間人攻擊
。
針對這種情況,為了安全通信,問題轉(zhuǎn)變成了怎么安全的傳輸A的公鑰呢?
問題六:A怎么安全的把自己的公鑰傳輸給B呢?
到此,通過我們解決過的問題,已經(jīng)知道了:
- 如何安全的把通信內(nèi)容傳輸給對方?
解決方法:使用對稱加密
的方式進(jìn)行通信 - 如何安全的把
密鑰s
傳輸給對方?
解決方法:使用非對稱加密
方式,A把自己的公鑰
給B,B用A的公鑰
對密鑰s
加密后傳給A,A用自己的私鑰
解密,這個(gè)過程只有A能解密,所以是安全的
現(xiàn)在,新的問題是公鑰如何安全的傳輸給對方呢
?難道再用對稱加密或非對稱加密?都不行!
試想一下 ,生活中,我們最相信誰呢?誰最能提供最可信的消息或服務(wù)呢?當(dāng)然是政府?。?br> 如今,我從A那里下載獲取的公鑰
已經(jīng)不靠譜、不安全 了,那我們應(yīng)該相信誰呢?到底應(yīng)該從誰那里獲取的公鑰
才是真正的公鑰
呢?
所以,我們也搞一個(gè)機(jī)構(gòu),做一個(gè)大家都相信的機(jī)構(gòu),無條件百分百相信這個(gè)機(jī)構(gòu),這是規(guī)定。
好,我們把這個(gè)機(jī)構(gòu)取名叫做CA機(jī)構(gòu)
。
然后,我們把最后那個(gè)問題拋給這個(gè)CA機(jī)構(gòu)
,不管是研究所B也好,還是研究所C、研究所D等等,只要是想獲取A的公鑰
,都從CA機(jī)構(gòu)
那里獲取。
那么,CA機(jī)構(gòu)哪里來的A的公鑰
呢?當(dāng)然是A給的啊,對于A來說,反正我已經(jīng)把我的公鑰
給你CA了,你CA機(jī)構(gòu)
就要保證安全將我的公鑰
傳輸給別人。
ok,那CA機(jī)構(gòu)
是怎么安全的傳輸公鑰的呢?
答案是數(shù)字證書
!數(shù)字證書就是用來解決公鑰傳輸問題的!
在解釋數(shù)字證書的使用過程之前,我們先看看如下一個(gè)問題
問題七:信件內(nèi)容的傳輸過程中,如何保證內(nèi)容不被篡改呢?
結(jié)合前面說的加密知識(shí),我們知道可以用單向加密算法
,以md5
加密算法舉例
- A給B寫完信后,用
md5
算法對信件內(nèi)容進(jìn)行一次加密運(yùn)算,得到一個(gè)唯一的字符串,我們把這個(gè)字符串起個(gè)名字,叫做摘要
- A在信件的底部某塊空處,寫上自己用的單向加密算法
md5
,以及md5對信件內(nèi)容運(yùn)算出來的摘要
,一塊發(fā)給B - B收到信件后,看到信件底部是
md5
算法,于是就用md5
對信件內(nèi)容進(jìn)行加密運(yùn)算,得到B自己算出來的新的摘要
- B將自己算出來的
新的摘要
和信件底部A寫的摘要
進(jìn)行對比,如果相等,說明該信件的內(nèi)容沒有被人篡改過 - 如果不相等,就說明該信件內(nèi)容被別人篡改了
ok,如上這個(gè)過程也會(huì)出問題的,如果間諜又出現(xiàn)了呢?如下:
- 首先間諜截取信件了,把信件改了
- 間諜用md5算法,重新把內(nèi)容加密運(yùn)算一次,得到
新的加密字符串
- 間諜把
新的加密串
,放在信件底部 ,發(fā)給了B - 此時(shí)B收到信件后,是沒有辦法判斷出來該信件是不是被篡改過的
所以,單純的使用單向加密算法,生成摘要,是不能保證內(nèi)容不被篡改的!
問題八:如何保證信件的內(nèi)容不被篡改呢?
答案是簽名
!ok,我們用簽名修改一下上面的例子,如下:
- A用md5對信件內(nèi)容進(jìn)行運(yùn)算,得到一個(gè)加密字符串 ,我們起名叫
摘要
- A用自己的私鑰對摘要進(jìn)行加密運(yùn)算,得到另一個(gè)字符串,我們起名叫
簽名
- A將加密算法
md5
、摘要
、簽名
一塊發(fā)給B - B用A的
公鑰
對簽名
進(jìn)行解密,得到信件摘要1
,假如為d1 - B用
md5
對信件內(nèi)容進(jìn)行運(yùn)算,得到信件摘要2
,假如為d2 - B對比d1和d2是否相等 ,
相等
說明信件內(nèi)容沒有被篡改過 - 如果d1和d2
不相等
,說明信件內(nèi)容已經(jīng)被篡改過了
此時(shí),這個(gè)信件傳輸過程就是安全的了!
ok,我們看看如果間諜截取到信件
了呢?間諜可以修改信件內(nèi)容,再次用md5
算出一個(gè)新的摘要
出來,但是信件上的簽名
,間諜是修改不了的!因?yàn)椋?code>簽名是用A的私鑰
加密出來的,間諜是沒有A的私鑰的,所以即使間諜破解了簽名,但是由于沒有A的私鑰,間諜無法生成新的A的簽名
!
而且 ,B在收到信件后 ,是會(huì)用A的公鑰
進(jìn)行對簽名
解密的,如果間諜用自己的私鑰
對摘要
進(jìn)行加密生成新的簽名
,那B是用A的公鑰
解密不了的,這個(gè)時(shí)候B就知道信件內(nèi)容被截獲并且被篡改過了的!
暫時(shí)總結(jié)一下(2)
摘要
通過單向加密算法(如:md5),對內(nèi)容進(jìn)行加密出來的字符串,叫做摘要
簽名
A用自己的私鑰對摘要進(jìn)行加密運(yùn)算,得到的加密字符串,叫做簽名
驗(yàn)簽
B用A的公鑰,對簽名進(jìn)行解密操作,解密出來的摘要和原來的摘要進(jìn)行對比,這個(gè)過程叫做驗(yàn)簽
問題九:數(shù)字證書是怎么生成的?
數(shù)字證書是有CA機(jī)構(gòu)頒發(fā)的,首先如果研究所A想要有一個(gè)數(shù)字證書,就需要像CA機(jī)構(gòu)申請。CA機(jī)構(gòu)會(huì)給A頒發(fā)一張數(shù)字證書,里面包含了如下:
- 公鑰:A的公鑰
- 頒發(fā)者:CA(證書認(rèn)證機(jī)構(gòu))
- 有效期:證書的使用期限
- 摘要算法:指定的摘要算法,用來計(jì)算證書的摘要
- 指紋:也就是證書的摘要,保證證書的完整性
- 簽名算法:用于生成簽名,確保證書是由CA簽發(fā)
- 序列號(hào):證書的唯一標(biāo)識(shí)
知道了證書里面包含的內(nèi)容,我們了解一下證書是如何產(chǎn)生的?
- 將A的公鑰、頒發(fā)者、有效期、摘要算法、哈希算法寫入證書
- CA根據(jù)證書中的指定的哈希算法,計(jì)算出整個(gè)證書的摘要,即digest
- CA根據(jù)簽名算法以及上一步計(jì)算出來的摘要,CA用自己的私鑰對摘要進(jìn)行加密,生成CA的簽名, 即signature
- 最后把摘要,簽名以及證書的基本信息,一起發(fā)布,就得到了A的證書
問題十:數(shù)字證書的作用
從上面我們知道,數(shù)字證書就是解決公鑰傳輸問題的,同時(shí)我們也知道,數(shù)字證書就是一個(gè)文件。
那么,數(shù)字證書到底是怎么解決傳輸問題的呢?
現(xiàn)在,A有了自己的證書了,我們就不會(huì)公開傳輸公鑰了,只需要傳輸證書就行了。
那么,A和B現(xiàn)在需要安全的通信,流程是怎么樣的呢?如下:
- A把自己的數(shù)字證書發(fā)送給B
- 擔(dān)心證書被間諜掉包,B需要對證書進(jìn)行驗(yàn)證,驗(yàn)證什么呢?
- 其實(shí)就是驗(yàn)證此數(shù)字證書到底是不是CA機(jī)構(gòu)頒發(fā)的,不是CA機(jī)構(gòu)頒發(fā)的證書,我們就認(rèn)為傳輸是不安全 的
- 驗(yàn)證數(shù)字證書是不是CA頒發(fā)的,需要有CA自己的數(shù)字證書(因?yàn)槔锩嬗蠧A自己的公鑰)
- 那我們?nèi)ツ睦镎褻A的數(shù)字證書呢?其實(shí)CA機(jī)構(gòu)的數(shù)字證書存在于咱們電腦的操作系統(tǒng)里,不管是windows還是linux、mac,或者你剛買的電腦,里面都已經(jīng)內(nèi)置了非常多的CA機(jī)構(gòu)的證書
- 所以,電腦操作系統(tǒng)內(nèi)的CA機(jī)構(gòu)數(shù)字證書是可信的(除非安裝的是盜版系統(tǒng)?。。。?/li>
- 那么,我們就可以對數(shù)字證書進(jìn)行辨別真?zhèn)瘟?/li>
問題十一:怎么對數(shù)字證書進(jìn)行驗(yàn)證?
從上面可以知道:
B收到了A的數(shù)字證書,首先對數(shù)字證書進(jìn)行驗(yàn)證,驗(yàn)證此數(shù)字證書是不是CA機(jī)構(gòu)頒發(fā)的
因?yàn)槲覀兊牟僮飨到y(tǒng)系統(tǒng)內(nèi)置了所有CA機(jī)構(gòu)的數(shù)字證書,所有我們可以對數(shù)字證書進(jìn)行驗(yàn)證
先回顧一下摘要和簽名:
摘要: 通過單向加密算法(如:md5),對內(nèi)容進(jìn)行加密出來的字符串,叫做摘要
簽名:私鑰對上一步摘要加密,產(chǎn)生簽名
數(shù)字證書的驗(yàn)證流程如下:
- B用內(nèi)置的CA的數(shù)字證書,得到CA的公鑰
- A發(fā)過來的數(shù)字證書,我們假如叫做C, B用CA的公鑰對C證書里的簽名進(jìn)行解密(查看問題九,C證書里的簽名是用CA機(jī)構(gòu)的私鑰進(jìn)行加密的,所以用CA的公鑰進(jìn)行解密),得到摘要D
- B根據(jù)C證書里的摘要算法,假如寫的是md5,則B用md5對證書證書整個(gè)內(nèi)容進(jìn)行計(jì)算,得到摘要D1
- B對比摘要D和摘要D1是否相等
- 如果D==D1,則說明此證書是CA機(jī)構(gòu)頒發(fā)的,正版!
- 如果D!=D1,則說明此證書不是CA機(jī)構(gòu)頒發(fā)的,不安全,有風(fēng)險(xiǎn)!
好了,如果證書通過驗(yàn)證了,就說明此證書的確是CA頒發(fā)的,B就可以從數(shù)字證書中拿到A的公鑰了。至此,解決了問題六:A怎么安全的把自己的公鑰傳輸給B呢?
問題十二:完整的安全通信過程
我們來看看A再次給B進(jìn)行通信,就和前面不一樣了,如下:
- A把寫完的信通過自己的私鑰加密,并且在信的底部,附加上摘要算法,假如是md5,以及通過md5算出來的摘要
- A用自己的私鑰,對上一步的摘要進(jìn)行加密,得到簽名
- A把摘要算法、摘要、簽名都附加到信件底部后,再把自己的數(shù)字證書一起發(fā)給B
- B收到信后,首先用自己的CA數(shù)字證書,拿到CA公鑰,再用CA公鑰對數(shù)字證書進(jìn)行驗(yàn)證(也就是上面我們講的流程)
- 數(shù)字證書驗(yàn)證通過后,說明證書確實(shí)是CA頒發(fā)的,沒有被篡改
- B就從證書中拿到了A的
公鑰s
- 有了A的公鑰,接下來,就是對信件內(nèi)容進(jìn)行驗(yàn)證了
對信件內(nèi)容的驗(yàn)證流程如下:文章來源:http://www.zghlxwxcb.cn/news/detail-408046.html
- B用從A的數(shù)字證書中獲取到的
公鑰s
,對信件的簽名
進(jìn)行解密 ,得到摘要D1 - B用
公鑰s
對信件內(nèi)容
進(jìn)行解密(因?yàn)锽收到的信件內(nèi)容是通過A的私鑰進(jìn)行加密過的,所以需要用A的公鑰進(jìn)行解密),得到原始的信件內(nèi)容m - B用摘要算法,對信件的原始內(nèi)容m進(jìn)行運(yùn)算,得到摘要D2
- B對比摘要D1是否等于摘要D2
- 如果不相等,說明信件內(nèi)容被人篡改過,不安全!
- 如果相等,說明信件內(nèi)容沒有被篡改過,安全!
- 相等的情況中,B就拿到了經(jīng)過安全傳輸?shù)腁的通信內(nèi)容了!
總結(jié)
以上內(nèi)容包括了:加密解密、數(shù)字證書、摘要、簽名、驗(yàn)簽的過程。文章來源地址http://www.zghlxwxcb.cn/news/detail-408046.html
到了這里,關(guān)于怎樣加密才能保證通信安全?的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!