跳轉到

10.3 NIST 後量子標準與遷移#

概念說明#

後量子密碼學(Post-Quantum Cryptography, PQC):設計在經典電腦上執行、但可抵抗量子與經典攻擊者的密碼學。NIST 自 2016 年公開徵選、經全球密碼學界八年分析(82 個提案、多輪淘汰),於 2024 年 8 月公布首批正式標準(FIPS 203/204/205)。

三大標準一覽#

標準 原名 數學難題 用途
FIPS 203:ML-KEM CRYSTALS-Kyber 格上的 MLWE(模學習誤差) 金鑰封裝(KEM),取代 DH/ECDH
FIPS 204:ML-DSA CRYSTALS-Dilithium 格上的 MLWE/ML-SIS 數位簽章,取代 RSA/ECDSA
FIPS 205:SLH-DSA SPHINCS+ 僅依賴雜湊函數的安全性 簽章備援(保守、慢但假設最少)

另曾標準化 FN-DSA(FALCON)(簽章,較小但實作需浮點運算,適用受限場景)。

為什麼選格密碼? 格難題(如 MLWE:從「帶噪聲的線性方程組」還原祕密)至今沒有對應的 Shor 型量子演算法,且運算只需小矩陣乘法與取模——快、可平行、適合軟硬體實作。代價是金鑰與密文較大:ML-KEM-768 的公鑰約 1184 位元組(X25519 只有 32)、ML-DSA 簽章約 2420 位元組(Ed25519 只有 64)。

KEM 概念(取代 DH 的新範式)#

後量子時代的主選單從「金鑰交換」變成「金鑰封裝(Key Encapsulation Mechanism, KEM)」:

封裝: (ct, ss) = Encaps(pk)     用對方公鑰產生 共享祕密 ss + 密文 ct
解封: ss' = Decaps(sk, ct)      對方用私鑰還原同一 ss

與 DH 的差異:發起方一次算出 (ct, ss) 並送 ct,互動性更低、更適合非互動場景。

Python 實作#

# pip install kyber-py   (教學用 ML-KEM 實作;實務請用經 FIPS 驗證的庫)
from kyber_py.ml_kem import ML_KEM_768

# 1) 金鑰生成
pk, sk = ML_KEM_768.keygen()

# 2) Alice 封裝:得到共享祕密 ss 與密文 ct
ss_alice, ct = ML_KEM_768.encaps(pk)

# 3) Bob 解封
ss_bob = ML_KEM_768.decaps(sk, ct)
print("共享祕密一致:", ss_alice == ss_bob)
print("公鑰大小:", len(pk), "bytes(X25519 僅 32)")

# 4) 實務模式:KEM 輸出經 HKDF 再當 AES 金鑰
import hashlib, hmac as hm
def hkdf(ikm, salt=b"pqc-demo", info=b"aes-key"):
    prk = hm.new(salt, ikm, hashlib.sha256).digest()
    return hm.new(prk, info + b"\x01", hashlib.sha256).digest()
aes_key = hkdf(ss_alice)
print("派生 AES-256 金鑰:", aes_key.hex()[:32])

遷移策略:混合模式(hybrid)#

單一新演算法的信任需要時間累積(NTT 格與 Kyber 的「結構」仍是相對年輕的假設)。業界標準做法是混合:

共享祕密 = HKDF( X25519_ss || ML-KEM_ss )

兩個難題都必須被破解才能攻破——「舊的與新的」綁在一起。TLS 1.3 已有 X25519MLKEM768 等混合群標準(IETF),Chrome、Cloudflare、Signal 已在生產環境部署;X.509 與 SSH 的混合憑證/金鑰也在推進中。

安全性分析與遷移檢查表#

  • 遷移的優先序(依 Mosca 不等式與攻擊面):
  • 先做資產盤點:系統裡所有 RSA/ECC 出現在哪(TLS、JWT、SSH、代碼簽章、HSM、IoT 韌體)?
  • 對稱先行:AES-256、SHA-384——零風險、零爭議,今天就改。
  • 金鑰交換混合化:伺服器/客戶端都支援 ML-KEM 混合群。
  • 簽章遷移:憑證生命週期長的(根 CA、代碼簽章)最先換 ML-DSA/SLH-DSA。
  • 性能代價:混合握手增加約 1~2 KB 流量與少許 CPU——相對 TLS 應用的總成本可忽略;真正痛的是頻寬受限的 IoT 與憑證鏈傳輸。
  • 陷阱:自製「把公鑰雜湊一下就安全了」之類的土法混合毫無意義;遵循 IETF 規範。另注意 PQC 金鑰生成對隨機數品質要求同樣嚴格(格密碼的誤差取樣依賴金鑰熵)。
  • 長期展望:PQC 標準會持續演化(參數、實作會更新),密碼敏捷性(9.3 節)是遷移成敗的基礎設施前提。

練習#

  1. 執行上面的 ML-KEM 程式,記錄公鑰、密文、共享祕密的大小,與 X25519(32 bytes)做對照表。
  2. 實作混合金鑰派生:用 7.1 節的 X25519 共享祕密與 ML-KEM 共享祕密,串接後過 HKDF 得 AES 金鑰,並解釋為什麼「兩者皆破」才會失守。
  3. 調查題:查閱瀏覽器/CDN 供應商(Chrome、Cloudflare)關於後量子 TLS 的部署報告,寫 200 字總結:(a) 用了哪個混合群 (b) 對交握延遲的實測影響 (c) 遇到的相容性問題。