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:使用加密隧道傳輸資料