遞信的問題

張三打算給李四寫一封信,裏面會提到一個天大的祕密。張三不想讓第三我的知道那件事,可是這封信卻必定要通過其餘人才能送到李四手中。這時候張三和李四將面臨三個問題:算法

  • 如何保密信的內容?安全

  • 如何保證李四收到的信中的內容沒有被其餘人修改過?加密

  • 李四如何肯定信的內容是張三本人寫的?數學

一些說明:想要傳遞給他人的有效內容這裏稱爲信息;傳遞時的基本單元這裏稱爲消息,消息中包含信息和一些用於傳遞的附加內容。效率

信息加密

首先,咱們來討論保密信息的問題。登錄

可以直接從中獲得信息的消息稱爲明文;須要通過計算才能從中獲得信息的消息稱爲密文。從明文到密文的計算過程稱爲加密;反之,則稱爲解密。把明文計算成密文的方法稱爲加密算法。隨機數

諜戰片中常常出現的密碼本就是一種經典的加密算法。在這類加密方案中,加密算法自己也是保密的。這類加密算法能夠經過試探分析的方式破解。而現代加密方案則基於數學難題的難解性,加密算法自己已經不須要保密,配合保密的密鑰實現加密。這樣提升了加密算法的複用率。打包

若是加密和解密使用同一個密鑰,則稱爲對稱加密;若是加密和解密分別使用不一樣的密鑰,則稱爲非對稱加密。非對稱加密的好處是能夠減小單方面密鑰泄露形成的信息泄露風險,特別試用於一方接收多方發送的消息收發模型中。非對稱加密算法的計算效率通常比對稱加密算法的計算效率低。請求

討論完加密算法自己的問題,接下來討論密鑰分發的問題。有兩種可行的方案:一是在傳遞消息以前已經經過可靠的途徑得到了密鑰;二是在消息傳遞前期磋商出一個臨時的密鑰。密碼

密鑰磋商算法基於這樣的思路:張三和李四各生成密鑰的一個計算因子,而後交換各自計算因子通過密鑰磋商算法計算得出的結果做爲下一步生成密鑰的計算成分,以後再分別用各自的計算因子和收到的計算成分通過算法生成出最終的密鑰。由於雙方沒有直接交換計算因子,因此中間人沒法獲得完整的密鑰。須要注意的是,若是在密鑰磋商前沒有進行身份驗證,那麼中間人能夠假裝本身分別跟雙方磋商密鑰。也就是說,密鑰磋商只有在雙方身份獲得驗證的前提下才有意義。密鑰磋商通常用於採用對稱加密算法的一次性密鑰加密通訊,一般密鑰磋商過程當中會生成三個隨機數,兩個計算因子,另外一個用於交換計算成分。

關於加密還有一點須要說明,沒有哪種加密方案是永遠徹底可靠的,同時信息具備時效性。這樣,只要可以保證在信息的時效內可靠的方案,就是合適的加密方案。

消息摘要

值得說明的是,加密算法通常不會關注消息的內容,也不該該關注消息的內容,由於加密是把明文變成密文的過程。也就是說,每一段明文在相應的密文中都應該有一段對應,反過來也是。這樣,在只拿到密文的時候,即便沒有密鑰也能夠經過丟棄部分密文段或者插入隨意生成的密文段達到修改消息內容的目的,這樣就形成了解密後的消息內容混亂。

摘要算法幫助解決了這個問題。摘要算法能夠保證內容和摘要值一一對應。這樣,只要能拿到有效的摘要值便可驗證消息的完整性,至關於紙質文件的騎縫章。

接下來又有了新的問題,如何傳遞摘要值?一種有效的方法是加密。張三將信息的摘要值的加密後的密文包含在消息中,一同發送給李四。李四在收到消息後,比較對摘要值密文解密獲得的摘要值和對消息內容計算摘要獲得的摘要值,若是相同則消息內容完整,不然說明消息內容不完整。

上面的操做在結合了下一節將討論的身份驗證以後被稱爲簽名和驗籤。簽名對內容完整性的保證基於下面的思路:摘要值和內容一一對應,故修改內容也要同時修改摘要值。而在沒有密鑰的前提下是沒法生成有效的密文的。除非使用的算法有漏洞,不然能夠認爲消息的內容獲得了完整性的保證。

身份驗證

在討論了消息內容保密和完整性以後,咱們該來討論一下確認身份的問題了。

李四如何判斷對面的張三真的就是張三呢?一般李四憑藉以前掌握的張三這我的的特徵來驗證張三的身份,好比相貌、行爲習慣等。參考這樣的模式,咱們也能夠給張三製造一些不易被複制的特徵。若是能在消息中體現這些特徵,那麼就能夠用於驗證身份,至關於簽字畫押。

在前面的討論中發現加密算法具備不可經過明文和密文計算密鑰的性質,那麼這時密鑰便可做爲一種身份特徵。

若是張三在發送的消息中既包含了內容的明文也包含了內容的密文,那麼李四就能夠用事先保存的張三的身份密鑰解密密文或者加密明文來驗證張三的身份。這種方式的一個問題是,若是明文內容比較固定,那麼中間人就能夠保存明文和密文的對應,用於僞造身份。因此更好的方式是李四發送隨機明文,張三回覆用本身身份密鑰加密後的密文。

須要強調的是,身份密鑰必須事先經過安全途徑得到。若是在傳遞消息的過程當中分發身份密鑰,則可能被中間人替換。這種中間人替換或僞造身份還有前面提到的修改消息內容的行爲被稱爲中間人攻擊。

若是張三李四使用對稱加密用於鑑定身份,那麼這個身份密鑰就只能保存在他們兩我的手中,雙方均可以用此密鑰做爲對方身份的憑證。可是若是將此密鑰分發給了第三我的,那麼這時的身份將變得不明確。基於此,身份驗證一般採用非對稱方案。這樣,張三隻要保管好本身的身份私鑰,而後將公鑰分發給其餘人,其餘人就可使用這個密鑰來驗證張三的身份了。與加密相反,在一方發送多方接收的模型中,更應該採用非對稱身份驗證。在多客戶端單服務端的模型中,對客戶端的認證能夠採用對稱認證方案,相似使用帳戶和密碼登陸的狀況;而對服務端的認證則採用非對稱方案更合理。

到這裏,還有一個問題沒有解決,如何在沒法肯定安全的渠道下使傳遞的身份公鑰有效?一個可行的方案是藉助第三方。也就是找一個可靠的人鑑定另外一我的是否是可靠。張三將身份公鑰和鑑定人信息以及鑑定人對張三身份信息的簽名打包在一塊兒傳遞給李四,李四就能夠經過驗證鑑定人的簽名進而驗證張三的身份了。這種包含身份信息和認證機構信息以及認證簽名信息的消息被稱爲證書,證書中還可能包含一些其餘信息,好比用於通訊的加密公鑰等,但不會也不該該包含保密信息。證書的有效性能夠經過查詢認證機構驗證。一樣,認證機構也須要證書,他們的證書由上級認證機構頒發。這樣,只要可以保證頂級證書有效,就能夠經過信任的向下傳遞驗證全部的證書了。

總結

假想一個場景:張三向李四發送一個包含隨機數的消息,請求驗證李四的身份。李四用本身的身份私鑰對收到的隨機數加密,並將加密後的密文和本身的證書發回給張三。張三首先驗證李四證書的有效性,再用證書中的身份公鑰解密李四發來的密文,並比對內容。接下來只要雙方各生成一個計算因子,並交換各自計算因子對於以前那個隨機數的計算結果,便可磋商出一個臨時的密鑰。這個密鑰既用來對信息加密,也用來驗證身份。在接下來的通訊中,發送消息前先對信息加密,再計算加密後信息的摘要值並對摘要值加密,能夠看做是簽名,最後將信息密文和摘要值密文做爲消息發送;收到消息後,先驗證摘要再解密出信息。對信息密文簽名而不是對明文簽名的好處是,若是消息被破壞,則能夠減小一次解密操做。

相關文章
相關標籤/搜索