Encryption

加密(Encryption)是將明文轉換為密文的過程,需要金鑰才能還原。

Block Cipher 區塊加密

區塊加密將資料分成固定大小的區塊(如 AES 為 16 bytes),逐塊進行加密。

加密模式比較

Mode of Operations: ECB / CBC / CFB / OFB / CTR / GCM

AES Mode是否需 Padding加密後長度特性解密是否需 Unpad是否需 IV是否支援 AAD加密後輸出組成備註
ECB✅ 需要Block Size 倍數(16n)✅ 需要❌ 不需❌ 不支援Ciphertext每個 block 獨立 → 同樣明文會產生同樣密文,容易遭模式分析攻擊,不建議使用
CBC✅ 需要Block Size 倍數(16n)✅ 需要✅ 需要❌ 不支援IV + Ciphertext初始 IV 為隨機生成,解密時需帶入,安全性比 ECB 高
CFB❌ 不需要原文等長(n)❌ 不需要✅ 需要❌ 不支援IV + Ciphertext適合逐字節串流加密,加密時使用上個密文塊作為輸入
OFB❌ 不需要原文等長(n)❌ 不需要✅ 需要❌ 不支援IV + Ciphertext類似 CFB,但使用加密後的 IV 為下一次輸入,穩定性較好
CTR❌ 不需要原文等長(n)❌ 不需要✅ 需要(Counter)❌ 不支援Nonce + Counter + Ciphertext將 block cipher 模擬成 stream cipher,支援非同步加解密
GCM❌ 不需要原文等長 + 16 bytes Tag❌ 不需要✅ 需要支援IV + Ciphertext + Tag加密與認證(AEAD),支援 AAD,最適合 API / JWT / HTTPS 等安全傳輸場景

名詞說明

名詞說明
IV(Initialization Vector)初始向量,用於保證同樣明文每次加密結果不同,通常為隨機產生
Padding為了湊齊 16 bytes,使用 PKCS#7 / ZeroPadding 等方式填充
Tag(驗證碼)GCM 模式下用來驗證密文與 AAD 是否被竄改,解密時若驗證失敗將拋錯
AAD(Additional Authenticated Data)附加驗證資料,不會被加密,但會被簽章驗證(如 API header、使用者 ID 等)
Nonce / CounterCTR / GCM 模式中的計數器(或隨機值),與 IV 角色類似,但可預測及遞增

模式選擇建議

應用場景建議使用的模式
靜態資料加密(不常變)CBC + PKCS7 padding(需管理 IV)
動態傳輸(API / Websocket)GCM(帶驗證 Tag,安全性高)
需要非同步加解密(多線程 / 快取)✅ CTR / GCM
硬體加速支援場景✅ GCM(幾乎所有現代硬體/SDK 都支援)
保密性需求但不怕重複密文可用 CFB / OFB

加密模式圖解

ECB(Electronic CodeBook Mode)

Plain Block 1      Plain Block 2      Plain Block 3
     |                  |                  |
     v                  v                  v
+----------+       +----------+       +----------+
| Encrypt  |       | Encrypt  |       | Encrypt  |
+----------+       +----------+       +----------+
     |                  |                  |
     v                  v                  v
Cipher Block 1     Cipher Block 2     Cipher Block 3

每個區塊獨立加密,相同明文產生相同密文,容易被分析。

CBC(Cipher Block Chaining Mode)

IV -----> XOR <---- Plain Block 1
           |
           v
      +----------+
      | Encrypt  |
      +----------+
           |
           v
     Cipher Block 1 -----> XOR <---- Plain Block 2
                            |
                            v
                       +----------+
                       | Encrypt  |
                       +----------+
                            |
                            v
                      Cipher Block 2 -----> XOR <---- Plain Block 3
                                             |
                                             v
                                        +----------+
                                        | Encrypt  |
                                        +----------+
                                             |
                                             v
                                       Cipher Block 3

每個區塊的加密依賴前一個密文區塊,需要 IV 來初始化。

Stream Cipher 串流加密

串流加密逐位元或逐字節處理資料,適合即時加密場景。CTR 模式可將 Block Cipher 模擬成 Stream Cipher。

MAC(Message Authentication Code)

訊息驗證碼用於確認訊息的完整性和來源真實性。

  • HMAC:使用雜湊函數(如 HMAC-SHA256)
  • CMAC:使用區塊加密(如 AES-CMAC)

GCM 模式內建 MAC 功能,提供 AEAD(Authenticated Encryption with Associated Data)。

E2EE(End-to-End Encryption)

端對端加密確保只有通訊雙方可以讀取訊息內容,中間的伺服器無法解密。

常見應用:

  • 即時通訊(Signal、WhatsApp)
  • 安全郵件(ProtonMail)
  • 視訊會議(Zoom E2EE)