魏 林,劉 剛
(中國電子科技集團公司第七研究所,廣東廣州 510310)
高級加密標準(Advanced Encryption Standard,AES)為最常見的對稱加解密算法。對稱加解密算法也就是加密和解密使用相同的密鑰,具體加解密流程如圖1 所示。

圖1 AES 加解密算法
AES 加密過程涉及4 種操作,分別是字節替代、行移位、列混淆和輪密鑰加。解密過程分別為對應的逆操作。由于每一步操作都是可逆的,按照相反的順序進行解密即可恢復明文。加解密中每輪的密鑰分別由原始密鑰擴展得到。算法中的16 字節明文、密文、輪密鑰都以一個4×4 的矩陣表示,我們稱其為基本數據單元,如圖2 所示。

圖2 AES 加解密算法基本數據單元
AES 加解密軟件部件如圖3 所示。其主要部件分為AES 加密模塊、AES 解密模塊、密鑰擴展模塊三部分。這三部分的實現是通過調用字節替代函數、行移位函數、列混淆函數和論密鑰加函數來實現。

圖3 AES 加解密軟件部件
AES 加解密算法中密鑰擴展是將16 字節的原始密鑰擴展為11 組16 字節的輪密鑰。加密過程中16 字節明文數據經10 輪正變換后輸出16 字節密文數據;解密過程中16 輪密文數據經過11 輪反變換后輸出16字節明文數據。AES 加解密算法數據處理流程如圖4所示。

圖4 AES 加解密算法數據處理流程
字節替換的主要功能是通過S 盒完成一個字節到另一個字節的映射。其主要實現方法是查找表。字節的bit7-bit4 作為x 值(0 到f 區間),bit3-bit0 作為y 值(0到f 區間),x 列與y 行交叉處即為替換值。字節替換映射表如圖5 所示。字節的反替換是字節替換的逆操作,實現方法與字節替換相同。反S 盒替換表如圖6 所示。

圖5 S 盒替換表

圖6 反S 盒替換表
行位移的功能是實現一個4×4 矩陣內部字節之間的移位替換。行位移的操作步驟是:①第一行保持不變。②第二行循環左移1 個字節。③第三行循環左移2 個字節。④第四行循環左移3 個字節。變換過程如圖7 所示。

圖7 行位移操作及示例
根據矩陣的乘法可知,在列混淆(利用域GF(28)上的算術特性的一個替代)的過程中,每個字節對應的值只與該列的四個值有關系。此處的乘法和加法需要注意以下3 點。
(1)將某個字節所對應的值乘以2,其結果就是將該值的二進制位左移1 位,如果該值的之高位為1,則還需要將移位后的結果異或00011011。
(2)乘法對加法滿足分配率,由此可得到乘以3、9、B、D 和E 的結果。
(3)此處的矩陣乘法與一般意義上的矩陣乘法有所不同,各個值在相加時使用的是模2 加法(異或運算)。因為如下。

說明兩個矩陣互逆,經過一次逆向列混淆后即可恢復原文。列混淆操作及示例如圖8 所示。

圖8 列混淆操作及示例
加密過程中,每輪的輸入與輪密鑰異或一次(當前分組和擴展密鑰的一部分進行按位異或);因為二進制數連續異或一個數的結果是不變的,所以在解密時再異或上一輪的密鑰即可恢復輸入的數據。
首位使用輪密鑰加的理由:若將其他不需要的密鑰放在首尾,在不使用密鑰的情況下就能完成逆過程,這就降低了算法的安全性。
加密原理:論密鑰加本身不難被破解,另外三個階段分別提供了混淆和非線性功能。但是字節替換、行位移、列混淆階段并沒有涉及密鑰,就他們自身而言,并沒有提供算法的安全性。如果在上述操作的基礎上進行一輪分組的異或加密(輪密鑰加),再對該分組進行混淆擴散(其他三階段),再接著進行下一輪異或加密,如此交替進行,這種方式既有效又安全。
密鑰擴展過程:將初始密鑰以列為主,轉換為4 個32bits 的字,分別記做W[0..3];按照如下方式依次求解W[i],其中i 是整數并且屬于[4,43]。
(1)將W[i]循環左移一個字節。
(2)分別對每個字節進行S 變換。
(3)變換后與32bits 常量(RC[i/4,0,0,0])進行異或。RC 是一個一維數組,其中RC={01,02,04,08,10,20,40,80,1b,36};輪密鑰第1 列求解如圖9 所示。

圖9 輪密鑰第1 列求解
(1)除了輪密鑰的第1 列使用上述方法求解,之后的2~4 列使用公式:W[i]=W[i-4]⊕W[i-1]求解,如圖10所示。

圖10 輪密鑰第2~4 列求解
AES 快速加解密軟件系統環境圖如圖11 所示,AES 快速加解密模塊軟件運行與FPGA 中,可對128bit明密文數據進行加解密操作。軟件模塊的軟件接口為16 位可讀寫的數據總線及相應的讀寫控制信號。

圖11 AES 快速加解密軟件系統環境
該軟件用VHDL 語言實現,不依賴特定的FPGA器件,要求SliceLUT 資源>=6000Slice。
驗證模塊時序及加解密功能的仿真測試環境圖如圖12 所示,測試使用集成開發環境ISE14.7 及自帶的仿真軟件ISIM。通過編寫testbench 模擬讀寫控制,驗證加解密流程及數據。

圖12 仿真驗證環境
單元板驗證示意圖如圖13 所示,測試時用的主用FPGA 芯片為XILINX 的XC6SLX45 芯片。用單元板與PC 機連接,進行加解密功能驗證。明文數據包長度128bits×16 包,加密后密文數據可觀察數據離散性。

圖13 單元板驗證
加解密時間、密鑰展開用示波器測試測試點。加解密功能用PC 機發送明文數據包經加密模塊后,再將密文數據發送至加解密模塊進行解密。
測試結果:①實現128bit 明文數據AES128 加密,將128bit 明文數據加密為128bit 密文數據。②實現128bit 密文數據AES128 解密,將128bit 密文數據解密為128bit 明文數據。
在系統時鐘頻率不小于38.4MHz 的條件下。①密鑰擴展時間≤10μs。②加密時間≤5μs。③解密時間≤5μs。