先把 AES 想成一套固定的加密工法
這篇先不急著背 SubBytes、ShiftRows 或 MixColumns。你可以先把 AES 想成一間規矩很嚴的加密工廠:資料進來後,會被切成固定大小的區塊,照著一輪一輪的工序處理,最後變成外人看不懂的密文。
每張漫畫都在回答一個很實際的問題:資料為什麼要被打散、混合、加上金鑰?為什麼同一套流程能讓加密結果很難被猜出?看懂這條工序,再回頭看演算法名詞會輕鬆很多。
讀的時候先抓住三件事:AES 保護大量資料,金鑰決定誰能解開,PQC 改變的是公開金鑰世界,不是把 AES 這種對稱式加密整個換掉。
AES 是現代資訊安全裡最重要、最常見的對稱式加密演算法之一。手機、瀏覽器、VPN、Wi-Fi、SSD、雲端服務、韌體保護、secure boot 與硬體加速器,都可能在不同層級使用 AES 或 AES-based mode 來保護資料。
這篇小教室不追求一次背完所有公式,而是先建立工程直覺:AES 是一個 block cipher,固定處理 128-bit 的資料區塊;它把 16 bytes 排成 4x4 state,透過多個 round 反覆做替換、移位、混合與金鑰 XOR,最後把 plaintext 變成 ciphertext。想看 RTL 與硬體架構細節,可接著閱讀 AES-128 RTL 初學者圖解。
1. 為什麼需要 AES?
加密要解決的第一個問題很直覺:如果資料以 plaintext 形式傳輸或儲存,攻擊者只要攔截或讀取到資料,就能直接理解內容;如果加密太弱,攻擊者可能用分析、暴力嘗試或已知弱點把它打開。好的加密則讓資料即使被攔截,也呈現為沒有正確 key 就無法有效理解的 ciphertext。
AES 是現代對稱式加密的代表。所謂對稱式,是指加密與解密使用同一把 secret key,或至少使用由同一把 secret key 派生出的 key material。這和 RSA、ECC、PQC 這類 public-key cryptography 的使用情境不同:public-key 常用於 key exchange、authentication、digital signature;AES 則非常適合大量資料的高速加密。
AES 是 block cipher,標準 block size 是 128-bit,也就是 16 bytes。AES-128、AES-192、AES-256 的差異在 key length,不在 block size。這點很重要:AES-256 不是一次處理 256-bit block,而是用 256-bit key 來保護 128-bit block。
圖中提到 Enigma,是為了說明加密在歷史上的重要性,而不是說 Enigma 和 AES 的設計相同。Enigma 是機械式密碼機,AES 則是公開、標準化、可分析、可驗證、可高效實作的現代 block cipher。
對硬體工程師來說,AES 的好處是結構規律。它有固定 state、固定 round、明確 key schedule 與公開 test vector,因此適合做 RTL、formal check、side-channel hardening、FIPS 驗證與 crypto accelerator。
2. AES 如何運作:Key Expansion、SubBytes、ShiftRows
AES 先把 128-bit block 排成 16 bytes 的 state,通常以 4x4 matrix 來理解。初學者最容易在 row/column、byte order、state mapping 上出錯,所以在記公式之前,先把 state 當成真正的資料結構看懂。
Key Expansion 會把原始 key 展開成每個 round 需要的 round key。以 AES-128 為例,會有初始 AddRoundKey,加上 10 個 round 所需的 key material。硬體實作時,可以一次預先展開 round keys,也可以 on-the-fly 產生;前者可能節省 latency,後者可能節省面積,取捨取決於吞吐量、功耗與控制流程。
SubBytes 是 byte-level substitution。每個 byte 都會經過 S-box lookup,被替換成另一個 byte。它是 AES 的主要非線性來源,負責讓輸入與輸出之間不是簡單線性關係。
ShiftRows 則是把 state 的每一列依不同 offset 往左移。它本身不改變 byte value,而是改變 byte 的位置,讓後面的 MixColumns 能把資料跨欄擴散。可以把 SubBytes 想成「改值」,ShiftRows 想成「換位置」。
如果把這些步驟映射到 RTL,通常會看到 key schedule、S-box、state register、row shifter 與控制 FSM。設計乾淨的 AES core,第一步不是急著寫 code,而是把 state layout、round counter、valid/ready timing 與 round-key timing 定清楚。
3. MixColumns:AES 最容易卡住的一步
MixColumns 常讓初學者覺得難,因為它看起來像矩陣乘法,但又不是一般整數乘法。它一次處理 state 的一個 column,也就是 4 bytes;每個 column 會乘上一個固定 4x4 matrix,輸出新的 4 bytes。
這裡的 02、03、01 不是普通十進位係數,而是 AES finite field GF(2^8) 裡的常數。實作上,這些乘法可以用 XOR、shift 與條件 reduction 完成,不一定需要一般乘法器。這也是 AES 能在硬體裡做得很快、很規律的原因之一。
MixColumns 的目的叫 diffusion。也就是讓一個 byte 的影響擴散到多個 byte。SubBytes 提供 nonlinearity,ShiftRows 把 byte 移到不同位置,MixColumns 再把同一欄的 4 bytes 混合。多個 round 重複後,輸入的一點改變就會擴散到整個 state。
真正理解 MixColumns 時,不需要先背完每個 GF(2^8) 細節。先抓住三件事:它只處理一欄、矩陣固定、目的在擴散。等這三件事穩了,再去看 02 × d4、03 × bf 這類 finite-field 運算,就比較不會被公式嚇到。
4. AddRoundKey 與 AES round 結構
AddRoundKey 是把 state 和 round key 做 XOR。看起來它是最簡單的一步,但它是把 secret key material 注入 state 的關鍵。沒有 AddRoundKey,前面的替換、移位、混合就只是公開的資料變換;有了 round key,整個 transformation 才和 secret key 綁在一起。
AES-128 的高階流程可以簡化成:
Round 0 = AddRoundKey
Round 1~9 = SubBytes + ShiftRows + MixColumns + AddRoundKey
Round 10 = SubBytes + ShiftRows + AddRoundKey
最後一輪沒有 MixColumns,這不是省略或圖畫簡化,而是 AES 標準的一部分。做 RTL 或測試向量對照時,這個 round schedule 一定要非常清楚,否則常會發生最後一輪結果不對。
解密不是猜 plaintext,而是用對應的 inverse operations 和 round keys,把 ciphertext 依正確順序還原。這也說明 AES 是 keyed permutation:有正確 key 與正確流程時可逆;沒有 key 時,ciphertext 對攻擊者應該像無意義資料。
硬體設計上,AddRoundKey 通常 gate cost 不高,因為主要是 XOR。真正要取捨的是 round key 什麼時候可用、state register 放在哪裡、S-box 如何實作、MixColumns 是否 combinational、以及整個 core 是 iterative、unrolled 還是 pipelined。
5. PQC 時代,AES 還重要嗎?
答案是:重要,而且會繼續重要。PQC 主要解決的是 public-key cryptography 在量子電腦威脅下的問題,例如 key encapsulation、key exchange、digital signature。AES 屬於 symmetric encryption,主要任務是保護大量資料。
實際系統裡,常見分工是:public-key 或 PQC 機制用來建立 session key、驗證身份、保護金鑰交換;AES 則用 session key 高速加密大量資料。TLS、VPN、儲存加密、韌體保護與安全通訊都常見這種分層。
量子電腦對對稱式密碼的影響,和對 RSA/ECC 這類 public-key 演算法不同。一般會用更保守的 key length,例如在高安全需求場景使用 AES-256。這也是為什麼 PQC 不是「取代 AES」,而是和 AES 搭配,補上 public-key 那一側的抗量子安全。
對 IC、firmware 與安全產品團隊來說,AES 仍然是必修基本功。它會出現在 secure boot、storage encryption、authenticated encryption mode、key wrapping、crypto accelerator、FIPS 140-3 module、測試向量與安全認證文件裡。
重點整理
AES 不是一個黑盒子,而是一個標準化、可分析、可實作的 block cipher。理解 AES 時,可以先抓住這條主線:
- AES 固定處理 128-bit block,也就是 16 bytes。
- 16 bytes 會排成 4x4 state。
- Key Expansion 把原始 key 展開成 round keys。
- SubBytes 提供非線性替換。
- ShiftRows 改變 byte 位置。
- MixColumns 在每一欄內做 diffusion。
- AddRoundKey 用 XOR 把 round key 注入 state。
- PQC 不會取代 AES;PQC 多半處理 public-key 任務,AES 繼續處理大量資料加密。
明天的安全系統不會在「AES 或 PQC」之間二選一,而是用 PQC 保護 key establishment 與 signature,用 AES 高效率保護大量資料。
References
- NIST FIPS 197: Advanced Encryption Standard:AES 的官方標準文件。NIST 在 2023 年更新文件格式與說明,但沒有改變 AES 演算法本身。這份文件適合用來確認 block size、key length、round transformation、S-box、MixColumns 與 test vector 等細節。
- NIST SP 800-38A: Block Cipher Modes of Operation:說明 block cipher 常見 confidentiality modes,例如 ECB、CBC、CFB、OFB、CTR。AES 本身只定義 block cipher;實際系統要安全使用 AES,通常還需要正確的 mode、IV/nonce 管理與 authentication 設計。
- NIST Post-Quantum Cryptography FIPS approval:NIST 於 2024 年核准 FIPS 203、FIPS 204、FIPS 205 的官方公告。這個 reference 可用來理解 PQC 主要影響 public-key key establishment 與 digital signature,而不是把 AES 這類對稱式加密淘汰掉。
- NIST PQC Standardization Process:NIST 對 post-quantum cryptography 標準化流程的整理頁。適合用來追蹤 PQC 標準、遷移時程與演算法定位,並對照本文所說的「PQC + AES」系統分工。
學習指南
AES 到 RTL
先備知識
- 二進位資料與 XOR
我學會了什麼
- 辨識 AES State 與 Round 結構
- 說明替代、排列、混合與加鑰
- 理解 AES 與 PQC 的不同角色