後量子密碼學與憑證發展

Post-Quantum Cryptography and Certificate Evolution

隨著量子運算技術的快速發展,現有的公開金鑰密碼學面臨前所未有的威脅。後量子密碼學(Post-Quantum Cryptography, PQC)旨在開發能夠抵禦量子電腦攻擊的加密演算法,確保未來的數位通訊安全。本文將深入探討後量子密碼學的發展現況與憑證遷移策略。

量子運算對現有密碼學的威脅

量子電腦的運算能力

量子電腦利用量子力學原理,透過量子位元(Qubit)的疊加態和糾纏態,實現傳統電腦無法達成的平行運算能力。這對現有密碼學系統構成嚴重威脅:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
傳統電腦 vs 量子電腦

+---------------------------+---------------------------+
|       傳統電腦            |       量子電腦            |
+---------------------------+---------------------------+
| 使用位元 (0 或 1)         | 使用量子位元 (疊加態)     |
| 循序運算                  | 量子平行運算              |
| RSA-2048 破解需數十億年   | RSA-2048 破解僅需數小時   |
| 確定性運算                | 機率性運算                |
+---------------------------+---------------------------+

Shor 演算法的威脅

1994 年,Peter Shor 提出的量子演算法能夠在多項式時間內分解大整數和求解離散對數問題,這直接威脅到:

  • RSA:基於大整數分解困難性
  • ECDSA/ECDH:基於橢圓曲線離散對數問題
  • DSA:基於有限域離散對數問題
  • Diffie-Hellman:基於離散對數問題
1
2
3
4
5
6
Shor 演算法複雜度比較:

演算法        | 傳統電腦複雜度    | 量子電腦複雜度
--------------|-------------------|------------------
整數分解      | O(e^(n^(1/3)))   | O(n^3)
離散對數      | O(e^(n^(1/2)))   | O(n^3)

Grover 演算法的影響

Grover 演算法對對稱式加密和雜湊函數造成威脅,能將暴力搜尋的複雜度從 O(N) 降低到 O(√N):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Grover 演算法影響:

+------------------+------------------+------------------+
| 演算法           | 傳統安全強度     | 量子後安全強度   |
+------------------+------------------+------------------+
| AES-128          | 128 位元         | 64 位元          |
| AES-256          | 256 位元         | 128 位元         |
| SHA-256          | 256 位元         | 128 位元         |
| SHA-512          | 512 位元         | 256 位元         |
+------------------+------------------+------------------+

「先儲存,後解密」攻擊

即使大規模量子電腦尚未問世,攻擊者可能正在收集加密通訊資料,等待未來量子電腦成熟後進行解密:

1
2
3
4
5
6
7
Store Now, Decrypt Later (SNDL) 攻擊時間軸:

2024          2030          2035          2040
  |             |             |             |
  v             v             v             v
收集加密資料 → 持續儲存 → 量子電腦成熟 → 解密歷史資料
              (敏感資料仍有價值)

NIST PQC 標準化進程

標準化時間軸

美國國家標準與技術研究院(NIST)自 2016 年啟動後量子密碼學標準化計畫:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
NIST PQC 標準化進程:

2016    啟動徵集計畫
  |
2017    收到 82 份提案
  |
2019    第二輪篩選(26 個候選)
  |
2020    第三輪篩選(15 個候選)
  |
2022    宣布首批標準化演算法
  |
2024    發布正式標準 FIPS 203, 204, 205
  |
2025+   持續評估額外演算法

首批標準化演算法

NIST 於 2024 年 8 月發布三項後量子密碼學標準:

FIPS 標準演算法名稱原始名稱用途
FIPS 203ML-KEMCRYSTALS-Kyber金鑰封裝機制
FIPS 204ML-DSACRYSTALS-Dilithium數位簽章
FIPS 205SLH-DSASPHINCS+數位簽章(雜湊基)

金鑰封裝機制(KEM)vs 金鑰交換

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
傳統金鑰交換 (DH/ECDH):
+--------+                      +--------+
| Alice  |  ---(g^a mod p)--->  |  Bob   |
|        |  <--(g^b mod p)---   |        |
+--------+                      +--------+
         共同計算 g^(ab) mod p

後量子金鑰封裝 (KEM):
+--------+                      +--------+
| Alice  |  ---[公開金鑰]--->   |  Bob   |
|        |  <--[密文,共享密鑰]- |        |
+--------+                      +--------+
         Bob 封裝密鑰,Alice 解封裝

格基密碼學(Lattice-based Cryptography)

基本原理

格基密碼學是目前最受重視的後量子密碼學方向,其安全性基於格(Lattice)上的困難問題:

1
2
3
4
5
6
7
8
9
格 (Lattice) 的視覺化:

    ●     ●     ●     ●     ●
      ●     ●     ●     ●     ●
    ●     ●     ●     ●     ●
      ●     ●     ●     ●     ●
    ●     ●  [目標]  ●     ●

找到最接近目標點的格點是困難問題

核心困難問題

格基密碼學依賴以下困難問題:

  1. 最短向量問題(SVP, Shortest Vector Problem)

    • 在高維格中找到最短的非零向量
  2. 最近向量問題(CVP, Closest Vector Problem)

    • 給定目標點,找到格中最接近的向量
  3. 帶錯誤學習問題(LWE, Learning With Errors)

    • 給定 (A, b = As + e),難以恢復秘密向量 s
1
2
3
4
5
6
LWE 問題示意:

A (公開矩陣)  ×  s (秘密向量)  +  e (錯誤向量)  =  b (公開向量)
    m × n           n × 1             m × 1          m × 1

已知 A 和 b,求 s 是困難的(因為錯誤向量 e 的存在)

ML-KEM(CRYSTALS-Kyber)

ML-KEM 是 NIST 選定的金鑰封裝標準,基於模組格(Module Lattice)上的 LWE 問題:

1
2
3
4
5
6
7
8
9
# 使用 liboqs 測試 ML-KEM
# 安裝 liboqs
git clone --depth 1 https://github.com/open-quantum-safe/liboqs.git
cd liboqs && mkdir build && cd build
cmake -GNinja ..
ninja

# 執行 KEM 測試
./tests/test_kem ML-KEM-768

ML-KEM 參數比較:

變體安全等級公鑰大小密文大小共享密鑰
ML-KEM-512NIST Level 1800 bytes768 bytes32 bytes
ML-KEM-768NIST Level 31,184 bytes1,088 bytes32 bytes
ML-KEM-1024NIST Level 51,568 bytes1,568 bytes32 bytes

ML-DSA(CRYSTALS-Dilithium)

ML-DSA 是基於模組格的數位簽章演算法:

1
2
# 使用 liboqs 進行簽章測試
./tests/test_sig ML-DSA-65

ML-DSA 參數比較:

變體安全等級公鑰大小簽章大小
ML-DSA-44NIST Level 21,312 bytes2,420 bytes
ML-DSA-65NIST Level 31,952 bytes3,293 bytes
ML-DSA-87NIST Level 52,592 bytes4,595 bytes

雜湊基密碼學(Hash-based Cryptography)

基本原理

雜湊基密碼學的安全性僅依賴於雜湊函數的性質,具有高度的保守性和長期安全性:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
雜湊基簽章的核心概念:

        私鑰(多個一次性密鑰)
              |
              v
+----------------------------------+
|  OTS₁  |  OTS₂  |  ...  |  OTSₙ |  一次性簽章金鑰
+----------------------------------+
              |
              v
         Merkle 樹
              |
              v
          根雜湊值(公鑰)

SLH-DSA(SPHINCS+)

SLH-DSA 是 NIST 標準化的雜湊基數位簽章演算法,提供無狀態(Stateless)操作:

1
2
3
4
5
6
7
8
9
SPHINCS+ 結構:

                    [根節點]
                   /        \
             [中間層]      [中間層]
            /    \          /    \
         [葉子] [葉子]   [葉子] [葉子]
           |       |        |       |
        FORS樹  FORS樹   FORS樹  FORS樹

SLH-DSA 參數變體:

變體安全等級公鑰大小簽章大小特性
SLH-DSA-SHA2-128sLevel 132 bytes7,856 bytes小簽章
SLH-DSA-SHA2-128fLevel 132 bytes17,088 bytes快速
SLH-DSA-SHA2-192sLevel 348 bytes16,224 bytes小簽章
SLH-DSA-SHA2-256sLevel 564 bytes29,792 bytes小簽章

XMSS 和 LMS(有狀態雜湊基簽章)

RFC 8391(XMSS)和 RFC 8554(LMS)定義了有狀態的雜湊基簽章:

1
2
3
4
5
# 注意:有狀態簽章需要嚴格的狀態管理
# 每個金鑰只能使用有限次數,必須保持狀態同步

# XMSS 金鑰產生(概念示例)
# 樹高度 h=10 允許 2^10 = 1024 次簽章
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
有狀態 vs 無狀態雜湊基簽章:

+------------------+------------------+------------------+
| 特性             | XMSS/LMS         | SPHINCS+         |
+------------------+------------------+------------------+
| 狀態管理         | 需要             | 不需要           |
| 簽章次數限制     | 有限             | 無限             |
| 簽章大小         | 較小             | 較大             |
| 實作複雜度       | 高               | 低               |
| 適用場景         | 固定設備         | 一般用途         |
+------------------+------------------+------------------+

混合憑證方案

為什麼需要混合方案?

在過渡期間,混合憑證結合傳統演算法和後量子演算法,提供雙重保護:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
混合憑證策略:

+------------------------------------------+
|              混合憑證                     |
+------------------------------------------+
|  傳統演算法(如 ECDSA)                  |
|  - 提供與現有系統的相容性                |
|  - 經過長期實戰驗證                      |
+------------------------------------------+
|  後量子演算法(如 ML-DSA)               |
|  - 抵禦未來量子攻擊                      |
|  - 提供長期安全保證                      |
+------------------------------------------+

安全性 = MAX(傳統安全性, 後量子安全性)

混合金鑰交換

TLS 1.3 中的混合金鑰交換示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
TLS 1.3 混合金鑰交換:

Client                                     Server
   |                                          |
   |  ClientHello                             |
   |  - supported_groups: X25519+ML-KEM-768   |
   |  - key_share: X25519_share + ML-KEM_pk   |
   |  ---------------------------------------->|
   |                                          |
   |  ServerHello                             |
   |  - key_share: X25519_share + ML-KEM_ct   |
   |<---------------------------------------- |
   |                                          |

共享密鑰 = KDF(X25519_shared || ML-KEM_shared)

混合憑證格式

X.509 混合憑證的實作方式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
方式一:複合金鑰(Composite Key)
+------------------------------------------+
| X.509 Certificate                        |
| Subject Public Key:                      |
|   Composite(ECDSA-P256 + ML-DSA-65)     |
| Signature:                               |
|   Composite(ECDSA-P256 + ML-DSA-65)     |
+------------------------------------------+

方式二:雙憑證(Dual Certificate)
+------------------+  +------------------+
| 傳統憑證         |  | PQC 憑證         |
| (ECDSA-P256)     |  | (ML-DSA-65)      |
+------------------+  +------------------+
        |                      |
        +------連結------+

使用 OQS-OpenSSL 產生混合憑證

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 安裝 OQS Provider for OpenSSL 3.x
git clone https://github.com/open-quantum-safe/oqs-provider.git
cd oqs-provider
mkdir build && cd build
cmake -DOPENSSL_ROOT_DIR=/usr/local/ssl ..
make && sudo make install

# 設定 OpenSSL 使用 OQS Provider
export OPENSSL_MODULES=/usr/local/lib/ossl-modules

# 產生混合金鑰對(p256_mlkem768)
openssl genpkey -provider oqsprovider -provider default \
    -algorithm p256_mlkem768 -out hybrid_key.pem

# 產生混合憑證簽發請求
openssl req -new -provider oqsprovider -provider default \
    -key hybrid_key.pem -out hybrid.csr \
    -subj "/CN=hybrid-test.example.com"

# 自簽混合憑證
openssl x509 -req -provider oqsprovider -provider default \
    -in hybrid.csr -signkey hybrid_key.pem \
    -out hybrid_cert.pem -days 365

OpenSSL 3.0 PQC 支援

OQS Provider 架構

OpenSSL 3.0 引入的 Provider 機制允許模組化地加入後量子演算法支援:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
OpenSSL 3.0 Provider 架構:

+------------------------------------------+
|              應用程式                     |
+------------------------------------------+
|              OpenSSL 3.x                 |
+------------------------------------------+
|  default   |  legacy  |  oqsprovider    |
|  provider  |  provider|  (PQC 支援)      |
+------------+----------+------------------+
     |            |              |
  傳統演算法   舊版演算法    後量子演算法

設定 OQS Provider

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# openssl.cnf 設定範例
cat >> /etc/ssl/openssl.cnf << 'EOF'
[openssl_init]
providers = provider_sect

[provider_sect]
default = default_sect
oqsprovider = oqsprovider_sect

[default_sect]
activate = 1

[oqsprovider_sect]
activate = 1
module = /usr/local/lib/ossl-modules/oqsprovider.so
EOF

支援的演算法列表

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 列出 OQS Provider 支援的演算法
openssl list -provider oqsprovider -signature-algorithms
openssl list -provider oqsprovider -kem-algorithms

# 常用的 PQC 演算法:
# 簽章:ml_dsa_44, ml_dsa_65, ml_dsa_87, sphincssha2128fsimple
# KEM:ml_kem_512, ml_kem_768, ml_kem_1024

# 混合演算法:
# p256_mlkem768, p384_mlkem1024, x25519_mlkem768
# p256_mldsa44, p384_mldsa65, p521_mldsa87

PQC 金鑰與憑證操作

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 產生 ML-DSA 金鑰
openssl genpkey -provider oqsprovider -provider default \
    -algorithm ml_dsa_65 -out ml_dsa_private.pem

# 提取公鑰
openssl pkey -provider oqsprovider -provider default \
    -in ml_dsa_private.pem -pubout -out ml_dsa_public.pem

# 產生 CSR
openssl req -new -provider oqsprovider -provider default \
    -key ml_dsa_private.pem -out ml_dsa.csr \
    -subj "/C=TW/O=Example Corp/CN=pqc.example.com"

# 檢視金鑰資訊
openssl pkey -provider oqsprovider -provider default \
    -in ml_dsa_private.pem -text -noout

PQC TLS 測試

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 使用 OQS-OpenSSL 啟動 TLS 伺服器
openssl s_server -provider oqsprovider -provider default \
    -cert hybrid_cert.pem -key hybrid_key.pem \
    -www -port 4433 \
    -groups p256_mlkem768

# 連接測試
openssl s_client -provider oqsprovider -provider default \
    -connect localhost:4433 \
    -groups p256_mlkem768

# 驗證使用的金鑰交換演算法
openssl s_client -provider oqsprovider -provider default \
    -connect localhost:4433 -groups p256_mlkem768 2>&1 | \
    grep "Server Temp Key"

遷移策略與時程

風險評估框架

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
PQC 遷移優先級評估:

高優先級(立即行動):
┌─────────────────────────────────────────┐
│ • 長期機密資料(政府、金融、醫療)      │
│ • 程式碼簽章和軟體更新機制              │
│ • 根憑證和長效憑證                      │
│ • 關鍵基礎設施控制系統                  │
└─────────────────────────────────────────┘

中優先級(2-3年內):
┌─────────────────────────────────────────┐
│ • 企業 VPN 和遠端存取                   │
│ • 電子郵件加密(S/MIME)                │
│ • 資料庫連線加密                        │
│ • API 和微服務通訊                      │
└─────────────────────────────────────────┘

低優先級(中長期規劃):
┌─────────────────────────────────────────┐
│ • 短期 Session 加密                     │
│ • 非敏感資料傳輸                        │
│ • 內部測試環境                          │
└─────────────────────────────────────────┘

遷移路線圖

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
企業 PQC 遷移時程建議:

2024-2025(準備階段)
├── 完成密碼學資產盤點
├── 評估系統 PQC 相容性
├── 建立 PQC 測試環境
└── 培訓技術團隊

2025-2027(混合部署階段)
├── 部署混合憑證和金鑰交換
├── 更新 PKI 基礎設施
├── 開始程式碼簽章遷移
└── 監控效能影響

2027-2030(完全遷移階段)
├── 逐步淘汰純傳統加密
├── 完成所有系統 PQC 遷移
├── 更新合規性文件
└── 持續監控新威脅

2030+(維護階段)
├── 持續評估新 PQC 標準
├── 應對新發現的攻擊
└── 跟進密碼學敏捷性最佳實踐

密碼學敏捷性(Crypto Agility)

建立具備密碼學敏捷性的系統架構:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
密碼學敏捷性架構:

+------------------------------------------+
|              應用程式層                   |
+------------------------------------------+
|         密碼學抽象層(Crypto API)        |
+------------------------------------------+
|  傳統演算法  |  PQC 演算法  |  混合演算法  |
+-------------+-------------+--------------+
|              金鑰管理系統                 |
+------------------------------------------+
|              HSM / 密碼模組               |
+------------------------------------------+

設計原則:
1. 演算法可配置,不硬編碼
2. 支援多演算法並存
3. 簡化演算法更換流程
4. 自動化憑證更新

密碼學資產盤點腳本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash
# pqc_inventory.sh - 密碼學資產盤點腳本

echo "=== 憑證盤點 ==="
find /etc/ssl /etc/pki -name "*.pem" -o -name "*.crt" 2>/dev/null | while read cert; do
    if openssl x509 -in "$cert" -noout 2>/dev/null; then
        algo=$(openssl x509 -in "$cert" -noout -text | grep "Public Key Algorithm" | head -1)
        expire=$(openssl x509 -in "$cert" -noout -enddate)
        echo "憑證: $cert"
        echo "  演算法: $algo"
        echo "  到期日: $expire"
        echo ""
    fi
done

echo "=== TLS 設定檢查 ==="
# 檢查 Nginx 設定
if [ -f /etc/nginx/nginx.conf ]; then
    echo "Nginx SSL 協定設定:"
    grep -r "ssl_protocols\|ssl_ciphers" /etc/nginx/ 2>/dev/null
fi

# 檢查 Apache 設定
if [ -f /etc/apache2/apache2.conf ]; then
    echo "Apache SSL 協定設定:"
    grep -r "SSLProtocol\|SSLCipherSuite" /etc/apache2/ 2>/dev/null
fi

echo "=== OpenSSH 設定 ==="
if [ -f /etc/ssh/sshd_config ]; then
    echo "SSH 金鑰交換演算法:"
    grep "KexAlgorithms\|HostKeyAlgorithms" /etc/ssh/sshd_config
fi

產業實作現況

主要雲端服務商支援

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
雲端服務商 PQC 支援現況(2025):

+------------------+----------------------------------+
| 服務商           | PQC 支援狀態                     |
+------------------+----------------------------------+
| AWS              | • AWS KMS 支援混合金鑰           |
|                  | • CloudFront PQC 預覽            |
|                  | • s2n-tls 支援 ML-KEM            |
+------------------+----------------------------------+
| Google Cloud     | • Cloud KMS PQC 金鑰             |
|                  | • BoringSSL 混合 TLS             |
|                  | • Certificate Authority PQC      |
+------------------+----------------------------------+
| Microsoft Azure  | • Azure Key Vault PQC 預覽       |
|                  | • Azure TLS 混合支援             |
+------------------+----------------------------------+
| Cloudflare       | • 邊緣節點 PQC 支援              |
|                  | • ML-KEM 金鑰交換                |
+------------------+----------------------------------+

瀏覽器支援

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
瀏覽器 PQC 支援現況:

Chrome / Edge(Chromium 基礎):
- Chrome 116+: 支援 X25519Kyber768
- Chrome 124+: 預設啟用混合金鑰交換

Firefox:
- Firefox 124+: 支援混合 PQC 金鑰交換
- 可透過 about:config 設定

Safari:
- macOS 14+: 開始測試 PQC 支援

硬體安全模組(HSM)支援

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
HSM 廠商 PQC 支援:

+------------------+----------------------------------+
| 廠商             | PQC 支援                         |
+------------------+----------------------------------+
| Thales Luna      | • Luna 7+ 支援 PQC              |
|                  | • ML-DSA, ML-KEM 實作           |
+------------------+----------------------------------+
| AWS CloudHSM     | • 混合金鑰支援                   |
|                  | • FIPS 140-3 認證進行中          |
+------------------+----------------------------------+
| Utimaco          | • CryptoServer PQC              |
|                  | • 支援 NIST 標準演算法          |
+------------------+----------------------------------+
| Entrust nShield  | • PQC 模組開發中                 |
+------------------+----------------------------------+

憑證授權機構(CA)進展

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
主要 CA PQC 準備狀態:

DigiCert:
├── 提供混合憑證測試
├── PQC-ready PKI 平台
└── 產業導入指引

Sectigo:
├── 混合 TLS 憑證支援
└── 程式碼簽章 PQC 準備

Let's Encrypt:
├── 研究 PQC 整合方案
└── ACME 協定 PQC 擴展討論

GlobalSign:
├── 企業 PQC 諮詢服務
└── 混合憑證試驗計畫

程式語言與框架支援

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# Python - 使用 liboqs-python
pip install liboqs-python

# Python 範例
python3 << 'EOF'
import oqs

# ML-KEM 金鑰封裝
kem = oqs.KeyEncapsulation("ML-KEM-768")
public_key = kem.generate_keypair()
ciphertext, shared_secret_server = kem.encap_secret(public_key)
shared_secret_client = kem.decap_secret(ciphertext)

print(f"共享密鑰長度: {len(shared_secret_client)} bytes")
print(f"公鑰大小: {len(public_key)} bytes")
print(f"密文大小: {len(ciphertext)} bytes")

# ML-DSA 數位簽章
sig = oqs.Signature("ML-DSA-65")
public_key = sig.generate_keypair()
message = b"Hello, Post-Quantum World!"
signature = sig.sign(message)
is_valid = sig.verify(message, signature, public_key)

print(f"簽章大小: {len(signature)} bytes")
print(f"簽章驗證: {'成功' if is_valid else '失敗'}")
EOF
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// Go - 使用 cloudflare/circl
package main

import (
    "fmt"
    "github.com/cloudflare/circl/kem/mlkem/mlkem768"
    "github.com/cloudflare/circl/sign/mldsa/mldsa65"
)

func main() {
    // ML-KEM-768
    pk, sk, _ := mlkem768.GenerateKeyPair(nil)
    ct, ss1, _ := mlkem768.Encapsulate(pk)
    ss2, _ := mlkem768.Decapsulate(ct, sk)

    fmt.Printf("ML-KEM-768 公鑰大小: %d bytes\n", len(pk))
    fmt.Printf("密文大小: %d bytes\n", len(ct))
    fmt.Printf("共享密鑰匹配: %v\n", ss1 == ss2)

    // ML-DSA-65
    pubKey, privKey, _ := mldsa65.GenerateKey(nil)
    msg := []byte("Hello, Post-Quantum World!")
    sig := mldsa65.Sign(privKey, msg)
    valid := mldsa65.Verify(pubKey, msg, sig)

    fmt.Printf("ML-DSA-65 簽章大小: %d bytes\n", len(sig))
    fmt.Printf("簽章驗證: %v\n", valid)
}

效能考量

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
PQC 演算法效能比較(相對於 ECDSA P-256):

+------------------+----------+----------+----------+
| 操作             | ECDSA    | ML-DSA-65| SLH-DSA  |
|                  | P-256    |          | SHA2-128s|
+------------------+----------+----------+----------+
| 金鑰產生         | 1x       | 0.5x     | 100x     |
| 簽章             | 1x       | 2x       | 50x      |
| 驗證             | 1x       | 0.5x     | 5x       |
| 公鑰大小         | 64 B     | 1,952 B  | 32 B     |
| 簽章大小         | 72 B     | 3,293 B  | 7,856 B  |
+------------------+----------+----------+----------+

網路影響:
- 憑證鏈傳輸增加 5-10 KB
- TLS 握手時間增加 5-20%
- 建議優化憑證鏈和快取策略

總結

後量子密碼學正在從研究走向標準化和實際部署。隨著 NIST FIPS 203、204、205 標準的發布,企業應開始制定遷移計畫,採用混合方案確保平滑過渡。

關鍵要點:

  • 量子威脅迫在眉睫:即使大規模量子電腦尚未出現,「先儲存後解密」攻擊已是現實威脅
  • NIST 標準已發布:ML-KEM、ML-DSA、SLH-DSA 提供標準化的後量子演算法
  • 格基密碼學為主流:基於 LWE 問題的演算法在效能和安全性間取得平衡
  • 混合方案是過渡策略:結合傳統和後量子演算法,確保向後相容和向前安全
  • 密碼學敏捷性至關重要:設計可快速更換演算法的系統架構
  • 產業支援正在成熟:主要雲端服務商、瀏覽器和 HSM 廠商已開始支援 PQC

參考資料

comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy