《現代加密技術 ─ 進階加密法AES》下篇

前言

在上一篇AES加密法的介紹中,我們認識到他的歷史及應用,也瀏覽在無線網路、電子商務或是軟硬體實現上的應用。而現在這一篇則是要來談談AES的元件以及其操作的原理,進一步探索該怎麼實現。

(延伸閱讀:《現代加密技術 ─ 進階加密法AES》上篇

AES加密流程

在介紹AES加密法怎麼運作之前,我們必須先了解他對於明文區塊和金鑰的長度的規範。在上篇中有提到的Rijndael演算法支援128、192或是256個位元的明文區塊,雖然原理相同,但為了方便使用,AES加密法每組只提供了128位元的區塊來存放明文資料。而金鑰長度就不一樣,由於有128、192、256三個位元長度可以選擇,因此密碼的系統有AES-128、AES-192及AES-256三種。下表可以看出三種不同長度金鑰所需要加密的輪數也有不同。

AES金鑰長度: 可分為幾個32bits區段分組長度: 128bits / 32bits加密重複次數: 6 + max(金鑰, 分組)
AES-1284410
AES-1926412
AES-2568414

那有明文跟金鑰,我們該怎麼加密呢?我們將他放在一個4*4的位元組矩陣(也稱為state)來運算,而state中的每一個元素就是明文中的一個byte,每一次加密就會進行以下四個步驟:

  1. AddRoundKey—state中的每個位元組都和金鑰做XOR運算,目的是為了混淆密文、明文和密鑰之間的關係。
  2. SubBytes—將每個位元組透過一個8位元的Substitution-box進行查找和替換輸入狀態的操作,以實現可逆的非線性變換。
  3. ShiftRows—這一步驟是讓state中每一行都偏移一些,用來提供此演算法擴散性
  4. MixColumns—將state與一個固定矩陣C相乘,使列也有擴散性。

以AES-128為例,我們已經知道總共會有10輪的加密次數,因此前面9輪其實都是重複進行上述的四個步驟,但在最後一輪中進行了特殊處理,少掉了MixColumns這一步驟,下圖簡單描述了AES-128加密的流程:

其他AES系統的做法也是依照此模型去實作,而因為加密過程有一定的規律,因此若要解密時只要照著步驟逆轉換就能得出原本的明文。或許這個加密法看似簡單、很容易就能理解,但其實它設計結構和密鑰的長度上已經達到可以保護機密資料的標準,甚至美國也已經批准將其運用在最高及國家安全機密的傳遞上。

結語

AES加密法這種被用在國家等級安全防護上的演算法,其實也可以運用在我們的日常生活中,很容易就能找到資源並利用。如果有興趣,不妨也自己嘗試使用看看這個簡單又有效的加密法吧!