資訊與網路安全技術第 八章 安全性網頁系統  上一頁      下一頁

 

8-6 SSL 主密鑰產生

內容:

  • 8-6-1 SSL 產生前置主密鑰

  • 8-6-2 主密鑰的計算

8-6-1 SSL 產生前置主密鑰

SSL 握手協定裡最主要有三種功能:認證身分、協議演算法(MAC 與加密編碼)與建立會議鑰匙。前兩項只要雙方協議由何種方式來達成即可,至於建立會議鑰匙就複雜許多。它是利用雙方所交換的鑰匙材料所建立,再利用此鑰匙加密,達成資料的隱密性功能(對稱加密法效率較高)。但 SSL/TLS 為了達到安全性更高,並不直接利用鑰匙材料產生會議鑰匙,而是先產生『前置主密鑰』(Pre-master Secret,再利用它產生『主密鑰』(Master Seeret,之間皆會經過一道複雜程序,如圖 8-8 所示。經過這些程序是為了提高複雜度,否則竊聽者擷取了鑰匙材料,說不定也可以製造出相同的會議鑰匙。產生了主密鑰之後,再利用它產生各種加密鑰匙,將於下節介紹(如圖 8-9 所示)。

8-8 主密鑰產生方法

基本上,主密鑰長度是 48 位元組,只使用一次,因此被破解的機率非常小。由圖 8-8 可以看出,主密鑰產生過程又可分為兩個階段:產生前置主密鑰與計算主密鑰,以下分別介紹之。

SSL 協定規範中,產生前置主密鑰有 RSA Diffie_Hellman 等兩種演算法,前者是利用數位憑證內的公開鑰匙傳送,後者是利用雙方交換鑰匙材料所產生。

【(ARSA 演算法】

RSA 演算法是由客戶端產生一個 48 位元組的『前置主密鑰』(Pre-master Secret),並利用伺服端的公開鑰匙對此前置主密鑰加密,再傳送給伺服端。伺服端再利用自己的私有鑰匙解密此密文,得到與客戶端相同的前置主密鑰。我們以圖 8-6 為範例,來說明 RSA 演算法交換鑰匙材料。首先,雙方以 Hello 訊息互相交換一個亂數,並表明欲採用 RSA 演算法產生主密鑰(訊號 (1) (2));接著,客戶端產生一個 48 位元組的亂數(前置主秘鑰,Pre-S),並利用伺服端公開鑰匙加密後,傳送給伺服端(client_key_exchange,訊號 (3));接下來,雙方利用此前置主密鑰與亂數計算出主密鑰(容後介紹),並通知對方已完成(finished,訊號 (4) (5)),往後雙方就可以利用主密鑰(K)來保護資料的傳輸。所產生的主密鑰為:

K = f(Pre-S, ClientHello.random, ServerHello.random)

其中,Pre-S 為前置主密鑰,ClientHello.random ServerHello.random 是啟動訊號(Hello)上所攜帶的亂數。

8-9 RSA 演算法的主密鑰產生

【(BDiffie_Hellman 演算法】

Diffie-Hellman 演算法是雙方互相交換一個數值(鑰匙材料),再各自利用所交換的鑰匙材料計算出一個相同數值(『前置主密鑰』)。圖 8-10 為雙方交換鑰匙材料的運作方式。首先雙方利用 Hello 命令交換亂數與協議選擇採用 D-H 演算法(訊號 (1) (2))。接著,雙方再利用鑰匙交換命命傳送鑰匙材料給對方(訊號 (3) (4))。雙方收到鑰匙材料之後,依照 Diffie-Hellman 演算法計算出『前置主密鑰』(計算方法請參考本書 4-4 節介紹),再利用此前置主密鑰計算出『主密鑰』(容後介紹),完成後通知對方(訊號 (5) (6))。

8-10 Diffie-Hellman 的主密鑰產生

8-10 中,雙方所交換的鑰匙材料如下:

ServerDHParm = {dh_p, dh_g, dh_Ys} {n, g, gx mod n}

ClientDHParm = {dh-Yc} {gy mod n}

因此,所產生的前置主密鑰為:

Pre-master Secret = gxy mod n

另外,鑰匙材料交換命令(key_exchange)裡也需要產生雜湊碼,作為確定訊息的完整性;SSL 協定允許選擇採用 MD5 SHA 演算法,計算參數如下:

MD5_Hash = MD5(ClientHello.radom || ServerHello.radom || ServerParm)

SHA_Hash = SHA(ClientHello.radom || ServerHello.radom || ServerParm)

8-6-2 主密鑰的計算

無論採用 RSADiffie-Hellman FORTEZZA 演算法產生『前置主密鑰』之後,都使用同一種計算公式來產生『主密鑰』(Master Secret,計算公式如下:

master_secret = MD5(pre_master_secret || SHA(“A”|| pre_master_secret || ClientHello.random || ServerHello.random)) ||

MD5(pre_master_secret || SHA(“BB”|| pre_master_secret || ClientHello.random || ServerHello.random)) ||

MD5(pre_master_secret || SHA(“CCC”|| pre_master_secret || ClientHello.random || ServerHello.random))

8-11 顯示出上述的計算程序。基本上,SSL 協定所欲產生主密鑰的長度是 48 位元組(384 bits),然而 MD5 演算法所產生的雜湊碼為 16 個位元組,因此需要計算三次再將其連結起來。SHA 所計算出來的雜湊碼(20 位元組),然後再經過 MD5 計算,但不再計算長度。計算公式中 A 表示起始向量(如 8-8-2 介紹,MD5(ClientHello.random || ServerHello.random)),BB CCC 表示前一次所計算出來主密鑰(master_secret)的值,重複計算到長度為 48 位元組為止。

8-11 主密鑰的計算產生

雖然,經過鑰匙交換程序產生了『主密鑰』,但並非直接使用它來從事加密或計算 MAC 碼,這必須視採用何種『加密套件』而定。但無論如何,主密鑰是一個 SSL 會議(SSL Session)安全機制的主要依據,由它來產生各種安全參數,譬如,加密鑰匙、MAC 鑰匙、、、等等;如何運用,下一節再介紹。

翻轉工作室:粘添壽

 

 

資訊與網路安全技術

 

 

翻轉電子書系列: