魏 林,劉 剛
(中國電子科技集團公司第七研究所,廣東廣州 510310)
高級加密標(biāo)準(zhǔn)(Advanced Encryption Standard,AES)為最常見的對稱加解密算法。對稱加解密算法也就是加密和解密使用相同的密鑰,具體加解密流程如圖1 所示。
圖1 AES 加解密算法
AES 加密過程涉及4 種操作,分別是字節(jié)替代、行移位、列混淆和輪密鑰加。解密過程分別為對應(yīng)的逆操作。由于每一步操作都是可逆的,按照相反的順序進行解密即可恢復(fù)明文。加解密中每輪的密鑰分別由原始密鑰擴展得到。算法中的16 字節(jié)明文、密文、輪密鑰都以一個4×4 的矩陣表示,我們稱其為基本數(shù)據(jù)單元,如圖2 所示。
圖2 AES 加解密算法基本數(shù)據(jù)單元
AES 加解密軟件部件如圖3 所示。其主要部件分為AES 加密模塊、AES 解密模塊、密鑰擴展模塊三部分。這三部分的實現(xiàn)是通過調(diào)用字節(jié)替代函數(shù)、行移位函數(shù)、列混淆函數(shù)和論密鑰加函數(shù)來實現(xiàn)。
圖3 AES 加解密軟件部件
AES 加解密算法中密鑰擴展是將16 字節(jié)的原始密鑰擴展為11 組16 字節(jié)的輪密鑰。加密過程中16 字節(jié)明文數(shù)據(jù)經(jīng)10 輪正變換后輸出16 字節(jié)密文數(shù)據(jù);解密過程中16 輪密文數(shù)據(jù)經(jīng)過11 輪反變換后輸出16字節(jié)明文數(shù)據(jù)。AES 加解密算法數(shù)據(jù)處理流程如圖4所示。
圖4 AES 加解密算法數(shù)據(jù)處理流程
字節(jié)替換的主要功能是通過S 盒完成一個字節(jié)到另一個字節(jié)的映射。其主要實現(xiàn)方法是查找表。字節(jié)的bit7-bit4 作為x 值(0 到f 區(qū)間),bit3-bit0 作為y 值(0到f 區(qū)間),x 列與y 行交叉處即為替換值。字節(jié)替換映射表如圖5 所示。字節(jié)的反替換是字節(jié)替換的逆操作,實現(xiàn)方法與字節(jié)替換相同。反S 盒替換表如圖6 所示。
圖5 S 盒替換表
圖6 反S 盒替換表
行位移的功能是實現(xiàn)一個4×4 矩陣內(nèi)部字節(jié)之間的移位替換。行位移的操作步驟是:①第一行保持不變。②第二行循環(huán)左移1 個字節(jié)。③第三行循環(huán)左移2 個字節(jié)。④第四行循環(huán)左移3 個字節(jié)。變換過程如圖7 所示。
圖7 行位移操作及示例
根據(jù)矩陣的乘法可知,在列混淆(利用域GF(28)上的算術(shù)特性的一個替代)的過程中,每個字節(jié)對應(yīng)的值只與該列的四個值有關(guān)系。此處的乘法和加法需要注意以下3 點。
(1)將某個字節(jié)所對應(yīng)的值乘以2,其結(jié)果就是將該值的二進制位左移1 位,如果該值的之高位為1,則還需要將移位后的結(jié)果異或00011011。
(2)乘法對加法滿足分配率,由此可得到乘以3、9、B、D 和E 的結(jié)果。
(3)此處的矩陣乘法與一般意義上的矩陣乘法有所不同,各個值在相加時使用的是模2 加法(異或運算)。因為如下。
說明兩個矩陣互逆,經(jīng)過一次逆向列混淆后即可恢復(fù)原文。列混淆操作及示例如圖8 所示。
圖8 列混淆操作及示例
加密過程中,每輪的輸入與輪密鑰異或一次(當(dāng)前分組和擴展密鑰的一部分進行按位異或);因為二進制數(shù)連續(xù)異或一個數(shù)的結(jié)果是不變的,所以在解密時再異或上一輪的密鑰即可恢復(fù)輸入的數(shù)據(jù)。
首位使用輪密鑰加的理由:若將其他不需要的密鑰放在首尾,在不使用密鑰的情況下就能完成逆過程,這就降低了算法的安全性。
加密原理:論密鑰加本身不難被破解,另外三個階段分別提供了混淆和非線性功能。但是字節(jié)替換、行位移、列混淆階段并沒有涉及密鑰,就他們自身而言,并沒有提供算法的安全性。如果在上述操作的基礎(chǔ)上進行一輪分組的異或加密(輪密鑰加),再對該分組進行混淆擴散(其他三階段),再接著進行下一輪異或加密,如此交替進行,這種方式既有效又安全。
密鑰擴展過程:將初始密鑰以列為主,轉(zhuǎn)換為4 個32bits 的字,分別記做W[0..3];按照如下方式依次求解W[i],其中i 是整數(shù)并且屬于[4,43]。
(1)將W[i]循環(huán)左移一個字節(jié)。
(2)分別對每個字節(jié)進行S 變換。
(3)變換后與32bits 常量(RC[i/4,0,0,0])進行異或。RC 是一個一維數(shù)組,其中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 快速加解密軟件系統(tǒng)環(huán)境圖如圖11 所示,AES 快速加解密模塊軟件運行與FPGA 中,可對128bit明密文數(shù)據(jù)進行加解密操作。軟件模塊的軟件接口為16 位可讀寫的數(shù)據(jù)總線及相應(yīng)的讀寫控制信號。
圖11 AES 快速加解密軟件系統(tǒng)環(huán)境
該軟件用VHDL 語言實現(xiàn),不依賴特定的FPGA器件,要求SliceLUT 資源>=6000Slice。
驗證模塊時序及加解密功能的仿真測試環(huán)境圖如圖12 所示,測試使用集成開發(fā)環(huán)境ISE14.7 及自帶的仿真軟件ISIM。通過編寫testbench 模擬讀寫控制,驗證加解密流程及數(shù)據(jù)。
圖12 仿真驗證環(huán)境
單元板驗證示意圖如圖13 所示,測試時用的主用FPGA 芯片為XILINX 的XC6SLX45 芯片。用單元板與PC 機連接,進行加解密功能驗證。明文數(shù)據(jù)包長度128bits×16 包,加密后密文數(shù)據(jù)可觀察數(shù)據(jù)離散性。
圖13 單元板驗證
加解密時間、密鑰展開用示波器測試測試點。加解密功能用PC 機發(fā)送明文數(shù)據(jù)包經(jīng)加密模塊后,再將密文數(shù)據(jù)發(fā)送至加解密模塊進行解密。
測試結(jié)果:①實現(xiàn)128bit 明文數(shù)據(jù)AES128 加密,將128bit 明文數(shù)據(jù)加密為128bit 密文數(shù)據(jù)。②實現(xiàn)128bit 密文數(shù)據(jù)AES128 解密,將128bit 密文數(shù)據(jù)解密為128bit 明文數(shù)據(jù)。
在系統(tǒng)時鐘頻率不小于38.4MHz 的條件下。①密鑰擴展時間≤10μs。②加密時間≤5μs。③解密時間≤5μs。