AES算法的快速硬件設(shè)計(jì)與實(shí)現(xiàn)
信息安全是計(jì)算機(jī)科學(xué)技術(shù)的熱點(diǎn)研究領(lǐng)域,數(shù)據(jù)加密則是信息安全的重要手段。隨著可編程技術(shù)的飛速發(fā)展及高速集成電路的不斷出現(xiàn),采用FPGA實(shí)現(xiàn)加密算法已受到越來越廣泛的關(guān)注和重視[1][2]。與傳統(tǒng)的軟件加密方法相比,硬件加密的優(yōu)點(diǎn)是:(1)安全性好,不易被攻擊;(2)計(jì)算速度快,效率高;(3)成本低,性能可靠。加密系統(tǒng)中體現(xiàn)數(shù)據(jù)傳輸速度的一個(gè)重要性能指標(biāo)是數(shù)據(jù)吞吐量,計(jì)算公式為:(數(shù)據(jù)長度M/時(shí)鐘個(gè)數(shù)N)×時(shí)鐘頻率F。提高數(shù)據(jù)吞吐量是改善加密系統(tǒng)性能的關(guān)鍵,也是加密算法硬件實(shí)現(xiàn)技術(shù)的重要內(nèi)容。
本文引用地址:http://butianyuan.cn/article/85545.htmAES算法作為DES算法的替代者應(yīng)用非常廣泛,其硬件實(shí)現(xiàn)方法已有不少討論,主要是通過提高算法頻率來提高吞吐量。但是在實(shí)際運(yùn)行中,為了保證整個(gè)加密系統(tǒng)的穩(wěn)定性,通常全局時(shí)鐘頻率較低,不可能達(dá)到算法的仿真頻率,如PCI接口電路時(shí)鐘頻率只有33MHz,因此實(shí)際數(shù)據(jù)吞吐量仍然較低。本文根據(jù)AES算法的結(jié)構(gòu)特點(diǎn)及硬件系統(tǒng)的特點(diǎn),提出一種快速的AES算法IP核設(shè)計(jì)方法。該方法采用優(yōu)化設(shè)計(jì)輪函數(shù)和流水線技術(shù),在較低的系統(tǒng)時(shí)鐘頻率下,通過減少分組運(yùn)算時(shí)鐘數(shù)目來獲得更高的吞吐量和更快的傳輸速度。
1 AES算法
AES是美國國家標(biāo)準(zhǔn)與技術(shù)研究所(NIST)提出的高級加密標(biāo)準(zhǔn)[4]。2000 年10月,NIST宣布將比利時(shí)人Joan Daemen和Vicent Rijinen提交的Rijndael算法作為高級加密標(biāo)準(zhǔn)(AES)。該算法設(shè)計(jì)簡單,與公鑰密碼算法不同,沒有復(fù)雜的乘法運(yùn)算,易于實(shí)現(xiàn),靈活性強(qiáng),輪函數(shù)良好的并行特性有利于硬件設(shè)計(jì)與實(shí)現(xiàn)。AES算法是一種迭代型分組密碼,其分組長度和密鑰長度均可變,各自可以獨(dú)立指定為128bit、 192bit、256bit。本文主要討論分組長度和密鑰長度為128bit的情況。
AES算法是將輸入的明文(或密文)分成16個(gè)字節(jié),在第一個(gè)Add Round Keys變換后進(jìn)入10輪迭代。前9輪完全相同,依次經(jīng)過字節(jié)代替(Substitute Bytes)、行移位(Shift Rows)、列混合(Mix Columns)、輪密鑰加(Add Round Keys),最后一輪則跳過了Mix Column。解密過程與加密過程類似,但執(zhí)行順序與描述內(nèi)容有所不同,因此AES算法的加解密過程需要分別實(shí)現(xiàn)。圖1給出了AES算法的加解密過程。關(guān)于AES算法的詳細(xì)描述請參見參考文獻(xiàn)[4]。
2 AES算法優(yōu)化設(shè)計(jì)
2.1 硬件選擇
Cyclone器件是Altera公司推出的成本最低的SRAM工藝FPGA,容量為2 910~20 060個(gè)邏輯單元(LE)和多達(dá)288kbit的M4K memory block。每個(gè)LE都有一個(gè)四輸入的LUT查找表、可編程寄存器和具有進(jìn)位選擇能力的進(jìn)位鏈,可實(shí)現(xiàn)任何四輸入變量的函數(shù),能夠進(jìn)行大量邏輯運(yùn)算,非常適合作為加密算法的硬件載體。設(shè)計(jì)中所使用的開發(fā)工具是QuartusII4.2,FPGA芯片選擇Cyclone器件的EP1C12Q240C8,基于 Verilog HDL語言實(shí)現(xiàn)。
2.2 密鑰擴(kuò)展單元優(yōu)化設(shè)計(jì)
密鑰擴(kuò)展是將初始密鑰作為種子密鑰,經(jīng)過字節(jié)代換、字節(jié)移位、輪常數(shù)計(jì)算、字異或等過程,計(jì)算產(chǎn)生10輪迭代子密鑰。有文獻(xiàn)提出計(jì)算密鑰時(shí)密鑰擴(kuò)展和加密過程同步執(zhí)行,這樣做會節(jié)約 FPGA的存儲器資源。但筆者認(rèn)為在算法運(yùn)行過程中,擴(kuò)展密鑰進(jìn)程始終運(yùn)行會增加FPGA芯片的動態(tài)功耗。另外,AES算法解密運(yùn)算是從最后一輪子密鑰開始,只有擴(kuò)展出所有子密鑰才能啟動解密運(yùn)算,因此制約了解密過程的實(shí)現(xiàn)。通常情況下初始密鑰不會頻繁改變,加/解密多包數(shù)據(jù)時(shí)可共享密鑰擴(kuò)展結(jié)果,同時(shí)由于Cyclone器件存儲器資源豐富,為存放子密鑰提供了足夠的空間。因此本文采用更普遍的做法,將所有子密鑰擴(kuò)展后保存在RAM中,使用時(shí)依次從RAM 中讀取。這種方式不受加解密實(shí)現(xiàn)過程的限制,靈活性強(qiáng),非常適合于加密算法的FPGA實(shí)現(xiàn)。
從RAM中讀取子密鑰需要時(shí)間,為了避免算法第一個(gè)Add Round Key過程帶來的延時(shí),可以將第一組子密鑰(初始密鑰)和最后一組子密鑰(解密過程第一組子密鑰)在寫入RAM的同時(shí),分別保存在兩組寄存器中。如圖2所示,加/解密時(shí)直接利用寄存器結(jié)果進(jìn)入算法第一輪迭代,保證算法在10個(gè)時(shí)鐘內(nèi)完成10輪迭代,從而減少Add Round Key的時(shí)間。
保存密鑰雖然多占用了約256個(gè)寄存器資源,但這樣做更易于實(shí)現(xiàn)算法的流水線操作,對提高整體性能有很大幫助。
評論