8-3 SSL記錄層
內容:
8-3-1
SSL
封裝
格式
SSL 記錄層只有一個『記錄協定』(Record Protocol),功能是當 SSL 通訊達成雙方身份認證與協商所欲採用的安全機制之後,則雙方可利用記錄協定來通訊,當然記錄協定所承載的訊息是經由雙方協議後的加密套件所加密。圖 8-4 (d) 為記錄協定的封裝格式,包含欄位如下:
-
內文型態(Content Type):記錄協定的內文型態為 23。
-
主要版本(Major Version,8 位元):SSL/TLS 版本,目前 SSLv3,此欄位為 3;TLS v1.0,此欄位也是 3。
-
次要版本(Minor Version,8 位元):目前 SSLv3,此欄位為 0;TLS v1.0,此欄位為 1。SSL/TLS 協定是利用此欄位區分 SSL 與 TLS。
-
壓縮後長度(Compression Length,16 位元):表示資料經過壓縮後的長度(或是沒壓縮處理的長度),以位元組為單位。資料的最大長度為 214 + 1024。
-
訊息(Message):此欄位存放上層協定的訊息,如 HTTP、SMTP 或 LDAP 協定等等。
-
訊息確認碼(MAC):本欄位存放上述所有欄位的內容與協議出的會議鑰匙計算出來的 MAC 碼,作為訊息完整性檢查與訊息確認功能使用。
8-3-2 紀錄層的封裝程序
通訊雙方透過 SSL 握手協定協議成功之後,除了協議出安全套件(如加密演算法、主密鑰、壓縮方法與 MAC 演算法)之外,也必須協議出每一安全套件的相關參數,SSL 記錄協定再依照這些安全參數來包裝訊息。另外,SSL 記錄協定是將上層協定(如 HTTP 協定)的資料,以某一固定單位(TCP 傳輸單位)分割成若干個封包,每一個封包依照安全參數(容後介紹產生方法)處理相關措施,最後再包裝成 SSL 協定封包,並載入 TCP 封包內,如圖 8-5 所示,其封裝步驟如下:
-
分段處理:首先將上層資料(如 HTTP)分割為若干個區段,至於每一個分段到底多大,與壓縮方法有關。如果傳輸資料沒有經過壓縮,每一分段必須小於 16 KBytes。
-
壓縮資料:依照雙方協議的壓縮方法壓縮分段資料,並參考 compression method 安全參數。在 TLS 規範中並沒有指定壓縮方法,而 SSL 協定中有壓縮方法的選擇項目。
-
附加 MAC 欄位:依照雙方協議出的 client/server write MAC secret 安全參數計算出『訊息認證碼』(MAC)碼,並將它附加在資料後面;其中客戶端採用 client write MAC secret,伺服端使用 server write MAC secret 之密鑰。
-
加密編法:將分段資料加密編碼。由雙方協議出來的加密系統加密,其中所使用的加密鑰匙是 client/server write key 參數所指定,這兩把鑰匙也是由握手協定所協議出來的。如果採用區塊加密法(Block Cipher),則需要協議出起始向量值(client/server write IV)。
-
附加 SSL 記錄協定標頭:每一分段必須附加記錄協定標頭,標頭的欄位如圖 8-3 (d) 所示。
-
TCP 封包封裝:最後將 SSL 封包植入 TCP 封包的訊息欄位上,由 TCP 連線承載傳送。
圖 8-5 記錄協定的封裝封包
8-4 SSL
協商連結識別
雙方利用 SSL 握手協定協議出某一個安全套件之後,便將此安全套件的相關參數登錄於一個稱之為『會議連結』(Session Connection)記錄上,並給予唯一的『會議識別碼』(Session ID)號碼。一個 Session 表示建立一個安全機制的描述內容,譬如,加密演算法、MAC 演算法等等,而且一個建立完成的 Session 可被重複使用。也就是說,SSL 透過握手協定雙方通訊的安全機制,此機制會被包裝成一個 Session。即使通訊完畢後,此 Session 並未消失,可作為下次通訊時重複使用,如此可減少雙方協議安全機制的負荷。另外,任何一個通訊連結(譬如 HTTP 連線)也可能會引用多條 Session 來描述其安全機制。一個 Session 的參數包含如下:
-
會議識別碼(Session Identifier):伺服端任意指定的一個位元序列的數值,作為標示每一 Session 獨一無二的識別碼。
-
對等憑證(Peer Certificate):通訊雙方之間的對等 X.509v3 憑證,此參數可能是空值。
-
壓縮方法(Compression Method):指定資料在加密編碼之前,如需經過壓縮,所欲採用的壓縮方法。
-
密文規格(Cipher Spec):指定大量資料的加密演算法與 MAC 演算法,同時定義加密編碼時所需的參數,譬如雜湊亂數的大小。
-
主密鑰(Master Secret):此參數定義伺服端與客戶端之間共享的秘密鑰匙,長度為48 位元組。
-
是否可回復(Is Resumable):此參數表示該 Session 是否允許被重複使用。
上述各項參數是被用來建立『SSL 記錄層』(SSL Record Layer)的安全參數,也就是說,記錄協定在將上層協定的資料分段包裝時(如圖 11-3 (d) 所示),其中壓縮、加密、以及計算 MAC 值的演算法,都是參照 Session 中各項參數來完成的。
|