網絡安全(2)-數據加解密

    以前講了身份認證,身份認證可讓咱們確認收到的數據來自正確的發送者。可是傳送的數據在通過中間節點的時候(或者在無線信道下並不須要通過中間節點,只要可以收到信號)可能會被偷聽者收到,咱們並不能阻止數據包被偷聽者獲取,由於數據包在在網線上或無線信道上傳輸,任何人都有可能經過信號接收設備獲取傳輸的模擬信號,從而進一步解析獲得以太網幀(或其餘鏈路層協議幀)、IP報文、UDP/TCP報文、應用層數據.... 
    咱們能作的就是讓偷聽者即便獲取了咱們傳輸的數據,也沒法知道咱們傳的究竟是什麼,即對數據進行加密。
html

數據加解密

    數據加解密算法分爲兩類:對稱性加解密和非對稱性加解密,前者如AES,DES,後者如RSA。算法

對稱性加解密

    對稱性加解密的加密和解密相同的密鑰,且能經過加密算法推導出解密算法,或者經過解密算法推導出加密算法。這種作法加解密速度快,適合於對大量數據進行加解密,但密鑰管理困難(防止偷聽者獲取密鑰和加解密算法)。 
    好比一個簡單的對稱性加解密能夠爲:加密時將數據每一個字節都加3,解密時將每一個字節都減3.3就能夠視爲一個密鑰,加減操做視爲加解密算法。 
    對稱性加解密不安全,緣由在於A和B之間要經過對稱性加解密算法來進行加解密,他們就必須使用相同的算法以及密鑰,而算法和密鑰的協商也是須要傳輸數據包進行協商,協商的數據包被偷聽者獲取以後,偷聽者就獲取了加解密算法和密鑰,從而在收到A或者B的數據以後能夠對數據進行解密,固然也能夠用加密算法加密本身的數據傳給A或者B。
安全

非對稱性加解密

    非對稱性加解密須要兩個密鑰,公鑰和私鑰,使用公鑰加密的數據只能用私鑰解密,使用私鑰加密的數據只能用公鑰解密。 
    A若想和B通訊,A能夠先生成一個公鑰和私鑰,而後將公鑰發送給B,B經過公鑰加密數據,而後發送給A,A經過私鑰解密得到數據;而若是中間有C偷窺了B發送的數據,可是C沒有A的私鑰沒法解密。一樣,B生成一對公鑰和私鑰,公鑰發送給A,A用公鑰加密數據發送給B,B收到數據後用私鑰解密,中間數據被C竊取,C也沒法解密。 
    非對稱性加解密相比於對稱性加解密安全,由於密鑰非對稱,公鑰隨便公開,只要私鑰不在網絡上傳輸,別人即便得到公鑰,竊取了加密後的數據,也沒法解密。可是,非對稱加解密的算法複雜度較高,對於實時性的數據加密壓力較大。因此通常使用的數據加解密方法是,使用非對稱性加解密方法傳輸對稱性加解密算法的密鑰,傳輸數據時,用對稱性加解密方法加解密。 
    常見的非對稱性加密算法如RSA算法,RSA是三我的共同提出的,因此以三我的的姓氏首字母命名。它是基於大數的因式分解的數學難題而提出的,對一個大數進行因式分解,其複雜度至關高。 
RSA加密算法的原理見:RSA算法原理1, RSA算法原理2
服務器

SSH 加密原理

    SSH安全協議是一種非對稱加密和對稱加密算法的結合。 
一、首先服務端會經過非對稱加密,產生一個公鑰和一個私鑰 
二、在客戶端發起請求時,服務端將公鑰暴露給客戶端,這個公鑰能夠被任意暴露 
三、客戶端在獲取公鑰以後,會先產生一個由256位隨機數字組成的會話密鑰,稱爲口令 
四、客戶端經過公鑰將這個口令加密,發送給服務器端 
五、服務器端經過私鑰進行解密,獲取到通信口令 
六、以後客戶端和服務端的信息傳遞,都使用這個口令進行對稱的加密
網絡

密鑰交換算法

    若是要進行對稱性加解密,通訊雙方須要使用相同的加解密算法和密鑰,那麼雙方如何協商他們使用的密鑰呢?一種方式是雙方使用RSA等非對稱性加密算法進行密鑰的交換,還有一些其餘的密鑰交換算法,好比DH密鑰交換算法: 
    DH密鑰交換算法是基於計算離散對數的難度(對於RSA算法是基於大數的因式分解的難度).
ssh

離散對數的概念: 
原根:若是a是素數p的一個原根,那麼數值: 
a mod p,a^2 mod p,…,a^(p-1) mod p 
是各不相同的整數,且以某種排列方式組成了從1到p-1的全部整數。 
離散對數:若是對於一個整數b和素數p的一個原根a,能夠找到一個惟一的指數 i,使得: 
b =(a的i次方) mod p 其中0 ≦ i ≦ p-1 
那麼指數i稱爲b的以a爲基數的模p的離散對數。 
Diffie-Hellman 算法的有效性依賴於計算離散對數的難度,其含義是:當已知大素數p和它的一個原根a後,對給定的 b,要計算 i ,被認爲是很困難的,而給定 i 計算b 卻相對容易。 
Diffie-Hellman算法: 
假如用戶A和用戶B但願交換一個密鑰。 
取素數p和整數a,a是p的一個原根,公開a和p。 
A選擇隨機數XA< p, 並計算 YA=a^XA mod p。 
B選擇隨機數XB< p,並計算 YB=a^XB mod p。 
每一方都將X保密而將Y公開讓另外一方獲得。 
A計算密鑰的方式是:K=(YB) ^XA mod p 
B計算密鑰的方式是:K=(YA) ^XB mod p 
證實: 
(YB)^ XA mod p = (a^XB mod p)^ XA mod p 
= (a^XB)^ XA mod p = (a^XA) ^XB mod p (<-- 密鑰即爲 a^(XA*XB) mod p) 
=(a^XA mod p)^ XB mod p= (YA) ^XB mod p 
因爲XA和XB是保密的,而第三方只有p、a、YB、YA能夠利用,只有經過取離散對數來肯定密鑰,但對於大的素數p,計算離散對數是十分困難的。
加密

+
相關文章
相關標籤/搜索