SSL記錄協議
出自 MBA智库百科(https://wiki.mbalib.com/)
目錄 |
什麼是SSL記錄協議[1]
SSL記錄協議是通過將數據流分割成一系列的片段並加以傳輸來工作的,其中的每個片段都單獨進行保護和傳輸。在傳輸數據片段之前,需要計算數據的MAC以保證數據的完整性。數據片段和MAC一起被加密並與頭信息組成記錄,記錄是實際傳輸的內容。
SSL記錄協議的兩種服務[2]
SSL記錄協議為每一個SSL連接提供以下兩種服務。
(1)機密性(Confidentiality):SSL記錄協議會協助雙方產生一把共有的密鑰,利用這把密鑰來對SSL所傳送的數據做傳統式加密。
(2)消息完整性(Message Integrity):SSL記錄協議會協助雙方產生另一把共有的密鑰,利用這把密鑰來計算出消息認證碼。
下圖展示了SSL記錄協議大致的操作流程。記錄協議接收到應用程式所要傳送的消息後,會將消息內的數據切成容易管理的小區塊(分片),然後選擇是否對這些區塊作壓縮,再加上此區塊的消息認證碼。接著將數據區塊與MAC一起做加密處理,加上SSL記錄頭後通過TCP傳送出去。接收數據的那一方則以解釋、核查、解壓縮,及重組的步驟將消息的內容還原,傳送給上層使用者。
第一個步驟是分片(Fragmentation)。每一個上層想要通過SSL傳送的消息都會被切割成最多214B(或者是16364B)大小的分片,接著,可以選擇是否執行壓縮(Compression)的步驟。壓縮的過程中,必須是無損失(Lossless)壓縮,也就是說解壓縮後能夠得到原本完整的消息。除此之外,經過壓縮後的內容長度不能超過原有長度1024位元組以上(當然,我們希望壓縮後的數據能夠更小,而不是增多。但對於有些長度非常小的分片來說,可能因為壓縮演算法格式上的要求,壓縮過後的結果會比原來數據還長)。在SSLv3(以及TLS的現有版本),並沒有指定壓縮演算法,所以預設的加演算法是null。
接下來的處理步驟為計算壓縮數據的消息認證碼。為了達到這個目的,必須使用一把雙方共有的密鑰。消息認證碼的計算過程定義如下:
hash(MAC_write_secrte||pad_1||seq_mum||SSLCompressed.type||SSLCompressed.length||SSLCompressed.fragment),其中,各符號和參數的意義如下。
(1)||:表示串接。
(2)MAC_write_secrte:共有的密鑰。
(3)Hash:使用到密碼的雜湊演算法;MD5或者SHA-1。
(4)pad_1:若是使用MD5,則為0x36(00110110)位元組重覆48次的384位分片,若是用SHA-1,則為0x36重覆40次的320位分片。
(5)pad_2:若是使用MD5,則為0x5C(01010110)位元組重覆48次的384位分片,若是用SHA-1,則為0x36重覆40次的320位分片。
(6)seq_mum:這個消息的序列號碼。
(7)SSLCompressed.type:用來處理這個分片的上層協議。
(8)SSLCompressed.length:分片經過壓縮過後的長度。
(9)SSLCompressed.fragment:經過壓縮後的分片(假如沒有經過壓縮這個步驟,則代表明文分片)。
接著,壓縮過後的數據會連同MAC一起做對稱加密。加密後的數據長度最多只能比加密前多1024B,因此,連同壓縮以及加密的過程處理完後,整個數據塊長度不會超過(214+2048)B。
SSL記錄協議最後的步驟便是準備一個記錄頭,這個記錄頭包含以下的欄位。
(1)數據類型(Content type),8位:用來處理這個分片的上層協議。
(2)主要版本號(Major Version),8位:所使用的SSI。協議的主要版本,對於SSI。v3協議來說,這個欄位值為3。
(3)次要版本號(Minor Version),8位:表示使用的次要版本,對於SSLv3協議來說,這個欄位值為0。
(4)壓縮後數據長度(Compressed length),16位:這個明文分片的長度(假如此分片已經過壓縮,則為壓縮後的長度)。最大值為(214+2048)B。
已定義的數據類型包含Change_cipher_spec、alert、handshake,以及application_data。前三種數據類型為SSL所定義的協議。請註意,上層各種使用SSI。的應用程式對於SSL來說並沒有什麼差別,因為SSI。無法瞭解這些應用程式所產生的數據的意義。