密碼學 - AES 結構



AES 由一系列連結操作組成,其中一些操作涉及用特定輸出替換輸入(替換),另一些操作則涉及重新排列位(置換)。

有趣的是,AES 所有計算都在位元組而不是位上進行。因此,AES 將明文塊的 128 位視為 16 個位元組。這 16 個位元組被排列成四列四行,以矩陣形式進行處理。

與 DES 不同,AES 中的輪數是可變的,並且取決於金鑰的長度。AES 對 128 位金鑰使用 10 輪,對 192 位金鑰使用 12 輪,對 256 位金鑰使用 14 輪。每一輪都使用不同的 128 位輪金鑰,該金鑰根據原始 AES 金鑰計算得出。

AES 結構示意圖如下所示:

AES Structure

密碼需要 128 位或 16 位元組的明文塊大小。金鑰長度可以是 16、24 或 32 位元組(128、192 或 256 位)。根據金鑰長度,演算法的名稱為 AES-128、AES-192 或 AES-256。

單個 128 位塊作為加密和解密過程的輸入。在 FIPS PUB 197 中,此塊表示為 4 * 4 的位元組方陣。在加密或解密的每個步驟中,此塊都會被複制到 State 陣列中,並更新該陣列。在最後階段之後,輸出矩陣包含當前狀態的副本。

加密過程

這裡,我們僅限於描述 AES 加密的典型輪次。每一輪都包含四個子過程。第一輪過程如下圖所示:

First Round Process

金鑰擴充套件

輪金鑰使用 Rijndael 的分組密碼排程表根據密碼金鑰計算得出。

預變換

這僅包含一個過程,即 Add_Round_Key。這裡,對每個資料位元組與輪金鑰的一個位元組執行 XOR 運算。

位元組替換 (SubBytes)

透過查詢設計中給出的固定表 (S-box) 來替換 16 個輸入位元組。結果是四行四列的矩陣。

行移位

矩陣的四行中的每一行都向左移動。任何“掉落”的條目都重新插入到行的右側。移位如下進行:

  • 第一行不移位。
  • 第二行向左移動一個(位元組)位置。
  • 第三行向左移動兩個位置。
  • 第四行向左移動三個位置。
  • 結果是一個新的矩陣,它包含相同的 16 個位元組,但彼此之間發生了移位。

列混合

現在使用特殊的數學函式轉換四位元組的每一列。此函式以一列的四個位元組作為輸入,並輸出四個全新的位元組,這些位元組替換原始列。結果是另一個新的矩陣,包含 16 個新位元組。需要注意的是,在最後一輪中不執行此步驟。

輪金鑰加

矩陣的 16 個位元組現在被視為 128 位,並與輪金鑰的 128 位進行異或。如果這是最後一輪,則輸出為密文。否則,將生成的 128 位解釋為 16 個位元組,然後我們開始另一輪類似的輪次。

解密過程

AES 密文的解密過程類似於加密過程,但順序相反。每一輪都包含四個以相反順序進行的過程:

  • 輪金鑰加
  • 列混合
  • 行移位
  • 位元組替換

由於每一輪中的子過程都是相反的,因此與 Feistel 密碼不同,加密和解密演算法需要單獨實現,儘管它們密切相關。

廣告