https 對接非對稱密鑰加密 MD5及數字簽名相關

由於面試筆試中經常會涉及到https及加密解密相關的技術,故此下面我對相關加解密知識進行簡單總結,主要是剖析https背後的運行機制。先來了解下有關加解密的基礎技術,如MD5  數字簽名 非對稱密鑰加密等。

1、MD5

    MD5message-digestalgorithm 5(信息-摘要算法)的縮寫,被廣泛用於加密和解密技術上,它可以說是文件的數字指紋。任何一個文件,無論是可執行程序、圖像文件、臨時文件或者其他任何類型的文件,也不管它體積多大,都有且只有一個獨一無二的MD5信息值,並且如果這個文件被修改過,它的MD5值也將隨之改變。因此,我們可以通過對比同一文件的MD5值,來校驗這個文件是否被篡改過。

    MD5到底有什麼用 ?

    當我們下載了文件後,如果想知道下載的這個文件和網站的原始文件是否一模一樣,就可以給自己下載的文件做個MD5驗。如果得到的MD5值和網站公佈的相同,可確認所下載的文件是完整的。如有不同,說明你下載的文件是不完整的:要麼就是在網絡下載的過程中出現錯誤,要麼就是此文件已被別人修改。爲防止他人更改該文件時放入病毒,最好不要使用。 當我們用E-mail給好友發送文件時,可以將要發送文件的MD5值告訴對方,這樣好友收到該文件以後即可對其進行校驗,來確定文件是否安全。 再比如:在剛安裝好系統後可以給系統文件做個MD5校驗,過了一段時間後如果你懷疑某些文件被人換掉,那麼就可以給那些被懷疑的文件做個MD5校驗,若和從前得到的MD5校驗碼不一樣,那麼就可以肯定是有問題的。 MD5就好比每個人的指紋都是唯一的一樣,文件的MD5值也是唯一的,效驗MD5就是用來確保文件在傳輸過程中未被修改用的有的網站在提供下載的同時還提供MD5值,你可以去下一個MD5效驗工具,這樣下別的東西完成後,就可以效驗一下。

另外: MD5將任意長度的字節串變換成一個128bit的大整數,並且它是一個不可逆的字符串變換算法,換句話說就是,即使你看到源程序和算法描述,也無法將一個MD5的值變換回原始的字符串,從數學原理上說,是因爲原始的字符串有無窮多個,這有點象不存在反函數的數學函數。

    MD5的典型應用是對一段Message(字節串)產生fingerprint(指紋),以防止被篡改。舉個例子,你將一段話寫在一個叫 readme.txt文件中,並對這個readme.txt產生一個MD5的值並記錄在案,然後你可以傳播這個文件給別人,別人如果修改了文件中的任何內容,你對這個文件重新計算MD5時就會發現。如果再有一個第三方的認證機構,MD5還可以防止文件作者的抵賴,這就是所謂的數字簽名應用。
    MD5
廣泛用於加密和解密技術上,在很多操作系統中,用戶的密碼是以MD5值(或類似的其它算法)的方式保存的,用戶Login的時候,系統是把用戶輸入的密碼計算成MD5值,然後再去和系統中保存的MD5值進行比較,而系統並不知道用戶的密碼是什麼。
MD5是個單向加密的過程是單向散列算法。單向散列加密是指不同輸入長度的信息進行散列計算,得到固定長度的輸出,這個散列計算過程是單向的,即不同通過對固定長度的輸出進行計算從而獲得輸入信息。

2、對稱加密和非對稱加密

1)對稱加密是指:加密和解密使用的是同一個密鑰(獲取可以互相推算)。DES算法 RC算法。

2)非對稱加密:加密和解密使用的密鑰不是同一個密鑰,其中一個對外界公開,被稱作公鑰,另一個只有所有者知道,即私鑰。理論上 不可能通過公鑰計算得到私鑰。常見算法有RSA算法。

Https傳輸中瀏覽器使用的數字證書實質上是經過權威機構CA認證的非對稱加密的公鑰。

3)單向散列加密:通過對不同輸入長度的信息進行散列hash計算,得到固定長度的輸出,這個散列計算過程是單向的,即不同通過對固定長度的輸出進行計算從而獲得輸入信息。常見算法有:MD5 SHA

 非對稱加密技術通常用在信息安全傳輸數字簽名場合

信息發送者A通過公開渠 道獲得信息接受者B的公鑰,對提交信息進行加密,然後通過非安全傳輸通道將密文信息發送給B,B得到密文信息後,用自己的私鑰對信息進行解密,獲得原始的明文信息,即使密文信息在傳輸過程中被竊取,竊取者沒有解密密鑰也無法明文。

數字簽名的過程正好相反,簽名者用自己的私鑰對信息進行加密,然後發送給對方,接收方用簽名者的公鑰對信息進行解密,獲取原始明文信息,由於私鑰只有簽名者擁有,因此該信息是不可抵賴的,具有簽名的信息。可以用來驗證信息數據的完整性。

實際應用中,常常會混合使用對稱加密和非對稱加密(如https.先使用非對稱加密技術對對稱密鑰進行安全傳輸,然後使用對稱加密技術進行信息加密和交換。而有時,對同一個數據兩次使用非對稱加密,可同時實現信息安全傳輸與數字簽名的目的。

3、數字簽名

        數字簽名技術是將摘要信息用發送者的私鑰加密,與原文一起傳送給接收者。接收者只有用發送者的公鑰才能解密被加密的摘要信息,然後用HASH函數對收到的原文產生一個摘要信息,與解密的摘要信息對比。如果相同,則說明收到的信息是完整的,在傳輸過程中沒有被修改,否則說明信息被修改過,因此數字簽名能夠驗證信息的完整性數字簽名有兩種功效:一是能確定消息確實是由發送方簽名並發出來的,因爲別人假冒不了發送方的簽名即具有不可抵賴性二是數字簽名能確定消息的完整性因爲數字簽名的特點是它代表了文件的特徵,文件如果發生改變,數字摘要的值也將發生變化。不同的文件將得到不同的數字摘要。一次數字簽名涉及到一個哈希函數、發送者的公鑰、發送者的私鑰

    數字簽名是非對稱密鑰加密技術數字摘要技術的應用

    實際使用過程爲:發送報文時,發送方用一個哈希函數從報文文本中生成報文摘要,然後用自己的私人密鑰對這個摘要進行加密,這個加密後的摘要將作爲報文的數字簽名和報文一起發送給接收方,接收方首先用與發送方一樣的哈希函數從接收到的原始報文中計算出報文摘要,接着再用發送方的公用密鑰來對報文附加的數字簽名進行解密,如果這兩個摘要相同、那麼接收方就能確認該數字簽名是發送方的。

   加密和數字簽名針對公鑰(x)和私鑰(數字xx)的使用過程正好是相反的。

4、HTTPS

   HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議。在URL前加https://前綴表明是用SSL加密的。我們的電腦與服務器之間收發的信息傳輸將更加安全。Web服務器啓用SSL需要獲得一個服務器證書並將該證書與要使用SSL的服務器綁定。 http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,後者是443。

 SSLSecurity  Socket   Layer)全稱是加密套接字協議層,它位於HTTP協議層和TCP協議層之間,即處於傳輸層之上。用於建立用戶與服務器之間的加密通信,確保所傳遞信息的安全性,同時SSL安全機制是依靠數字證書來實現的。

(https)SSL基於公用密鑰和私人密鑰,用戶使用公用密鑰來加密數據,但解密數據必須使用相應的私人密鑰使用SSL安全機制的通信過程如下用戶與IIS服務器建立連接後,服務器會把數字證書與公用密鑰發送給用戶,用戶端生成會話密鑰(即對稱密鑰),並用公共密鑰對會話密鑰進行加密,然後傳遞給服務器,服務器端用私人密鑰進行解密,這樣,用戶端和服務器端就建立了一條安全通道,只有SSL允許的用戶才能與IIS服務器進行通信。

可以看出,Https的工作過程原理實際上是非對稱密鑰加解密(先)和對稱密鑰加解密(後)的結合。

客戶端在使用HTTPS方式與Web服務器通信時有以下幾個步驟


1)客戶使用httpsURL訪問Web服務器,要求與Web服務器建立SSL連接。

2Web服務器收到客戶端請求後,會將網站的證書信息(證書中包含公鑰)傳送一份給客戶端。

3)客戶端的瀏覽器與Web服務器開始協商SSL連接的安全等級,也就是信息加密的等級。

4)客戶端的瀏覽器根據雙方同意的安全等級,建立會話密鑰,然後利用網站的公鑰將會話密鑰加密,並傳送給網站。

5Web服務器利用自己的私鑰解密出會話密鑰。

6Web服務器利用會話密鑰加密與客戶端之間的通信。

注意:證書中心CA用自己的私鑰,對服務器的公鑰和一些相關信息一起加密,生成"數字證書"Digital Certificate)。


其實這也是SSL握手的機制:

SSL 是一個安全協議,它提供使用TCP/IP的通信應用程序間的隱私與完整性。因特網的 超文本傳輸協議 HTTP)使用 SSL 來實現安全的通信。在客戶端與服務器間傳輸的數據是通過使用對稱算法(如 DES RC4)進行加密的。公用密鑰算法(通常爲 RSA)是用來獲得加密密鑰交換和數字簽名的,此算法使用服務器的SSL數字證書中的公用密鑰。有了服務器的SSL數字證書,客戶端也可以驗證服務器的身份。SSL協議的版本 1 2只提供服務器認證。版本 3添加了客戶端認證,此認證同時需要客戶端和服務器的數字證書。SSL連接總是由客戶端啓動的。在SSL會話開始時執行 SSL握手。此握手產生會話的密碼參數。SSL的客戶端與服務器端的認證握手如下圖所示: 



HTTPSHTTP的區別:
https
協議需要到ca申請證書,一般免費證書很少,需要交費。
http
是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議
http
https使用的是完全不同的連接方式用的端口也不一樣,前者是80,後者是443
http
的連接很簡單,是無狀態的
HTTPS
協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議要比http協議安全


HTTPS解決的問題:
1 .
信任主機的問題.採用httpsserver必須從CA申請一個用於證明服務器用途類型的證書.改證書只有用於對應的server的時候,客戶度纔信任次主機.所以目前所有的銀行系統網站,關鍵部分應用都是https.客戶通過信任該證書,從而信任了該主機.其實這樣做效率很低,但是銀行更側重安全.這一點對我們沒有任何意義,我們的server ,採用的證書不管自己issue還是從公衆的地方issue,客戶端都是自己人,所以我們也就肯定信任該server.
2 .
通訊過程中的數據的泄密和被竄改
1.
一般意義上的https,就是 server有一個證書.
a)
主要目的是保證server就是他聲稱的server.這個跟第一點一樣.
b)
服務端和客戶端之間的所有通訊,都是加密的.
i.
具體講,是客戶端產生一個對稱的密鑰,通過server的證書來交換密鑰.一般意義上的握手過程.
ii.
加下來所有的信息往來就都是加密的.第三方即使截獲,也沒有任何意義.因爲他沒有密鑰.當然竄改也就沒有什麼意義了.
2.
少許對客戶端有要求的情況下,會要求客戶端也必須有一個證書.
a)
這裏客戶端證書,其實就類似表示個人信息的時候,除了用戶名/密碼,還有一個CA認證過的身份.應爲個人證書一般來說上別人無法模擬的,所有這樣能夠更深的確認自己的身份.
b)
目前少數個人銀行的專業版是這種做法,具體證書可能是拿U盤作爲一個備份的載體.
HTTPS
一定是繁瑣的.
a)
本來簡單的http協議,一個get一個response.由於https要還密鑰和確認加密算法的需要.單握手就需要6/7個往返.
i.
任何應用中,過多的round trip 肯定影響性能.
b)
接下來纔是具體的http協議,每一次響應或者請求,都要求客戶端和服務端對會話的內容做加密/解密.
i.
儘管對稱加密/解密效率比較高,可是仍然要消耗過多的CPU,爲此有專門的SSL芯片.如果CPU信能比較低的話,肯定會降低性能,從而不能serve更多的請求.
ii.
加密後數據量的影響.所以,纔會出現那麼多的安全認證提示

數字證書digital certificate用於爲客戶端用戶認證web站點即服務器,以防止惡意站點冒充成其他WEB站點。即用於服務器端發送給客戶端,以確定服務器端的真實性真實身份。

認證機構(即證書中心CA)A簽署的數字證書由一個公鑰(其實保存在客戶端瀏覽器中)Ka和一個可以用公鑰ka解密的加密文本E構成。該加密文本包括該證書籤發給的團體名次及它的公鑰Kc.

認證中心CA的公鑰保存在客戶端WEB瀏覽器中,CA(用CA其私鑰爲WEB站點服務器)簽署的數字證書可以使用客戶端保存的公鑰來驗證。且注意:數字證書中包裹着着服務器站點的公鑰(即上面所提的Kc)。


  



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章