SSL的工作原理

 6.2  SSL的工作原理

SSL的工作原理:當一個使用者在Web上用Netscape瀏覽器漫遊時,瀏覽器利用HTTP協議與Web服務器溝通。例如,瀏覽器發出一個HTTP GET命令給服務器,想下載一個首頁的HTML檔案,而服務器會將檔案的內容傳送給瀏覽器來響應。GET這個命令的文字和HTML檔案的文字會通過會話層(Socket)的連接來傳送,Socket使兩臺遠程的計算機能利用Internet來通話。通過SSL,資料在傳送出去之前就自動被加密了,它會在接收端被解密。對沒有解密鑰的人來說,其中的資料是無法閱讀的。

SSL採用TCP作爲傳輸協議提供數據的可靠傳送和接收。SSL工作在Socket層上,因此獨立於更高層應用,可爲更高層協議,如Telnet、FTP和HTTP提供安全業務。SSL提供的安全業務和TCP層一樣,採用了公開密鑰和私人密鑰兩種加密體制對Web服務器和客戶機(選項)的通信提供保密性、數據完整性和認證。在建立連接過程中採用公開密鑰,在會話過程中使用私人密鑰。加密的類型和強度則在兩端之間建立連接的過程中判斷決定。在所有情況下,服務器通過以下方法向客戶機證實自身:給出包含公開密鑰的、可驗證的證明;演示它能對用此公開密鑰加密的報文進行解密。

爲了支持客戶機,每個客戶機都要擁有一對密鑰,這要求在Internet上通過Netscape分配。由於Internet中的服務器數遠少於客戶機數,因此能否處理簽字及密鑰管理的業務量是很重要的,並且與客戶聯繫比給商家以同樣保證更重要。

SSL協議提供的服務可以歸納爲如下3個方面。

(1)用戶和服務器的合法性認證

使得用戶和服務器能夠確信數據將被髮送到正確的客戶機和服務器上。客戶機和服務器都有各自的識別號,由公開密鑰編排。爲了驗證用戶,安全套接層協議要求在握手交換數據中做數字認證,以此來確保用戶的合法性。

(2)加密數據以隱藏被傳送的數據

安全套接層協議採用的加密技術既有對稱密鑰,也有公開密鑰。具體來說,就是客戶機與服務器交換數據之前,先交換SSL初始握手信息。在SSL握手信息中採用了各種加密技術,以保證其機密性和數據的完整性,並且經數字證書鑑別,這樣就可以防止非法用戶破譯。

(3)維護數據的完整性

安全套接層協議採用密碼雜湊函數和機密共享的方法,提供完整信息性的服務,來建立客戶機與服務器之間的安全通道,使所有經過安全套接層協議處理的業務,在傳輸過程中都能完整、準確無誤地到達目的地。

 

 

6.3  SSL記錄層協議

SSL記錄層協議限定了所有發送和接收數據的打包,它提供了通信、身份認證功能,它是一個面向連接的可靠傳輸協議,如TCP/IP提供安全保護。

在SSL中,所有數據被封裝在記錄中。一個記錄由兩部分組成:記錄頭和非零長度的數據。記錄頭可以是2字節或3字節(當有填充數據時使用)。SSL握手層協議的報文要求必須放在一個SSL記錄層的記錄裏,但應用層協議的報文允許佔用多個SSL。記錄來傳送。

1.SSL記錄頭格式

SSL記錄頭可以是2個或3個字節長的編碼。SSL記錄頭包含的信息有記錄頭的長度、記錄數據的長度,以及記錄數據中是否有填充數據,其中填充數據是在使用塊加密(blocken-cryption)算法時,填充實際數據,使其長度恰好是塊的整數倍。最高位爲1時,不含有填充數據,記錄頭的長度爲2個字節,記錄數據的最大長度爲32767個字節;最高位爲0時,含有填充數據,記錄頭的長度爲3個字節,記錄數據的最大長度爲16383個字節。

SSL記錄層結構如圖11-10所示。

 
圖11-10  SSL記錄層結構

當數據頭長度是3個字節時,次高位有特殊的含義。次高位爲1時,表示所傳輸的記錄是普通的數據記錄;次高位爲0時,表示所傳輸的記錄是安全空白記錄(被保留用於將來協議的擴展)。

記錄頭中數據長度編碼不包括數據頭所佔用的字節長度。記錄頭長度爲2個字節時,記錄長度的計算公式爲:記錄長度((Byte[0]&0x7f)<<8)|Byte[1]。其中Byte[0]、Byte[1]分別表示傳輸的第一個、第二個字節。

記錄頭長度爲3個字節時,記錄長度的計算公式是:記錄長度=((Byte[0]&0x3f<<8))

|Byte[1]。其中Byte[0]、Byte[1]的含義同上。判斷是否是安全空白記錄的計算公式是:(Byte[0]&0x40)!0。填充數據的長度爲傳輸的第三個字節。

2.SSL記錄數據格式

SSL記錄數據部分有3個分量:MAC-DATA、ACTUAL-DATA和PADDING-DATA。

MAC數據用於數據完整性檢查。計算MAC所用的散列函數由握手協議中的CIPHER-CHOICE消息確定。若使用MD2和MD5算法,則MAC數據長度是16個字節。MAC的計算公式爲:MAC數據=Hash[密鑰, 實際數據, 填充數據, 序號]。

當會話的客戶端發送數據時,密鑰是客戶的寫密鑰(服務器用讀密鑰來驗證MAC數據);而當會話的客戶端接收數據時,密鑰是客戶的讀密鑰(服務器用寫密鑰來產生MAC數據)。序號是一個可以被髮送和接收雙方遞增的計數器,每個通信方向都會建立一對計數器,分別被髮送者和接收者擁有。計數器有32位,計數值循環使用,每發送一個記錄,計數值遞增一次,序號的初始值爲0。

ACTUAL-DATA是被傳送的應用數據,PADDING-DATA是當採用分組碼時所需要的填充數據,在明文傳送下只有第二項。

3.記錄協議的作用

記錄協議層封裝了高層協議的數據,協議數據採用SSL握手協議中協商好的加密算法及MAC算法來保護。記錄協議傳送的數據包括一個序列號,這樣就可以檢測消息的丟失、改動或重放。如果協商好了壓縮算法,那麼SSL記錄協議還可以執行壓縮功能。

SSL V3版的高層由記錄傳遞的消息組成,這包括改變密碼規範協議、警報協議和握手協議。改變密碼規範協議指明對使用的密碼規範的改變,協議中還包括了一個用當前密碼規範加密的單獨消息。客戶和服務器都要發送改變密碼規範消息來表明它們準備使用一個新的密碼規範和密鑰。警報協議傳送與事件相關的消息,包括事件嚴重性及事件描述。這裏的事件主要是指錯誤情形,如錯誤的MAC碼、證書過期或是非法參數。警報協議也用於共享有關預計連接終止的信息。

 

6.4  SSL握手協議

握手協議是關於客戶和服務器如何協商它們在安全信道中要使用的安全參數,這些參數包括要採用的協議版本、加密算法和密鑰。另外,客戶要認證服務器,服務器則可以選擇認證/不認證客戶。PKI在客戶-服務器認證階段就開始運作了,這就是握手協議的實質。

1.握手協議工作過程

SSL握手協議的具體工作過程描述如下。

① 客戶(client)端發送ClientHello信息給服務器(Server)端,Server回答ServerHello。這個過程建立的安全參數包括協議版本、“佳話”標識、加密算法、壓縮方法。另外,還交換兩個隨機數:C1ientHello.Random和ServerHello.Random,用於計算機“會話主密鑰”。

② Hello消息發送完後,Server端會發送它的證書和密鑰交換信息。如果Server端被認證,它就會請求Client端的證書,在驗證以後,Server就發送HelloDone消息,以示達成了握手協議,即雙方握手接通。

③ Server請求Client證書時,Client要返回證書或返回沒有證書的指示,這種情況用於單向認證,即客戶端不裝有證書。然後,Client發送密鑰交換消息。

④ 服務器Server此時要回答“握手完成”消息(Finished),以示完整的握手消息交換已經全部完成。

⑤ 握手協議完成後,Client端即可與Server端傳輸應用加密數據,應用數據加密一般是用第②步密鑰協商時確定的對稱加/解密密鑰,如DES、3DE等。目前,商用加密強度爲128位,非對稱密鑰一般爲RAS,商用強度爲1024位,用於證書的驗證。

完整的握手協議消息交換過程如圖11-11所示。

 
圖11-11  完整的握手協議消息交換過程

其中,帶*號的命令是可選的,或依據狀態而發的消息,而改變加密算法協議(ChangeCipherSpec)並不在實際的握手協議之中,它在第③步與第④步之間,用於Client與Server協商新的加密數據包時而改變原先的加密算法。

2.握手協議的作用

SSL中的握手協議,將公鑰加密技術與對稱密鑰加密技術的應用有效、巧妙地結合在一起,有機地組成了互聯網(或其他網絡)上信息安全傳輸的通道。這種信息安全通道,有其實用價值,比如,利用對稱加密技術比公鑰加密技術對大容量信息的加/解密速度要快,而公鑰技術卻提供了更好的身份認證技術。SSL的握手協議可以非常有效地讓客戶與服務器之間完成身份認證。

通過SSL客戶端與服務器傳送自己的數字證書,互驗合法性,特別是驗證服務器的合法性,可以有效地防止互聯網上虛假網站的網上釣魚事件;同時,服務器端也可以嚴格驗證客戶端的真實身份。其作用如下:

① 客戶端的瀏覽器向服務器傳送客戶端SSL協議的版本號、加密算法的種類、產生的隨機數,以及其他服務器和客戶端之間通信所需要的各種信息。

② 服務器向客戶端傳送SSL協議的版本號、加密算法的種類、隨機數及其他相關信息,同時,服務器還將向客戶端傳送自己的證書。

③ 客戶利用服務器傳過來的信息驗證服務器的合法性。服務器的合法性包括:證書是否過期,發行服務器證書的CA是否可靠,發行者證書的公鑰能否正確解開服務器證書的“發行者的數字簽名”,服務器證書上的域名是否和服務器的實際域名相匹配。如果合法性驗證沒有通過,則通信將斷開;如果合法性驗證通過,則將繼續進行第④步。

④ 客戶端隨機產生一個用於後面通信的“對稱密碼”,然後用服務器的公鑰(從步驟②中服務器的證書中獲得)對其加密,再將加密後的“預主密碼”傳給服務器。

⑤ 如果服務器要求客戶的身份認證(在握手過程中爲可選),用戶則可以建立一個隨機數,然後對其進行數字簽名,將這個含有簽名的隨機數和客戶自己的證書,以及加密過的“預主密碼”一起傳給服務器。

⑥ 如果服務器要求客戶的身份認證,服務器則必須檢驗客戶證書和簽名隨機數的合法性。具體的合法性驗證包括:客戶的證書使用日期是否有效,爲客戶提供證書的CA是否可靠,發行CA的公鑰能否正確解開客戶證書的發行CA的數字簽名,檢查客戶的證書是否在證書撤銷列表(CRL)中。檢驗如果沒有通過,則通信立刻中斷;如果驗證通過,則服務器將用自己的私鑰解開加密的“預主密碼”,然後執行一系列步驟來產生主通信密碼(客戶端也將通過同樣的方法產生相同的主通信密碼)。

⑦ 服務器和客戶端用相同的主密碼,即“通話密碼”,一個對稱密鑰用於SSL協議的安全數據通信的加/解密通信。同時,在SSL通信過程中還要完成數據通信的完整性,以防止數據通信中的任何變化。

⑧ 客戶端向服務器端發出信息,指明後面的數據通信將使用步驟⑦中的主密碼爲對稱密鑰,同時通知服務器客戶端的握手過程結束。

⑨ 服務器向客戶端發出信息,指明後面的數據通信將使用步驟⑦中的主密碼爲對稱密鑰,同時通知客戶端服務器端的握手過程結束。

⑩ SSL的握手部分結束,SSL安全通道的數據通信開始,客戶和服務器開始使用相同的對稱密鑰進行數據通信,同時進行通信完整性的檢驗。

 

6.5  SSL協議的安全性分析

SSL協議所採用的加密算法和認證算法使它具有較高的安全性,但也存在一些問題。

1.SSL協議採用的加密算法和認證算法

(1)加密算法和會話密鑰

SSL V2協議和SSL V3協議支持的加密算法包括RC4、RC2、IDEA和DES,而加密算法所用的密鑰由消息散列函數MD5產生。RC4、RC2是由RSA定義的,其中RC2適用於塊加密,RC4適用於流加密。

(2)認證算法

認證算法採用X.509電子證書標準,是通過RSA算法進行數字簽名來實現的。

服務器的認證

在上述的兩對密鑰中,服務器方的寫密鑰和客戶方的讀密鑰、客戶方的寫密鑰和服務器方的讀密鑰分別是一對私有、公有密鑰。對服務器進行認證時,只有用正確的服務器方寫密鑰加密,ClientHello消息形成的數字簽名才能被客戶正確地解密,從而驗證服務器的身份。
若通信雙方不需要新的密鑰,則它們各自所擁有的密鑰已經符合上述條件。若通信雙方需要新的密鑰,首先服務器方在ServerHello消息中的服務器證書中提供了服務器的公有密鑰,服務器用其私有密鑰才能正確地解密由客戶方使用服務器的公有密鑰加密的MASTER-KEY,從而獲得服務器方的讀密鑰和寫密鑰。

客戶的認證

同上,只有用正確的客戶方寫密鑰加密的內容才能被服務器方用其讀密鑰正確地解開。當客戶收到服務器方發出的REQUEST-CERTIFICATE消息時,客戶首先使用MD5消息散列函數獲得服務器方信息的摘要,服務器方的信息包括:KEY-MATERIAL-0、KEY-MATERIAL-1、KEY-MATERIAL-2、CERTIFICATE-CHALLENAGE-DATA(來自於REQUEST-CERTIFICATE消息)、服務器所賦予的證書(來自於ServerHello)消息。
其中KEY-MATERIAL-l、KEY-MATERIAL-2是可選的,與具體的加密算法有關。然後客戶使用自己的讀密鑰加密摘要形成數字簽名,從而被服務器認證。

2.SSL安全優勢

(1)監聽和中間人式攻擊

SSL使用一個經過通信雙方協商確定的加密算法和密鑰,對不同的安全級別應用都可找到不同的加密算法,從而用於數據加密。它的密鑰管理處理比較好,在每次連接時通過產生一個密碼雜湊函數生成一個臨時使用的會話密鑰,除了不同連接使用不同密鑰外,在一次連接的兩個傳輸方向上也使用各自的密鑰。儘管SSL協議爲監聽者提供了很多明文,但由於採用RSA交換密鑰具有較好的密鑰保護性能,以及頻繁更換密鑰的特點,因此對監聽和中間人式攻擊而言,具有較高的防範性。

(2)流量數據分析式攻擊

流量數據分析式攻擊的核心是通過檢查數據包的未加密字段或未加保護的數據包屬性,試圖進行攻擊。在一般情況下該攻擊是無害的,SSL無法阻止這種攻擊。

(3)截取再拼接式攻擊

對需要較強的連接加密,需要考慮這種安全性。SSL V3.0基本上可阻止這種攻擊。

(4)報文重發式攻擊

報文重發式攻擊比較容易阻止,SSL通過在MAC數據中包含“系列號”來防止該攻擊。

3.SSL協議存在的問題

(1)密鑰管理問題


設計一個安全祕密的密鑰交換協議是很複雜的,因此,SSL的握手協議也存在一些密鑰管理問題。SSL的問題表現在:

客戶機和服務器在互相發送自己能夠支持的加密算法時,是以明文傳送的,存在被攻擊修改的可能。

SSL V3.0爲了兼容以前的版本,可能降低安全性。

所有的會話密鑰中都將生成MASTER-KEY,握手協議的安全完全依賴於對MASTER-KEY的保護,因此在通信中要儘可能少地使用MASTER-KEY。

(2)加密強度問題

Netscape依照美國內政部的規定,在它的國際版的瀏覽器及服務器上使用40位的密鑰。

以SSL所使用的RC4演繹法所命名的RC4法規,對多於40位長的加密密鑰產品的出口加以限制,這項規定使Netscape的128位加密密鑰在美國之外的地方變成不合法。一個著名的例子是一個法國的研究生和兩個美國柏克萊大學的研究生破譯了一個SSL的密鑰,才使人們開始懷疑以SSL爲基礎的系統安全性。

Microsoft公司想利用一種稱爲私人通信技術(PCT,Private Communication Technology)的SSLsuperset協議來改進SSL的缺點。PCT會衍生出第二個專門爲身份驗證用的密鑰,這個身份驗證並不屬於RC4規定的管轄範圍。PCT加入比目前隨機數產生器更安全的產生器,因爲它也是SSL安全鏈中的一個弱環節。這個隨機數產生器提供了產生加密密鑰的種子數目(Seed Number)。

(3)數字簽名問題

SSL協議沒有數字簽名功能,即沒有抗否認服務。若要增加數字簽名功能,則需要在協議中打“補丁”。這樣做,在用於加密密鑰的同時又用於數字簽名,這在安全上存在漏洞。後來PKI體系完善了這種措施,即雙密鑰機制,將加密密鑰和數字簽名密鑰二者分開,成爲雙證書機制。這是PKI完整的安全服務體系。

發佈了1527 篇原創文章 · 獲贊 50 · 訪問量 443萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章