1. 程式人生 > >SSL/TLS 互動說明

SSL/TLS 互動說明

一、SSL/TLS說明

1.1、說明:

安全傳輸層協議(TLS)用於在兩個通訊應用程式之間提供保密性和資料完整性,是ssl的後續版本。

該協議由兩層組成: TLS 記錄協議(TLS Record)和 TLS 握手協議(TLS Handshake)。

Record協議:包括對訊息的分段、壓縮、訊息認證和完整性保護、加密等 。

Handshake協議:包括協商安全引數和密碼套件、伺服器身份認證(客戶端身份認證可選)、金鑰交換等。

 

主要用於解決:

 

二、TLS互動說明:

2.1、TLS 1.2 協議互動過程:

流程簡要說明:

具體可以參見:https://tools.ietf.org/html/draft-whyte-qsh-tls12-02

1、2:TLS執行在TCP基礎之上,需要一個完整的來回互動(RTT),完成TCP 三次握手“ 。

3:TCP連線建立後,客戶端傳送ClientHello,包括:

(1)客戶端支援的ssl的最高版本號,如TLS1.2版。

(2)客戶端支援的加密套件列表,如RSA公鑰加密。

(3)確定的會話ID(用於恢復會話使用,server端會儲存關於session id的對應的通訊祕鑰,當匹配的時候,會使用快取的對稱祕鑰)

(4)客戶端所支援的壓縮演算法列表

(5)一個用於生成對話祕鑰的32位隨機數

 

4:伺服器傳送ServerHello,包含:

(1)服務端選擇的ssl的版本(選擇方式為選擇客戶端和服務端最高版本中的較低的那一個)

(2)服務端選擇的加密套件,如RSA公鑰加密。

(3)會話ID(用於恢復會話使用,server端會儲存關於session id的對應的通訊祕鑰,當匹配的時候,會使用快取的對稱祕鑰)

(4)客戶端選擇的壓縮演算法

(5)一個用於生成對話祕鑰的32位隨機數

 

5:雙方協商好一個共同的TLS版本和加密演算法,客戶端使用伺服器提供的證書,生成新的對稱金鑰,並用伺服器的公鑰進行加密,通知伺服器切換到加密通訊流程。

以上,除了對稱金鑰是伺服器端的公鑰加密,其他都是明文。

 

6:伺服器用自己的私鑰解密客戶端發過來的對稱金鑰,通過驗證MAC檢查訊息的完整性,並返回給客戶端一個加密的“Finished”的訊息。客戶端採用對稱金鑰解密訊息,並驗證MAC,如果一切OK,加密隧道就建立好了。

7:使用加密隧道傳輸資料

 

注: TLS1.2 基於RSA加密,TLS1.3 基於ECDH,減少了一個RTT互動過程。

RSA說明 見:RSA原理說明

 

2.2、TLS 1.3 協議互動過程:

2.2.1、ECDH:

2.2.1.1、簡要說明:

ECDH是基於ECC(Elliptic Curve Cryptosystems,橢圓曲線密碼體制,參看ECC)的DH( Diffie-Hellman)金鑰交換演算法。交換雙方可以在不共享任何祕密的情況下協商出一個金鑰。

ECC是建立在基於橢圓曲線的離散對數問題上的密碼體制,給定橢圓曲線上的一個點P,一個整數k,求解Q=kP很容易;給定一個點P、Q,知道Q=kP,求整數k確是一個難題。ECDH即建立在此數學難題之上。

2.2.1.2、祕鑰交換過程:

假設金鑰交換雙方為Alice、Bob,其有共享曲線引數(橢圓曲線E、階N、基點G)。

1.Alice生成隨機整數a,計算A=a*G。Bob生成隨機整數b,計算B=b*G。

2.Alice將A傳遞給Bob。A的傳遞可以公開,即攻擊者可以獲取A。由於橢圓曲線的離散對數問題是難題,所以攻擊者不可以通過A、G計算出a。Bob將B傳遞給Alice。同理,B的傳遞可以公開。

3.Bob收到Alice傳遞的A,計算Q=b*A

4.Alice收到Bob傳遞的B,計算Q‘=a*B

Alice、Bob雙方即得Q=b*A=b*(a*G)=(b*a)*G=(a*b)*G=a*(b*G)=a*B=Q' (交換律和結合律),即雙方得到一致的金鑰Q。

 

2.2.2、協議互動過程:

 

流程簡要說明:

具體可以參見:https://tools.ietf.org/html/draft-ietf-tls-tls13-28

1、2:TLS執行在TCP基礎之上,需要一個完整的來回互動(RTT),完成TCP 三次握手“ 。

3:TCP連線建立後,客戶端傳送ClientHello,包括:

(1)客戶端支援的ssl的最高版本號

(2)客戶端支援的加密套件列表

(3)確定的會話ID

(4)客戶端所支援的壓縮演算法列表

其中key_share記錄了a*G,其中G是一個大家都知道的大數。伺服器拿到a*G,計算得到Q=b*a*G(核心思想,實際邏輯要比這複雜),得到對稱祕鑰。

 

4:伺服器傳送ServerHello,包含:

(1)服務端選擇的ssl的版本(選擇方式為選擇客戶端和服務端最高版本中的較低的那一個)

(2)服務端選擇的密碼套件

(3)會話ID

(4)客戶端選擇的壓縮演算法

其中key_share記錄了b*G,客戶端拿到b*G就可以計算得到Q=a*b*G(核心思想,實際邏輯要比這複雜),得到對稱祕鑰。

 

5:客戶端會返回驗證資訊、證書資訊等給伺服器。

 

6:使用加密隧道傳輸資料