Figure 2 S-盒( Sbox )
當 AES的構造函數(constructor)被調用時,用於加密方法的兩個表被初始化。第一個表是代替盒稱為S-盒。它是一個16×16的矩陣。S-盒的前五行和前五列如 Figure 2 所示。在幕後,加密例程獲取該密鑰數組並用它來生成一個名為w[]的密鑰調度表,Figure 3 所示。
Figure 3 密鑰調度表(Key Sched)
w[] 最初的 Nk (6) 行被作為種子,用原始密鑰值(0x00 到0x17)。剩余行從種子密鑰來產生。變量 Nk 代表以 32 位字為單位的種子密鑰長度。稍後我分析 AES 實現時你將清楚地看到 w[] 是怎樣產生的。 關鍵是這裡現在有許多密鑰使用而不只是一個。這些新的密鑰被稱為輪密鑰(round keys)以將它們與原始種子密鑰區別開來。
Figure 4 State (態)數組
AES 加密例程開始是拷貝 16 字節的輸入數組到一個名為State (態)的 4×4 字節矩陣中。(參見 Figure 4)。AES 加密算法 取名為Cipher,它操作 State[],其過程描述的偽代碼參見 Figure 5 。
在規范中,加密算法實現的一個預備的處理步驟被稱為AddRoundKey(輪密鑰加)。AddRoundKey 用密鑰調度表中的前四行對 State 矩陣實行一個字節一個字節的異或(XOR)操作,並用輪密鑰表 w[c,r] 異或 輸入 State[r,c]。
舉個例子,如果 State 矩陣的第一行保存的字節是{ 00, 44, 88, cc },第一列密鑰調度表是{ 00, 04, 08, 0c },那麼新的 State[0,2] 值是用 w[2,0]( 0x08 或 0x80 )異或 State[0,2](0x88)的結果:
1 0 0 0 1 0 0 0
0 0 0 0 1 0 0 0 XOR
1 0 0 0 0 0 0 0
AES 算法的主循環對 State 矩陣執行四個不同的操作,在規范中被稱為SubBytes(字節替換)、ShiftRows(行位移變換)、MixColumns(列混合變換)和AddRoundKey。除了每次循環 AddRoundKey 都被調用並使用密鑰調度表的下面四行外,AddRoundKey 與預備處理步驟中的 AddRoundKey 相同。SubBytes 例程是一個代替操作,它將 State 矩陣中的每個字節替換成一個由 Sbox 決定的新字節。比如,如果 State[0,1]的值是 0x40 如果你想找到它的代替者,你取 State[0,1]的值 (0x40) 並讓 x 等於左邊的數字(4)並讓 y 等於右邊的數字(0)。然後你用 x和y 作為索引 進到 Sbox 表中尋找代替值,如 Figure 2 所示。
ShiftRows 是一個置換操作,它將 State 矩陣中的字節向左旋轉。Figure 6 示范了 ShiftRows 如何操作 State[]。State的第0行被向左旋轉0個位置,State的第1行被向左旋轉1個位置,State的第2行被向左旋轉2個位置,而 State的第3行被向左旋轉3個 位置。