返回文章列表

進階加密標準 (AES)

15 分鐘
資訊安全網路

進階加密標準 (AES)

AES (Advanced Encryption Standard,進階加密標準) 是目前最廣泛使用的對稱加密演算法,用來保護各種敏感資料,從 HTTPS 連線到磁碟加密都有它的身影。


什麼是 AES

AES 是一種對稱加密演算法,加密和解密使用同一把金鑰。

它由比利時密碼學家 Joan Daemen 和 Vincent Rijmen 設計,原名 Rijndael,2001 年被美國國家標準與技術研究院 (NIST) 選為聯邦加密標準,正式命名為 AES。

AES 是分組加密 (Block Cipher),將資料切成固定大小的區塊 (128 位元),逐塊加密。


對稱加密 vs 非對稱加密

對稱加密非對稱加密
金鑰加密和解密用同一把金鑰公鑰加密,私鑰解密
速度
適合場景大量資料加密金鑰交換、數位簽章
代表演算法AES、ChaCha20RSA、ECC

實務上,HTTPS 先用非對稱加密交換一把對稱金鑰,之後的資料傳輸改用 AES,兼顧安全性和效能。


AES 的金鑰長度

AES 支援三種金鑰長度:

金鑰長度加密輪數安全性
AES-12810 輪足夠安全,大多數場景使用
AES-19212 輪較高安全性
AES-25614 輪最高安全性,用於高度敏感資料

以現有的計算能力,暴力破解 AES-128 在實際上是不可能的。


AES 的加密流程

AES 將 128 位元的資料塊排列成一個 4×4 的位元組矩陣 (稱為 State),然後對這個矩陣重複執行四個步驟,完成一輪加密。

SubBytes (位元組替換)

將 State 中每個位元組,透過一個固定的 S-Box (替換盒) 換成另一個值:

Text
b[i][j] = S(a[i][j])

S-Box 是一個 256 個項目的查表,每個輸入值對應唯一的輸出值。這一步引入非線性,讓加密結果無法用簡單的線性代數方式反推。

Text
輸入矩陣 (State)            輸出矩陣
┌────┬────┬────┬────┐      ┌────┬────┬────┬────┐
│ a  │ b  │ c  │ d  │      │S(a)│S(b)│S(c)│S(d)│
├────┼────┼────┼────┤  →   ├────┼────┼────┼────┤
│ e  │ f  │ g  │ h  │      │S(e)│S(f)│S(g)│S(h)│
├────┼────┼────┼────┤      ├────┼────┼────┼────┤
│ i  │ j  │ k  │ l  │      │S(i)│S(j)│S(k)│S(l)│
├────┼────┼────┼────┤      ├────┼────┼────┼────┤
│ m  │ n  │ o  │ p  │      │S(m)│S(n)│S(o)│S(p)│
└────┴────┴────┴────┘      └────┴────┴────┴────┘

ShiftRows (行位移)

將 State 矩陣的每一行向左循環位移:

Text
第 0 行:不移動          [a0, a1, a2, a3] → [a0, a1, a2, a3]
第 1 行:左移 1 位       [b0, b1, b2, b3] → [b1, b2, b3, b0]
第 2 行:左移 2 位       [c0, c1, c2, c3] → [c2, c3, c0, c1]
第 3 行:左移 3 位       [d0, d1, d2, d3] → [d3, d0, d1, d2]

這讓資料在矩陣的各欄之間交錯混合,確保後續的 MixColumns 能影響整個矩陣的所有位置。

MixColumns (列混合)

對 State 矩陣的每一欄進行數學運算,將每欄的四個位元組混合成新的四個位元組。

運算基於 GF(2⁸) (伽羅瓦域) 的有限域算術,每欄的四個元素乘以固定矩陣:

Text
[2 3 1 1]   [a]   [a']
[1 2 3 1] × [b] = [b']
[1 1 2 3]   [c]   [c']
[3 1 1 2]   [d]   [d']

這一步讓每個輸入位元組影響整欄的輸出,產生強烈的雪崩效應 (Avalanche Effect) —— 輸入一個位元的改變,輸出會有大量位元跟著改變。

AddRoundKey (輪金鑰加)

將 State 矩陣與這一輪的子金鑰 (Round Key) 進行逐位元組的 XOR 運算:

Text
State ⊕ RoundKey = 新的 State

子金鑰由原始金鑰透過 Rijndael 金鑰擴展演算法 (Key Schedule) 派生,每一輪使用不同的子金鑰。這是金鑰真正影響加密結果的步驟。


AES 的運作模式

AES 一次處理 128 位元的資料塊,當資料超過一個區塊時,需要決定如何處理多個區塊。

ECB (Electronic Codebook)

每個區塊獨立加密:

問題:相同的明文區塊產生相同的密文區塊,資料的規律性在加密後仍然可見。ECB 有嚴重的安全問題,不應使用。

CBC (Cipher Block Chaining)

每個區塊加密前,先與前一個密文區塊進行 XOR:

需要隨機的 IV 確保相同明文每次產生不同密文。比 ECB 安全,但加密必須循序進行,且不提供完整性驗證。

GCM (Galois/Counter Mode)

目前最推薦的模式,同時提供加密和完整性驗證 (AEAD):加密可平行化、速度快,並產生 Authentication Tag 供接收方驗證資料未被篡改。TLS 1.3 使用 AES-GCM 作為主要加密套件。


AES 的應用場景

網路傳輸:HTTPS (TLS) 使用 AES-GCM 加密傳輸資料。

磁碟加密:macOS FileVault、Windows BitLocker、Linux LUKS 都使用 AES。

檔案加密:ZIP、7z 的加密功能和 VeraCrypt 等工具使用 AES。

通訊應用:Signal、WhatsApp 等 E2EE 應用使用 AES 加密訊息內容。

密碼管理器:1Password、Bitwarden 使用 AES-256 加密儲存的密碼。


總結

  • AES 是對稱加密演算法,加密和解密使用同一把金鑰
  • 加密流程由四個步驟組成:SubBytes (非線性替換)、ShiftRows (行位移)、MixColumns (列混合)、AddRoundKey (混入金鑰),重複執行多輪
  • 支援 128、192、256 位元三種金鑰長度,AES-256 安全性最高
  • 運作模式:ECB 不安全不應使用,CBC 安全但循序執行,GCM 推薦使用
  • 廣泛應用於 HTTPS、磁碟加密、通訊應用、密碼管理器等