TLS1.3握手流程以及參數詳解

TLS1.3握手流程以及參數詳解

TLS1.3總共有兩層,分別是握手協議(handshake protocol)和記錄協議(record protocol),握手協議在記錄協議的上層,記錄協議是一個分層協議。其中握手協議中還包括了警告協議(alert protocol)。本文將詳細闡述握手協議,並且抓包分析。

我在一年前寫了一篇介紹TLS1.3的文章,最近工作遇到了TLS1.3協議。重新複習了下。

這篇文章想詳細的闡述交互過程,以及抓包分析參數的含義。

 

文章目錄

  • TLS1.3概述
  • TLS1.3記錄協議:
  • TLS1.3警告協議:
  • TLS1.3握手協議:
  • 分析ClinetHello:
  • 分析ServerHello:
  • client的認證部分:
  • 數據傳輸部分

TLS1.3概述

TLS1.3總共有兩層,分別是握手協議(handshake protocol)和記錄協議(record protocol),握手協議在記錄協議的上層,記錄協議是一個分層協議。其中握手協議中還包括了警告協議(alert protocol)。

TLS1.3概括如表格所示:

本文將詳細闡述握手協議,並且抓包分析。

 

TLS1.3記錄協議:

記錄協議位於握手協議下層,發送方從高層接受任意長度的非空數據,對其進行合併或分塊處理,然後利用帶有輔助數據的認證加密AEAD(authenticated encryption with associated data)進行加密傳輸。

接收方接受數據後對其進行解密和驗證,重組後再傳送給高層用戶。

 

TLS1.3警告協議:

目的是以簡單的通知機制告知通信出現異常情況,警告消息通常會攜帶Close_notify異常,在連接關閉的時候報告錯誤,Alert_Level字段標識告警的嚴重程度,可取值Warning或者Fatal,嚴重程度爲Fatal時會立即終止當前連接。

 

TLS1.3握手協議:

握手協議主要分爲三個流程

  1. 密鑰交換:選擇TLS協議版本和加密的算法,並且協商算法所需的參數。這段是明文傳輸的
  2. 服務器參數:建立其他握手協議參數,例如是否需要認證客戶端,支持何種應用層協議等。
  3. 認證:對服務器進行認證(包括可選的客戶端認證)並且提供密鑰確認和驗證握手完整性功能。

這三個階段完成後就可以進行應用層數據傳輸。

流程圖如下所示:

注:+:上一消息的擴展消息;*:可選發送

{}:用握手層流密鑰加密;[]:用流密鑰加密

TLS1.3的交互過程分爲1-RTT,RTT是時延往返的意思。RTT越小速度越快。

在TLS1.2裏交互過程需要2-RTT,可見TLS1.3加快了交互的速度。

正常連接(1-RTT)流程如下:

第1步,客戶端發送 ClientHello 消息,該消息主要包括客戶端支持的協議版本、會話ID、密碼套件、壓縮算法、以及擴展消息(密鑰共享、預共享密鑰、預共享密鑰模式);

第2步,服務端回覆 ServerHello,包含選定的加密套件;發送證書給客戶端;使用證書對應的私鑰對握手消息簽名,將結果發送給客戶端;選用客戶端提供的參數生成臨時公鑰,結合選定的參數計算出用於加密 HTTP 消息的共享密鑰;服務端生成的臨時公鑰通過 KeyShare 消息發送給客戶端;

第3步,客戶端接收到 KeyShare 消息後,使用證書公鑰進行簽名驗證,獲取服務器端的臨時公鑰,生成會話所需要的共享密鑰;

第4步,雙方使用生成的共享密鑰對消息加密傳輸,保證消息安全。

簡單的說就是:

即4部分。ClientHello,SeverHello,Client認證,數據交互。

接下來分析這4個部分。

 

分析ClinetHello:


Handshake Type:ClientHello,表示握手消息類型,此處是ClientHello
Length:574,即長度爲574
Version:TLS1.2(0x0303),表示版本號爲1.2,TLS1.3中規定此處必須置爲0x0303,即TLS1.2,起到向後兼容的作用。1.3版本用來協商版本號的部分在擴展當中,而之前的版本就在此處進行。
Random,隨機數,是由安全隨機數生成器生成的32個字節。
Session ID Length:會話ID的長度。
Session ID,會話ID,TLS 1.3之前的版本支持“會話恢復”功能,該功能已與1.3版本中的預共享密鑰合併。爲了兼容以前的版本,該字段必須是非空的,因此不提供TLS 1.3之前會話的客戶端必鬚生成一個新的32字節值。該值不必是隨機的,但應該是不可預測的,以避免實現固定在特定值,否則,必須將其設置爲空。
Cipher Suites Length,即下面Cipher Suites的長度

Cipher Suites是密碼套件,表示客戶端提供可選擇的加密方式,如圖所示:

每個加密套件都包含,密鑰交換,簽名算法,加密算法,哈希算法。

Compression Methons (1 method)表示壓縮方法,長度爲1,內容爲空

Exentisons擴展部分,是TLS1.3纔開始使用,是TLS1.3的顯著特徵。每一個擴展都包含類型(type),長度(length)和數據(data)三個部分。

下面分析幾個相對重要的擴展:

1key_share

key_share 是橢圓曲線類型對應的公鑰,如圖所示

此處包含兩個KeyShareEntry,第一個是預留的空值,第二個是x25519曲線組,具體數據在KeyExchange字段中;每個KeyShareEntry都代表一組密鑰交換參數。

2signature_algorithms

Signature_algorithms擴展是,客戶端提供簽名算法,讓服務器選擇

以第一個簽名算法爲例,ecdsa_secp256r1_sha256,使用sha256作爲簽名中的哈希,簽名算法爲ecdsa。

3psk_key_exchange_modes

psk_key_exchange_modes是psk密鑰交互模式選擇

此處的PSK模式爲(EC)DHE下的PSK,客戶端和服務器必須提供KeyShare

如果是僅PSK模式,則服務器不需要提供KeyShare。

4)pre_shared_key

psk是預共享密鑰認證機制,相當於session ticket再加一些檢驗的東西

Identity中包含的是客戶端願意進行協商的服務器身份列表

PSK binder表示已經構建當前PSK與當前握手之間的綁定。
 

分析ServerHello:

發現和ClientHello類似。

CkientHello提供加密方式的選擇,而ServerHello實質是在Client提供的多種加密中選定加密的方式

client的認證部分:

待到client認證完成,發送給服務端,至此建立連接,可以發送數據。

數據傳輸部分

可見數據經過TLS1.3加密,進行傳輸。


轉載請註明:“轉自綠盟科技博客”: 原文鏈接http://blog.nsfocus.net/tls1-3protocol/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章