背景介紹
近期在看《password學與網絡安全》相關的書籍,這篇文章主要具體介紹一下著名的網絡安全協議SSL。
在開始SSl介紹之前,先給大家介紹幾個password學的概念和相關的知識。
1、password學的相關概念
password學(cryptography):目的是通過將信息編碼使其不可讀,從而達到安全性。
明文(plain text):發送人、接受人和不論什么訪問消息的人都能理解的消息。
密文(cipher text):明文消息經過某種編碼后,得到密文消息。
加密(encryption):將明文消息變成密文消息。
解密(decryption):將密文消息變成明文消息。
算法:取一個輸入文本,產生一個輸出文本。
加密算法:發送方進行加密的算法。
解密算法:接收方進行解密的算法。
密鑰(key):僅僅有發送方和接收方理解的消息
對稱密鑰加密(Symmetric Key Cryptography):加密與解密使用同樣密鑰。
非對稱密鑰加密(Asymmetric Key Cryptography):加密與解密使用不同密鑰。
2、相關的加密算法介紹
DES算法即數據加密標准,也稱為數據加密算法。加密步驟例如以下:
在SSL中會用到分組DES、三重DES算法等加密算法對數據進行加密。當然能夠選用其它非DES加密算法,視情況而定,后面會具體介紹。
3、密鑰交換算法
使用對稱加密算法時,密鑰交換是個大難題,所以Diffie和Hellman提出了著名的Diffie-Hellman密鑰交換算法。
Diffie-Hellman密鑰交換算法原理:
(1)Alice與Bob確定兩個大素數n和g,這兩個數不用保密 (2)Alice選擇還有一個大隨機數x,並計算A例如以下:A=gx mod n (3)Alice將A發給Bob (4)Bob 選擇還有一個大隨機數y,並計算B例如以下:B=gy mod n (5)Bob將B發給Alice (6)計算秘密密鑰K1例如以下:K1=Bx mod n (7)計算秘密密鑰K2例如以下:K2=Ay mod n K1=K2,因此Alice和Bob能夠用其進行加解密
RSA加密算法是基於這種數學事實:兩個大素數相乘easy,而對得到的乘積求因子則非常難。加密步驟例如以下:
(1)選擇兩個大素數P、Q
(2)計算N=P*Q
(3)選擇一個公鑰(加密密鑰)E,使其不是(P-1)與(Q-1)的因子
(4)選擇私鑰(解密密鑰)D,滿足例如以下條件:
(D*E) mod (P-1)(Q-1)=1
(5)加密時,明文PT計算密文CT例如以下:
CT=PTE mod N
(6)解密時,從密文CT計算明文PT例如以下:
PT=CTDmodN 這也是SSL中會用一種密鑰交換算法。
3、散列算法:
主要用於驗證數據的完整性,即保證時消息在發送之后和接收之前沒有被篡改對於SSL中使用到的散列算法有MD5、SHA-1。
4、數字證書:
數字證書事實上就是一個小的計算機文件,其作用類似於我們的身份證、護照,用於證明身份,在SSL中,使用數字證書來證明自己的身份,而不是偽造的。
5、簡單的總結:
在SSL中會使用密鑰交換算法交換密鑰;使用密鑰對數據進行加密;使用散列算法對數據的完整性進行驗證,使用數字證書證明自己的身份。好了,以下開始介紹SSL協議。
SSL介紹:
安全套接字(Secure Socket Layer,SSL)協議是Web瀏覽器與Webserver之間安全交換信息的協議,提供兩個主要的安全服務:鑒別與保密。
SSL是Netscape於1994年開發的,后來成為了世界上最著名的web安全機制,全部基本的瀏覽器都支持SSL協議
眼下有三個版本號:2、3、3.1,最經常使用的是第3版,是1995年公布的。
SSL協議的三個特性
① 保密:在握手協議中定義了會話密鑰后,全部的消息都被加密。
② 鑒別:可選的client認證,和強制的server端認證。
③ 完整性:傳送的消息包含消息完整性檢查(使用MAC)。
SSL的位置
SSL介於應用層和TCP層之間。應用層數據不再直接傳遞給傳輸層,而是傳遞給SSL層,SSL層對從應用層收到的數據進行加密,並添加�自己的SSL頭。
SSL的工作原理
握手協議(Handshake protocol)
記錄協議(Record protocol)
警報協議(Alert protocol)
1、握手協議
握手協議是客戶機和server用SSL連接通信時使用的第一個子協議,握手協議包含客戶機與server之間的一系列消息。SSL中最復雜的協議就是握手協議。該協議同意server和客戶機相互驗證,協商加密和MAC算法以及保密密鑰,用來保護在SSL記錄中發送的數據。握手協議是在應用程序的傳輸數據之前使用的。
每一個握手協議包括下面3個字段
(1)Type:表示10種消息類型之中的一個
(2)Length:表示消息長度字節數
(3)Content:與消息相關的參數
握手協議的4個階段
1.1建立安全能力
SSL握手的第一階段啟動邏輯連接,建立這個連接的安全能力。首先客戶機向server發出client hello消息並等待server響應,隨后server向客戶機返回server hello消息,對client hello消息中的信息進行確認。
Client hello消息包含Version,Random,Session id,Cipher suite,Compression method等信息。
ClientHello 客戶發送CilentHello信息,包括例如以下內容:
(1)client能夠支持的SSL最高版本
(2)一個用於生成主秘密的32字節的隨機數。(等會介紹主秘密是什么)
(3)一個確定會話的會話ID。
(4)一個client能夠支持的password套件列表。
password套件格式:每一個套件都以“SSL”開頭,緊跟着的是密鑰交換算法。用“With”這個詞把密鑰交換算法、加密算法、散列算法分開,比如:SSL_DHE_RSA_WITH_DES_CBC_SHA,表示把DHE_RSA(帶有RSA數字簽名的臨時Diffie-HellMan)定義為密鑰交換算法;把DES_CBC定義為加密算法;把SHA定義為散列算法。
(5)一個client能夠支持的壓縮算法列表。
ServerHello server用ServerHello信息應答客戶,包含下列內容
(1)一個SSL版本。取client支持的最高版本和服務端支持的最高版本中的較低者。
(2)一個用於生成主秘密的32字節的隨機數。(client一個、服務端一個)
(3)會話ID
(4)從client的password套件列表中選擇的一個password套件
(5)從client的壓縮方法的列表中選擇的壓縮方法
這個階段之后,client服務端知道了下列內容:
(1)SSL版本號
(2)密鑰交換、信息驗證和加密算法
(3)壓縮方法
(4)有關密鑰生成的兩個隨機數。
1.2 server鑒別與密鑰交換
server啟動SSL握手第2階段,是本階段全部消息的唯一發送方,客戶機是全部消息的唯一接收方。該階段分為4步:
(a)證書:server將數字證書和到根CA整個鏈發給client,使client能用server證書中的server公鑰認證server。
(b)server密鑰交換(可選):這里視密鑰交換算法而定
(c)證書請求:服務端可能會要求客戶自身進行驗證。
(d)server握手完畢:第二階段的結束,第三階段開始的信號
這里重點介紹一下服務端的驗證和密鑰交換。這個階段的前面的(a)證書 和(b)server密鑰交換是基於密鑰交換方法的。而在SSL中密鑰交換算法有6種:無效(沒有密鑰交換)、RSA、匿名Diffie-Hellman、臨時Diffie-Hellman、固定Diffie-Hellman、Fortezza。
在階段1過程client與服務端協商的過程中已經確定使哪種密鑰交換算法。
假設協商過程中確定使用RSA交換密鑰,那么步驟例如以下圖:
這種方法中,server在它的第一個信息中,發送了RSA加密/解密公鑰證書。只是,由於預備主秘密是由client在下一個階段生成並發送的,所以第二個信息是空的。注意,公鑰證書會進行從server到client的驗證。當server收到預備主秘密時,它使用私鑰進行解密。服務端擁有私鑰是一個證據,能夠證明server是一個它在第一個信息發送的公鑰證書中要求的實體。
其它的幾種密鑰交換算法這里就不介紹了。能夠參考Behrouz A.Forouzan著的《password學與網絡安全》。
1.3 客戶機鑒別與密鑰交換:
1.4 完畢
客戶機啟動SSL握手第4階段,使server結束。該階段分為4步,前2個消息來自客戶機,后2個消息來自server。
1.5密鑰生成的過程
這樣握手協議完畢,以下看下什么是預備主密鑰,主密鑰是怎么生成的。為了保證信息的完整性和機密性,SSL須要有六個加密秘密:四個密鑰和兩個IV。為了信息的可信性,client須要一個密鑰(HMAC),為了加密要有一個密鑰,為了分組加密要一個IV,服務也是如此。SSL須要的密鑰是單向的,不同於那些在其它方向的密鑰。假設在一個方向上有攻擊,這樣的攻擊在其它方向是沒影響的。生成步驟例如以下:
2、記錄協議
3、警報協議
作者:朱祁林
出處:http://zhuqil.cnblogs.com
本文版權歸作者和博客園共同擁有,歡迎轉載,但未經作者允許必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。