首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SSL/TLS 協議深度解析:密鑰導出過程與核心機制

     編輯:程式設計綜合問答

前言

SSLv1 從未公開發布(因嚴重安全漏洞),SSLv2/v3 已棄用,現代 TLS 1.2/1.3 才是主流。但理解「密鑰導出」核心邏輯,對掌握 HTTPS 安全本質至關重要。本文以 TLS 1.2 為基準,深度剖析密鑰導出全過程。

核心概念:三大隨機數

密鑰導出的「種子」來自握手階段交換的三個隨機數:

  • Client Random:Client Hello 中攜帶(32 字節:4 字節 Unix 時間 + 28 字節隨機)
  • Server Random:Server Hello 中攜帶(同結構)
  • Pre-Master Secret:關鍵材料,由客戶端生成,經非對稱加密傳給服務端

密鑰導出三階段

階段一:主密鑰生成

master_secret = PRF(pre_master_secret, "master secret", 
                    ClientHello.random + ServerHello.random)[0..47]  // 48 字節
  • PRF (Pseudo-Random Function):TLS 1.2 使用 P_hash,基於 HMAC-SHA256(或 SHA384)
  • 種子:標籤 "master secret" + 兩個隨機數拼接(64 字節)
  • 輸出:48 字節 Master Secret

階段二:密鑰塊擴展

key_block = PRF(master_secret, "key expansion", 
                ServerHello.random + ClientHello.random)  // 變長輸出

密鑰塊長度取決於協商的加密套件,例如 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 需要:

  • Client Write MAC Key:0 字節(AEAD 模式不需要獨立 MAC)
  • Server Write MAC Key:0 字節
  • Client Write Key:16 字節(AES-128)
  • Server Write Key:16 字節
  • Client Write IV:4 字節(GCM 隨機數固定部分)
  • Server Write IV:4 字節
  • 總計:40 字節

階段三:會話密鑰分派

從 Key Block 依序切割分配給六個方向:

  1. Client Write Encryption Key
  2. Server Write Encryption Key
  3. Client Write MAC Key(非 AEAD 套件)
  4. Server Write MAC Key
  5. Client Write IV
  6. Server Write IV

加密套件決定一切

Client Hello 發送支援的 Cipher Suites 列表,Server 選擇最強匹配。套件定義了:

  • 密鑰交換算法(RSA/ECDHE/DHE/PSK)
  • 身份驗證算法(RSA/ECDSA)
  • 對稱加密算法(AES-GCM/CHACHA20-POLY1305)
  • MAC 算法(SHA256/384,AEAD 模式隱含)
  • PRF 雜湊算法

不同套件 → 不同 Key Block 長度 → 不同切割方式,這就是「六個會話密鑰」的由來。

TLS 1.3 關鍵改進

  • 移除 RSA 密鑰交換,強制前向保密(ECDHE/DHE)
  • 合併 PRF 為 HKDF(基於 HMAC 的密鑰導出函數)
  • 0-RTT 恢復機制,但需防重放攻擊
  • 握手加密,隱藏 Server Certificate 等敏感資訊

原始碼級驗證建議

想看真實導出邏輯,建議閱讀 OpenSSL 源碼:

  • ssl/statem/statem_lib.c:握手狀態機
  • ssl/t1_lib.c:TLS 1.2 密鑰導出 tls1_generate_master_secret
  • ssl/ssl_lib.c:ssl_generate_master_secret 統一入口
  • crypto/hkdf/hkdf.c:TLS 1.3 HKDF 實現

總結

密鑰導出本質是:三個隨機數(種子)+ 協商套件(算法參數) → PRF/HKDF 擴展 → 切割分派。沒有神秘魔法,只有精密的密碼學工程。掌握這條主線,SSL/TLS 所有變體(DTLS、QUIC、mTLS)的密鑰邏輯皆可觸類旁通。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved