espressif樂鑫官網ESP32C6低功耗無線模塊TLS/DTLS協議介紹,TLS 協議介紹,安全傳輸層(Transport Layer Security,TLS) 是建立在 TCP 協議基礎上的協議,服務于應用層,它的前身是安全套接字層(Sccure SocketLayer,SSL) 協議。通過 TLS 協議,可以將應用層的報文加密后交由 TCP 層傳輸。
espressif樂鑫官網ESP32C6低功耗無線模塊TLS 的作用,TLS 協議主要解決了如下三個網絡問題:
保證數據的機密性:所有的數據都采用加密傳輸,可防止數據被第三方竊取
保證數據的完整性:所有的數據都采用校驗機制,一旦被篡改,通信雙方會立刻發現
保證數據通信雙方身份:通信雙方可以采取證書認證,保證通信雙方身份的合法性。
espressif樂鑫官網ESP32C6低功耗無線模塊TLS協議的工作方式,TLS 協議可以分為兩部分:記錄層,通過使用客戶端和服務器端協商后的密鑰進行數據加密傳輸;握手層,客戶端和服務器端進行協商,確定一組用于數據傳輸加密的密鑰串。TLS協議模型其中的握手層包含4 個子協議:握手協議 (Handshake Protocol)、更改加密規范協議 (Change Cipher Spec Protocol)、應用數據協議 (Application Data Protocol)和警告協議 (Alert Protocol)。
(1)記錄層。記錄層負責在傳輸層交換的所有底層數據,并且可以對數據進行加密。espressif樂鑫官網ESP32C6低功耗無線模塊每一條TLS 記錄以一個短標頭開始,標頭包含了記錄內容的類型(或子協議)、協議版本和長度。底層數據經過分段(或者合并)、壓縮、添加消息認證碼、加密后轉為 TLS 記錄的數據部分TLS。
(2) 握手層的主要作用如下:
1)握手協議。其職責是生成通信過程所需的共享密鑰和進行身份認證。這部分使用無密碼套件,為防止數據被竊聽,通過公鑰密碼或 Difhe-Hellman 密鑰交換技術進行通信。
2)更改加密規范協議。用于密碼切換的同步,是在握手協議之后的協議。握手過程中使用的協議是“不加密”這一密碼套件,握手協議完成后則使用協商好的密碼套件。
3)應用數據協議。通信雙方真正用于數據傳輸的協議,傳輸過程通過握手層的應用數據協議和 TLS 記錄協議來進行傳輸。
4)警告協議。當發生錯誤時使用該協議通知對方,如握手過程中發生異常、消息認證碼錯誤、數據無法解壓縮等。
(3)TLS 加密所使用的算法如下:
1)散列函數 Hash。用于驗證數據的完整性,常見的加密算法有 MD5、SHA等。
2)對稱加密算法。用于應用數據的加密,espressif樂鑫官網ESP32C6低功耗無線模塊常見的加密算法有 AES、RC4、DES 等。
3)非對稱加密算法。用于身份認證和密鑰協商,常見的加密算法有 RSA、DH等。
(4)TLS 的基本工作方式是,客戶端與服務器端采用非對稱加密算法認證身份并且協商對稱加密算法的密鑰,然后使用對稱加密數據和數據摘要進行數據通信。
1) Client Hello??蛻舳税l送支持的 TLS 協議的高版本、自已支持的所有加密套件,用于將生成對話密鑰的隨機數等信息發送給服務器端。
2) Server Hello。服務器端接收到客戶端發送的 Client Hello 報文后,根據客戶端發送的協議版本和加密套件,選擇 TLS 協議版本以及一個加密套件后返回給客戶端。
3)(可選)Send Certificate。服務器端發送自己的服務器端證書給客戶端,用于客戶端校驗服務器端的合法性。
4)(可選)Request Certificate。在服務器端需要校驗客戶端的證書時,若選擇雙向驗證,服務器端則會向客戶端發送證書請求報文。
5)Server Hello Done。服務器端告知客戶端,服務器端已經將所有的握手消息發送完畢,服務器端會等待客戶端發送消息。
6)(可選) Response Certificate。如果選擇雙向驗證,客戶端則會向服務器端發送客戶端的證書,用于服務器端校驗客戶端的身份。
7)Client Key Exchange??蛻舳耸褂梅掌鞫说墓€,對客戶端公鑰和密鑰種子進行加密后再發送給服務器端。
8)(可選)Certificate Verify。如果選擇雙向驗證,則客戶端用本地私鑰生成數字簽名,并送給服務器端,讓其通過收到的客戶端公鑰進行身份驗證。
9) Create Secret Key。espressif樂鑫官網ESP32C6低功耗無線模塊通信雙方基于密鑰種子等信息生成通信密鑰。
10)Change Cipher Spec??蛻舳送ㄖ掌鞫艘褜⑼ㄐ欧绞角袚Q到加密模式。
11)Finished??蛻舳俗龊眉用芡ㄐ诺臏蕚?。
12) Change Cipher Spec。服務器端通知客戶端已將通信方式切換到加密模式。
13)Finished。服務器端做好加密通信的準備。
14)Encrypted/Decrypted Data。雙方使用客戶端密鑰,通過對稱加密算法對通信內容進行加密/解密。
15)Closed Connection。通信結束后,任何一方發出斷開 TLS 連接的消息。
espressif樂鑫官網ESP32C6低功耗無線模塊DTLS 協議介紹,數據包傳輸層安全性協議(Datagram Transport Layer Security,DTLS) 是基于UDP協議的協議,服務于應用層。TLS 協議不能保證UDP 協議傳輸的數據安全,因此DTLS 協議在現有的TLS 協議架構上進行了擴展,使之支持 UDP 協議,即成為 TLS 協議的一個支持數據包傳輸的版本。DTLS 1.0基于 TLS 1.1、DTLS 1.2 基于 TLS 1.2。DTLS 協議的加密算法、證書、加密流程與 TLS 協議基本一致。
espressif樂鑫官網ESP32C6低功耗無線模塊DTLS 協議與 TLS 協議的區別,DTLS 協議的工作原理和 TLS 協議基本一致,除了有以下幾個差異:
(1)在握手階段,DTLS 協議加入了 Cookie 機制。DTLS 協議在 1.0 版本就加入了 Cookie機制,用于服務器端對客戶端的校驗,可避免DoS 攻擊。當客戶端發送 Client Hello 給服務器端后,服務器端并不會直接回復 Server Hello 來進行握手流程,而是回復 Hello Verify Request報文給客戶端,并且該報文會攜帶 Cookie 值。當客戶端收到該報文后,會將該 Cookie 值寫入Client Hello 報文中重新發送給服務器端,服務器端收到后校驗本地的 Cookie 列表來決是否需要進行握手。
(2)支持重傳機制。espressif樂鑫官網ESP32C6低功耗無線模塊由于 UDP 協議本身不像 TCP 協議那樣支持重傳,所以 DTLS 協議引了重傳機制。以上述 Client Hello 報文為例,當客戶端發送了 Client Hello后,客戶端會啟用一個定時器來接收服務器端回復的 Hello Verify Request 報文;如果服務器端在一定的時間內
沒有回復,客瑞就會重新發一次 Clicnt flelo 報文。同理,服務器端發送報文后,也會啟用一個定時器來判斷是否超時、是否需要重發。
(3)支持有序接收。UDP協議是無序的,DTLS 協議在握手報文中增加 message_seq字段,用于接收方根據該字段順序處理報文。接收方會像 TCP 協議那樣提供一個接收緩沖區接收亂序報文,并且根據 message seq 字段順序處理報文。
(4)支持報文大小限制。UDP 是面向報文的協議,TCP 是面向字節流的協議。espressif樂鑫官網ESP32C6低功耗無線模塊TCP 協議支報文的分片和重組,而UDP 協議報文如果超過了 MTU(鏈路層的大傳輸單元),就會在IP層被強制分片,接收方接收后根據 IP 報頭進行報文重組。如果有一包丟失就會導致整個UDI報文無效。因此 DTLS 協議選擇在 UDP 協議之上對握手消息做了分段,在握手報文中增加fragment_offset 字段和 fragment_length 字段,分別代表這段報文相對消息起始偏移量和這段報文的長度。