在現今資訊化的世界中,無論是個人還是企業,都越來越依賴網路服務來傳遞與儲存機密資訊。然而,伴隨而來的網路安全威脅卻也日益增長,黑客、惡意攻擊者無所不在,可能隨時竊取或竄改資料。為了確保敏感資訊的安全,加密技術扮演極為重要的角色。
其中,AES 是高級加密標準(Advanced Encryption Standard),亦可視為進階加密標準,自 2000 年代初被美國聯邦政府採用以來,已成為全球最普遍使用的對稱式區塊加密演算法之一。它除了能提供強大的安全保護,也兼顧了運算效率。
本文將深入探討 AES 的各項關鍵細節,包括其歷史沿革、核心原理、流程步驟、密鑰長度差異、常見攻擊與防禦方法,以及在軟硬體上的實際應用與優勢。文末將附上一份常見問題解答,並以表格形式呈現 AES 主要類型之差異,幫助讀者對此加密標準有更完整與清晰的理解。
一、AES 的背景與發展歷程
歷史沿革
在 20 世紀末期,當時被廣泛使用的對稱式加密算法「資料加密標準(DES)」因為金鑰長度過短(僅 56 位元)已被證實無法抵擋較強的暴力破解,安全性日漸不足。
為了找到新的加密方式,美國國家標準與技術研究院(NIST)在 1997 年 9 月 12 日公開徵集更高效、更安全的替代演算法,該競賽便是選拔新一代加密演算法的開端,也吸引了眾多密碼學家的參與。
經過多輪篩選,包含 MARS、RC6、Serpent、Twofish、Rijndael 等演算法入圍決賽。最後,Rijndael 在 2000 年 10 月成為最終勝出者,並在 2001 年 11 月 26 日被正式宣告成為新的高級 AES 加密算法,取代 DES。
Rijndael 之所以獲選,除了安全性突出外,亦因其設計簡潔、效能高、可實作性強,以及具備彈性(可支援多種加密金鑰長度)等優點。
Rijndael 與 AES 的關係
就嚴格定義而言,「AES」與「Rijndael」並非完全相同。AES 算法限定區塊長度為 128 位元(亦可視為 16 位元組),而密鑰長度為 128、192 或 256 位元;Rijndael 則可支援的區塊長度與金鑰長度更為彈性,可各自為 128、192 或 256 位元。
雖然在多數應用環境下兩者可以互通,但當須支援更大區塊長度時,才會特別提到完整的「Rijndael 演算法」。一般流通場合使用的「AES」通常指的是「Rijndael 演算法的特定限制版」。
二、AES 的核心原理
AES 屬於「對稱金鑰加密」中的「區塊加密演算法」,用於操作的加密和解密。它對資料進行分組(block)處理,每個分組大小為 128 位元,再配合指定長度的金鑰做多輪迭代變換。AES 的安全性與其迭代過程中的「非線性替換」、「列移位」、「欄混合」與「輪密鑰加」等步驟息息相關。
1. 區塊與金鑰長度
- 區塊大小:固定為 128 位元(16 位元組,Bytes)。
- 金鑰長度:有三種主要選擇:128 位元(16 Bytes)、192 位元(24 Bytes)和 256 位元(32 Bytes)。
- AES-128:10 輪加密迭代
- AES-192:12 輪加密迭代
- AES-256:14 輪加密迭代
在多數情況下,開發者需要在「更高效能」與「更高安全性」之間做取捨。AES-128 即使是金鑰長度最短的版本,安全等級也足以應付一般的應用需求。AES-192 與 AES-256 則提供更高的安全性,一般會用於政府、軍事或需要長時間保密(高強度安全)的應用。
2. 關鍵性數學背景:有限域與多項式運算
AES 的大部分計算都在名為 GF(28)GF(2^8) 的有限域中進行。在此有限域中,運算方式與整數加法、乘法有顯著不同,需用多項式做模運算。這些運算確保 AES 的「混淆(Confusion)」與「擴散(Diffusion)」能同時獲得較佳的平衡,增強演算法對差分與線性攻擊的抵抗力。
3. 加密流程的主要步驟
AES(以 128 位元金鑰為例)共需進行 10 輪迭代,在每一輪都會進行特定的轉換操作,唯獨最後一輪略有差異。以下為四大主要步驟概念:
AddRoundKey(輪密鑰加)
- 在此步驟,區塊矩陣中的每個位元組與對應的「子金鑰(Round Key)」做 XOR 運算(亦稱互斥或)。
- 每一輪的金鑰都是由「Rijndael 金鑰生成演算法」從主金鑰(Original Key)擴展而來。
SubBytes(字節替換)
- 透過一個 8 位元(Bytes)的查找表(S-Box)對每個位元組進行非線性替換。
- 這個替換函式主要依靠有限域中的逆元運算以及可逆的仿射變換,旨在打破明文與密文之間的可預測關係。
ShiftRows(行移位)
- 以 4×4 矩陣表示時,會對第二行至第四行的字節向左做循環位移(第一行不動):
- 第二行左移 1 個字節
- 第三行左移 2 個字節
- 第四行左移 3 個字節
- 此步驟加強資料在矩陣中的位置擴散效果。
MixColumns(欄混合)
- 以欄為單位透過矩陣乘法(在有限域下)混合四個字節,使得每個字節都會影響同一欄中的所有字節。
- 最後一輪加密(第 10 輪)會省略此步驟,改以 AddRoundKey 作結。
此四個步驟搭配金鑰生成與多輪疊代演算,使得加密過程產生了複雜且難以推算的密文。解密的過程則是這些步驟的逆操作(包含 Inverse SubBytes、Inverse ShiftRows、Inverse MixColumns 等)。
三、AES 與其他加密演算法的比較
1. AES vs. DES
金鑰長度:
- DES 僅有 56 位元金鑰,AES 可達 256 位元;前者易遭暴力破解,後者則更安全。
區塊大小:
- DES 區塊為 64 位元,AES 區塊固定為 128 位元。
安全性:
- DES 現今已幾乎被淘汰,由於所需運算資源已足以對其發動成功的暴力破解攻擊;AES 被公認具高度抗破譯能力。
2. AES vs. RSA
加密類型:
- AES 屬對稱式加密,需要一把共同的金鑰來加解密;
- RSA 屬非對稱式加密,需透過公鑰與私鑰配合。
使用場景:
- AES 適用於大量資料的快速加解密,如檔案保護、網路連線中資料的即時保護;
- RSA 一般用於金鑰交換或簽章,因為其運算相較 AES 更為緩慢。
安全性與效能:
- 同等安全強度下,RSA 金鑰需更長位元(例如 2048 或 4096 位元)才能與 AES-128/192/256 相匹敵。AES 在硬體與軟體環境中效率更高。
四、不同金鑰長度(AES-128、AES-192、AES-256)的差異
下表整理了三種常見 AES 密鑰長度的主要差異:
類型 | 金鑰長度 (位元) | 區塊大小 (位元) | 加密迴圈數 | 安全性等級 | 常見應用 |
---|---|---|---|---|---|
AES-128 | 128 (16 Bytes) | 128 | 10 | 高(足夠多數場景) | 一般企業內部文件保護、日常金融交易、行動應用程式等 |
AES-192 | 192 (24 Bytes) | 128 | 12 | 更高 | 金融機構、政府性或需更久保密期限的資料 |
AES-256 | 256 (32 Bytes) | 128 | 14 | 最高 | 軍事、政府機密、長期雲端儲存備份、安全需求極高的場合 |
- AES-128:常作為預設選項,理由是速度較快、金鑰管理成本相對低。
- AES-192:介於 128 與 256 之間,很多對安全較嚴謹但又擔心效能負擔太大的應用場景會選擇此一版本。
- AES-256:提供頂尖的安全保護,但因金鑰長度最長,處理效能方面會比 AES-128 稍慢。然而,在大多數現代化設備的運算力下,AES-256 與 AES-128 的速度差距已不如以往那麼明顯。它尤其適用於需超長期、極重要資訊的保護需求。
五、AES 的模式選擇與填充
AES 只是演算法的核心,若要在實務上應用,通常還需要搭配「運行模式」(Mode of Operation)。常見的模式有:
- ECB(Electronic Codebook):最簡單,但安全性相對較低,若明文資料具有重複區塊,密文也會顯現相同花樣。
- CBC(Cipher Block Chaining):將每一分組的加密結果與下一分組的明文做 XOR,有較好的混淆效果。
- CFB(Cipher Feedback)、OFB(Output Feedback):可將區塊加密轉成類似串流加密的方式。
- CTR(Counter):將分組當作計數器,實現高效率且可隨機存取加解密。
另外,由於 AES 以 128 位元為一個分組,因此若明文不是 128 位元的倍數,需要「填充(Padding)」。常見填充方式如下:
- NoPadding:明文長度恰好是區塊倍數時,不需填充;否則容易出錯。
- PKCS5Padding:最常見,每個補的位元組皆為「尚缺的位元組數量」。
- ISO10126Padding:類似 PKCS5Padding,但除了最後一個補字節指明缺少多少,其餘補字節隨機填充。
六、常見攻擊與防禦方法
AES 被廣泛信任的原因之一,在於它對於主流密碼攻擊(如差分攻擊、線性攻擊)的抵抗力相當強。然而,在實務上,攻擊者經常利用以下方式嘗試破壞 AES 加密:
暴力破解(Brute Force)
- 對 AES-128 而言,需要嘗試 21282^{128} 種可能金鑰,現今運算技術無法在合合理的時間內完成;AES-192 與 AES-256 則更困難。
- 防範:確保選用足夠長度的金鑰(AES-128 即足夠,若安全等級要求極高,可使用 192 或 256)。
旁道攻擊(Side-Channel Attack)
- 利用裝置在運行加密時產生的時間、功耗或電磁洩漏等來推測金鑰。
- 防範:
- 優化實作,使得快取取樣或時序資訊不易洩漏關鍵資訊。
- 在硬體設計上增加對功耗與電磁訊號的遮蔽或擾動處理。
- 避免使用會導致快取命中差異的大型查表(可被側信道攻擊者利用)。
弱金鑰或金鑰管理不當
- 若金鑰被攻擊者竊取,或金鑰管理過程中洩漏,則即使是最強的加密演算法也無法彌補。
- 防範:
- 實施嚴謹的金鑰管理策略,如定期更換金鑰、使用安全硬體模組(HSM)。
- 確保金鑰儲存位置經過嚴格存取控制,避免金鑰暴露於外部。
實作漏洞(Implementation Bugs)
- 漏洞可能來自程式碼錯誤、函式庫不安全使用或未修補的安全性缺陷。
- 防範:
- 採用社群維護度高、經過審計的加密函式庫。
- 定期更新軟體與韌體,修補已公開的安全弱點。
七、AES 在硬體與軟體實作上的優勢
硬體優化(AES-NI)
- 英特爾(Intel)和 AMD 等處理器製造商都已在 CPU 中內建 AES New Instructions(AES-NI),可顯著加速 AES 的加解密過程。
- 專門的硬體支援能讓 AES 運算達到極高的吞吐量,同時減少 CPU 資源消耗,提升整體系統效能與安全。
軟體實作
- 多數程式語言(如 C/C++、Java、Python、Go、Rust)都有穩定且經過優化的 AES 函式庫。
- 實際應用中,得依據設備資源和安全需求選擇合適的模式(CBC、CTR、GCM 等)與填充方式。
可擴充性
- AES 不僅應用於檔案或通訊加密,也可用於整碟加密(如 Windows BitLocker、macOS FileVault),或嵌入式裝置加密。
- 其多樣化的硬體、軟體實作,使 AES 在各種系統和平台上都能保持高效率與高安全性。
八、AES 的實際應用範例
無線通訊加密(WPA2、WPA3)
- 在 Wi-Fi 安全協定(如 WPA2、WPA3)中,AES 取代了早期較不安全的 RC4,保護使用者傳送的數據不被竊聽或竄改。
HTTPS / TLS
- 網站與使用者之間的連線透過 TLS(SSL)協定時,通常會在握手過程使用非對稱加密交換對稱金鑰,後續則使用 AES 進行高速加密,確保傳輸資料的隱私與完整性。
雲端儲存與檔案加密
- 眾多雲端服務如 AWS S3、Microsoft Azure、Google Drive,以及企業自行部署的雲端硬碟,都會利用 AES-256 來保護儲存於伺服器上的檔案。
- 使用者可以確保即使伺服器本身被入侵,若金鑰被妥善管理,檔案也不易被解密。
行動應用程式與即時通訊
- 常見通訊軟體(如 WhatsApp、Signal)端到端加密機制常以 AES 作為核心演算法。
- 金融付款與交易類 App 也多採用 AES,以確保交易資料與個人資訊的機密。
磁碟與檔案系統加密
- Windows BitLocker、macOS FileVault、Linux dm-crypt 等整碟加密機制,皆以 AES 作為加密骨幹。
- 可避免遺失裝置或硬碟時,資料被惡意取用。
常見問題(FAQ)
Q:AES 與 Rijndael 有何差異?
A:Rijndael 是由 Joan Daemen 與 Vincent Rijmen 設計的演算法,可支援更廣泛的區塊與金鑰長度(128、192、256 位元)自由組合。AES 則是 NIST 從 Rijndael 中挑選特定參數(128 位元區塊,128/192/256 位元金鑰)而成的標準版本。
Q:為什麼對稱式加密需要比非對稱加密更加注重金鑰管理?
A:對稱式加密(如 AES)加解密皆使用同一條金鑰,意味著若金鑰洩漏,攻擊者即可進行解密。因此,如何在雙方之間安全地分發或交換金鑰,並保護金鑰不被第三方獲取,是對稱加密中至關重要的課題。
Q:AES-128 與 AES-256 在現實應用中速度差很多嗎?
A:過去硬體效能較不足時,AES-256 確實比 AES-128 慢。但在現代 CPU 有 AES-NI 等指令集優化後,兩者間的速度差距已明顯縮小。除非是極大規模的密集加解密應用,多數用戶體驗不到太大差異。
Q:AES 真的無法被破解嗎?
A:就理論上,若想要對 AES-128 做暴力破解,需要嘗試 21282^{128} 種可能金鑰,這在人類可預見的時間範圍內難以達成。AES 也尚未出現有效的數學攻擊能在合理資源下破解。不過,系統中的其他弱點(如金鑰洩漏、實作錯誤、旁道攻擊)仍可能導致加密失效。
Q:AES 在量子計算時代是否依舊安全?
A:量子電腦對於對稱式加密所帶來的風險相較非對稱式加密要低得多。根據現有研究,量子演算法對對稱加密的破解效率提升不如對於 RSA、ECC 那般巨大。且若使用 AES-256,預期在可見未來仍能提供足夠的保護。不過,密碼學界也持續研究「後量子加密」以因應長期風險。
Q:在應用程式中,我應該使用哪一種 AES 填充模式?
A:常見且安全性較好的是 PKCS5Padding(若實作支援 ISO/IEC 10126 亦可)。NoPadding 則需要保證明文長度是區塊倍數,實作較麻煩,通常在特定情境才使用。
Q:除了 AES 的對稱加密外,為什麼還需要非對稱加密?
A:對稱加密在大量資料傳輸或儲存方面效能出眾,但金鑰的交換問題若僅依賴線上傳遞,會有被攔截的風險。非對稱加密(例如 RSA)可以用來安全地交換對稱金鑰,再用 AES 加密實際訊息,兩者結合起來稱「混合式加密系統」,可兼顧安全與效率。
Q:若要整體提升 AES 的安全,除了選用更長金鑰外還能做什麼?
A:
- 定期更換金鑰以縮短可破解的時間窗口。
- 正確選用安全的運作模式(如 CBC、GCM 等),以及嚴謹的隨機初始向量(IV)。
- 避免不安全的填充法和弱隨機數產生器。
- 確保整個系統從金鑰生成、儲存到軟體層實作都無漏洞。
總結
AES(Advanced Encryption Standard)是一種廣泛應用的對稱式區塊加密演算法,由美國國家標準與技術研究院(NIST)於 2001 年正式確立,以取代已被破解的 DES。AES 採用固定 128 位元區塊,並支援 128、192、256 位元的密鑰長度,分別進行 10、12、14 輪的迭代加密。
AES 加密過程包含四大核心步驟:輪密鑰加(AddRoundKey)、字節替換(SubBytes)、行移位(ShiftRows)及欄混合(MixColumns),透過有限域上的數學運算實現高度安全性。其強度足以抵禦暴力破解、差分與線性攻擊,同時擁有優異的運算效率,且在現代硬體(如 AES-NI 指令集)支援下,能以高速進行加解密。
AES 被廣泛應用於無線通訊(WPA2/WPA3)、網路安全(TLS/HTTPS)、雲端儲存、即時通訊、金融交易及磁碟加密(BitLocker、FileVault)等領域。面對量子計算的挑戰,AES-256 仍能提供足夠的安全性,並可透過安全金鑰管理、正確的運行模式(如 CBC、GCM)及硬體防護來進一步強化加密保護。
資料來源
- 進階加密標準 – 維基百科,自由的百科全書
- Day 20. 對稱式加密演算法 – 大家都愛用的 AES – iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
- 什么是AES加密?详解AES加密算法原理流程 – 知乎