網絡通訊中使用的算法

加密算法在計算機體系中運用得很普遍, 你可能很常常聽到單向加密算法,私鑰,公鑰之類的名稱,可是並不清楚之間的關係以及爲何會有這些加密算法,那麼這篇文章能夠幫助你找到答案.算法

加密算法的做用通常都是爲了解決通訊過程當中出現的三個問題 :瀏覽器

  • 身份驗證安全

  • 數據完整性校驗服務器

  • 數據機密性網站

咱們以後所講的全部加密算法, 都是圍繞着這三個問題展開的.加密

單向加密算法

這種加密算法有兩個特色 :操作系統

  • 加密過程不可逆.即明文經過加密生成密文,可是沒法經過密文推算出明文code

  • 不一樣的數據加密出來的結果確定不同,不存在不一樣的數據加密以後生成一樣的密文.ip

  • 定長輸出.即無論對多大的數據進行加密,加密以後的結果確定是定長的.get

根據上面的前兩個特性,咱們能夠利用單向加密算法能夠用來保證數據完整性.

咱們假設 :
A要發送一段數據給B,在發送的過程當中可能會被C截取,C截取並修改數據以後發送給B,這種攻擊稱爲中間人攻擊.爲了保證數據在通訊過程當中不被篡改,A使用單向加密算法對數據進行加密,而後生成的密文咱們稱爲特徵碼,把特徵碼附加在數據以後,一塊兒發送給B.這樣子C即便截取修改了數據再發送給B.B只要把數據從新加密生成特徵碼,跟附加在數據以後的特徵碼進行比較,就能夠知道數據被中間人修改過了.

典型的加密算法有MD5,SHA1等等.在網上下載東西的時候會聽過MD5校驗,就是利用了單向加密算法的特性.下載的軟件旁邊會附帶一串MD5值,下載完成後能夠對下載的軟件進行MD5計算,而後比較附帶的MD5值,來保證軟件沒有被篡改.

對稱加密算法

接着上面的假設,即便A對B發送的數據進行了加密,可是C能夠截取數據,修改以後從新計算特徵碼,而後把新的特徵碼附帶在修改以後的數據發送給B,這個時候B即便校驗了數據也沒辦法保證數據沒有被篡改,由於特徵碼是新生成的.這裏引出了一個新的問題:B如何保證這個數據就就是A發來的,即身份證驗證的問題.

對稱加密算法就是爲了解決這個問題,對稱加密算法要求AB之間共有一個相同的祕鑰.在加密的時候流程以下:

  • 明文和祕鑰一塊兒進行加密以後生成密文.

  • 密文和祕鑰一塊兒進行加密以後從新生成明文.

如今AB之間通訊變成了下面的流程

  • AB通訊以前交換祕鑰

  • A要發送數據給B以前,先對數據進行單向算法加密生成特徵碼,而後使用對稱加密算法對特徵碼和祕鑰進行對稱加密,把加密以後的密文附加在數據以後發送給B

  • B拿到數據以後,提取附加在數據以後的密文,使用對稱加密算法把密文和祕鑰再次加密,從新生成明文,這裏的明文就是特徵碼,而後對數據提取特徵碼,比較兩個特徵碼保證數據完整性.

上面的步驟解決了兩個問題,即數據完整性和身份驗證.這樣子C即便修改數據從新生成特徵碼,可是他沒有辦法使用AB之間的祕鑰來加密特徵碼.

回顧AB之間的通訊流程,AB在傳遞數據以前如何要換祕鑰?交換祕鑰也須要AB互相通訊,在交換祕鑰的時候有可能被C獲取.有一個算法Diffie-Hellman算法,這個算法能夠保證AB之間交換祕鑰不被第三方獲取.這個算法是基於離散對數原理.咱們不關心算法原理,這裏簡單說明下算法實現流程

  • AB之間互相協商生成一個隨機的大素數p和一個生成數g.

  • AB兩個各自分別生成一個隨機數x,y

  • A向B發送g^x%p的值,B向A發送g^y%p的值

到這裏,有可能被第三方獲取的數據有:p, g, g^x%p, g^y%p.可是因爲離散對數原理,即便第三方知道這些值也沒辦法推算出x,y的值.

最後一步 :

  • A執行g^y%p^x,B執行g^x%p^y.

能夠發現g^y%p^x = g^xy%p = g^x%p^y .至此AB之間把執行算式獲得相同的結果,這個值就能夠當作AB之間的祕鑰.

Diffie-Hellman算法可讓雙方在徹底沒有對方任何預先信息的條件下經過不安全信道建立起一個密鑰。這個密鑰能夠在後續的通信中做爲對稱密鑰來加密通信內容 ---- 維基百科

咱們能夠發現, 交換祕鑰的核心就在於Diffie-Hellman算法.這個算法能夠保證AB在沒有通訊過得狀況下,互相交換祕鑰.當AB之間有了相同的祕鑰以後,AB之間就能夠經過祕鑰進行身份驗證.可是,仍然有一個問題,AB之間第一次互相協商生成p, g的時候,C假冒A或者B跟對方進行祕鑰交換.C仍是會獲得數據,AB之間通訊以前交換祕鑰 就是爲了身份驗證,可是祕鑰交換過程當中仍是沒辦法保證對方的身份.咱們陷入了一個循環.並且對稱加密還有一個問題在於:當A跟多我的之間進行通訊的時候,得維護多份祕鑰.得投入大量精力.

非對稱加密.

非對稱加密祕鑰分爲公鑰私鑰.通常,公鑰是從私鑰中提取出來的,因此私鑰通常都會很長(1024,2048字節等等).用公鑰加密的數據只能用與之對應的私鑰解密,反之亦然.如其名稱,公鑰通常都是公開出去的,每一個人均可以獲取A的公鑰,可是A的私鑰只有A擁有.使用非對稱加密以後,AB之間的通訊變成了下面的樣子 :

  • A對要發送的數據提取特徵碼,而後使用本身的私鑰對數據進行加密.把加密以後的結果附帶在數據以後,發送給B

  • B拿到數據以後,使用A的公鑰解密獲得特徵碼,而後對數據提取特徵碼.兩個特徵碼比較能夠驗證.

上面的步驟下來,C截取而且篡改數據,而且C也可使用A的公鑰解密獲取特徵碼,可是C修改數據以後從新生成特徵碼,可是隻能使用本身的私鑰加密,B獲取數據以後,使用A的公鑰沒辦法解密用C的私鑰加密的數據,由此說明數據被篡改.至此,數據完整性和身份驗證這兩個問題能夠解決,可是數據仍是會被其餘人看到,使用上面的方法沒有辦法保證數據的機密性.

你可能會想到,A能夠把數據用B的公鑰加密以後再發送,這樣子只有B的私鑰能夠解密數據,這樣能夠保證數據機密性,這個方法可行.可是有一個問題:用公鑰加密數據太慢!.因此加密數據通常仍是使用對稱加密算法,可是有一點不一樣的是,AB之間不用再通訊以前交換祕鑰.

  • A對要發送的數據提取特徵碼,而後使用本身的私鑰加密特徵碼.

  • A隨機生成一個祕鑰,用這個祕鑰使用對稱加密算法加密全部的數據.而後使用B的公鑰加密這個隨機祕鑰,最後把加密數據和加密以後的隨機祕鑰發送給B

  • B獲得數據以後,使用本身的私鑰機密獲得隨機祕鑰,而後使用對稱加密算法解密數據,這個時候解密出來的數據包含兩個內容 :

    • A要發送給B的數據

    • A用本身私鑰加密特徵碼以後的密文

  • B用A的公鑰解密獲得特徵碼,而後對數據提取特徵碼,比較兩個特徵碼.

以上的流程就是如今通訊中加密解密的通用流程.根據上面的分析咱們能夠得出如下結論 :

  • 使用本身的私鑰加密數據能夠用做數字簽名,以保證數據發送者的身份和數據的完整性.

  • 使用對稱加密算法能夠保證數據的機密性.

CA機構

咱們再次回顧AB之間的通訊過程,AB之間可以互相通訊保證數據不被泄露都是基於AB擁有對方的公鑰,可是在第一次通訊的時候AB之間去哪裏獲取對方的公鑰,而且怎麼保證本身獲取到的公鑰就是對方的公鑰,而不是被人冒名頂替的?

你會發現,加密解密這事,從咱們最開始分析到如今不管出現什麼厲害的算法技術,都沒有辦法保證第一次通訊時候的身份校驗問題.因此,解決主機獲取到對方的公鑰沒有被人冒名頂替只能靠一個權威機構,即CA機構.這個機構對全球網站的公鑰進行認證,CA機構說這個公鑰是淘寶網的,那麼你就能夠相信這個公鑰是淘寶網的.因此CA機構必須具備權威性.

那麼CA機構處理的任務相似下面:

  • 服務商(好比淘寶)向CA機構請求爲本身的公鑰作認證,CA機構會把淘寶的公鑰跟淘寶的一些信息一塊兒,使用CA的私鑰加密,生成一個數字證書.

  • 用戶在訪問淘寶網的時候,淘寶服務器發送數據給用戶的時候,會把數字證書附帶在數據後面,用戶收到以後,使用CA的公鑰解密數字證書,就能夠獲得淘寶的公鑰.進而使用淘寶的公鑰來驗證數據的完整性和進行身份驗證.

上面的過程存在一個疑問:

咱們哪裏去獲取CA機構的公鑰

通常,咱們瀏覽器或者操做系統都會內置一些能夠信賴的CA機構的證書,即公鑰.好比Chrome能夠經過設置查看到信任機構的證書.

若是一個網站使用了不受信任的證書,那麼瀏覽器就會警告不要訪問這些網站.由於這些網站有多是他人假冒的.

固然CA機構頒發證書並非免費的,權威性越高的機構其證書就越貴.可是你發現,你使用計算機跟網站進行加密通訊,可是你好像並無購買證書?這是由於通常而言,做爲用戶並不須要向服務器驗證身份.舉例而言,你須要保證你訪問的網站就是淘寶網,那麼淘寶須要購買CA證書,可是你訪問淘寶使用的主機並不須要向淘寶進行身份校驗.只是訪問者(你)須要向淘寶進行身份校驗.而你向淘寶進行身份校驗使用的是帳戶和密碼.....

相關文章
相關標籤/搜索