劉波濤,李 浪,2,賀位位,余孝忠,2,杜國權
(1.衡陽師范學院 計算機科學系,湖南 衡陽 421002;2.聚落文化遺產數字化技術與應用湖南省重點實驗室,湖南 衡陽 421002)
物聯網越來越深入到人們生產生活中,其安全引起了大家高度關注。2007年密碼學者提出了適合資源約束的輕量級密碼算法PRESENT[1],2011年超輕量級密碼算法LED也被提出[2],二個密碼算法主要是為資源受限的智能卡加密研發的。如果攻擊者知道智能卡加密運算為某一具體密碼算法,則容易采取相應攻擊手段進行攻擊,如果把二種密碼算法重構在一起,隨機選擇某一密碼算法進行運算,由于攻擊者不知道具體運算的加密算法,則安全性相應提高。重構計算作為一種新興的計算模式,在許多方面得到了深度應用。重構密碼算法是利用可重構計算技術,能夠根據需要靈活配置以實現不同的密碼算法,從而提高安全性。
重構算法是密碼安全的一個重要研究方向,近年來,許多研究機構都致力于密碼算法的可重構研究[6-8]。2010年,文獻[6]設計了一種 DES、AES和SMS4密碼算法的高效可重構,文獻[7]給出了一種AES和Camellia算法的可重構硬件實現,兩者都未給出可重構算法的具體優化方案。本文實現了一種LED-PRESENT算法重構,研究了優化實現,并對其性能進行了實驗驗證。
LED密碼算法是一種具有SP結構的分組迭代密碼算法,其明文長度為64-bit,密鑰長度為64-bit或128-bit,對應輪數分別為32輪和48輪,分別用LED-64和LED-128表示。圖1為LED-64加密運算過程。

圖1 LED-64加密運算結構
LED加密過程:
(1)明文和密鑰異或:輪密鑰相加(AddRound-Key);(2)進行4輪運算,每個輪包括常數變換(AddConstant)、S 盒 變 換 (SubCell)、行 變 換(ShiftRow)、列混合變換(MixColumnsSerial)4個運算;(3)將中間結果和密鑰k異或,轉到第(2)步,重復執行8次;(4)輸出密文C。
PRESENT密碼算法采用SP結構的輕量級密碼算法,其明文長度為64-bit,密鑰長度為80-bit或128-bit,記為 PRESENT-80和 PRESENT-128,加密變換需要31輪迭代運算。圖2為PRESENT-80加密運算過程。
由圖2可知,PRESENT有輪密鑰加函數(AddRoundKey)、S盒替換(Sboxlayer)、層置換(pLayer)、密鑰擴展(Update)4個模塊運算。

圖2 PRESENT-80加密運算結構
在兩個加密算法中都需要進行S盒變換(Sub-Cell)、密鑰加(AddRoundKey)運算,基于此,對LED與PRESENT密碼算法S盒變換(SubCell)和密鑰加(AddRoundkey)進行重構實現。考慮到所要消耗的面積,還需對LED-PRESENT算法進行FPGA優化實現。
1)在LED有限域部分,用assign連續賦值方式賦值,使得完成一次有限域計算不需要時鐘延時,也不需要額外申請寄存器。下面為具體優化實現的VerilogHDL代碼:

2)在PRESENT主控制模塊中,通過計數器控制重復調用PresentRound模塊,可使整個算法實現的面積大為減少。具體VerilogHDL實現代碼如下:

以密鑰長為64-bit的LED和80-bit的PRESENT為例,結合流程圖給出具體的操作過程。
1)明文加密前由系統隨機生成一個1-bit隨機數:switch.
2)switch為1時,選擇進行 PRESENT-80加密;為0時,選擇進行LED-64加密,運算結構如圖3。

圖3 LED-64與PRESENT-80重構結構流程
明文64-bit,密鑰80-bit進行加密的具體參數如下表示,其中state表示明文,key表示密鑰。
state=64’h0000_0000_0000_0000;
key=80’h0000_0000_0000_0000_0000;
switch=$random()%2;
3)整個算法采用Verilog HDL硬件描述語言實現,重構后的算法內部運算流程如圖4,具體運算過程如下:

圖4 重構算法內部運算流程
(1)初始化明文state、密鑰key,系統隨機生成switch;
(2)取密鑰的前64-bit與明文進行AddRound-Key運算,把運算的輪數r設置為0;
(3)1:如果switch等于1,運算 UpdataKey模塊;否則key的值保持不變;
2:state依次完成如下模塊運算:(第二個參數相當于使能信號)
2.1AddConstant(state,!switch);
2.2SubCell(state);
2.3ShiftRow(state,!switch);
2.4MixCloumnSerial(state,!switch);
2.5Exchange(state,switch).
3:如果switch等于1或者 (r%4==3),則進行AddRoundKey運算;
4:更新r的值:r=r+1;
(4)跳到(3),重復執行31次;
(5)如果switch等于1,直接輸出密文,否則完成LED-64加密算法的最后一輪加密:
AddConstant(state,1);
SubCell(state);
ShiftRow(state,1);
MixCloumnSerial(state,1).
(6)輸出密文,運算結束。
由于switch取值為0和1兩種,當取值為1時,即選擇執行的是PRESENT-80密碼算法,由于!switch=0,故3)中的2.1、2.3和2.4是不參與運算的。同理,當switch=0時,執行的是LED-64密碼算法,3)中的2.5模塊是不參與運算的。
對Verilog HDL語言實現的LED-PRESENT重構算法進行Modelsim 6.1f仿真,整個算法都是用連續賦值(assign)語句實現,時鐘信號控制計算器更新,重構運算分別需要32個時鐘周期和31個時鐘周期。仿真截圖如圖5。

圖5 重構算法LED-PRESENT仿真截圖
從圖5的實驗結果中可以得到重構算法正確。
對LED-64和PRESENT-80密碼算法,進行了FPGA實現,通過ISE13.2綜合下載進行性能分析,FPGA 型號為 Xilinx Virtex-5LX50T。圖6是LED-64算法下載到FPGA上的實驗數據截圖。圖7是PRESENT-80算法下載到FPGA上的實驗數據截圖。圖8和圖9是LED-PRESENT算法重構后下載到FPGA上的實驗數據截圖。

圖6 LED-64算法面積測試數據

圖7 PRESENT-80算法面積測試數據

圖8 重構算法LED-PRESENT面積測試數據

圖9 LED-PRESENT加密運算頻率
根據 實 驗 結 果,LED-64、PRESENT-80 以 及LED-PRESENT重構算法的性能對比分析如表1。

表1 性能對比
從表1可以得知,LED-64與PRESENT-80算法單獨實現面積和為:10222+10265=20487Slices,而重構后LED-PRESENT算法面積為10815Slices,其中Slices是FPGA中面積單元,可以得出重構后的LED-PRESENT比分別實現面積上少了9672個Slices。在加密性能上,分別實現時最高加密速率為198.912Mb/s,而重構密碼系統的吞吐率為:

可知,由于使用了優化方法實現,復雜的重構實現并未使系統加密速率降低。
通過對LED與PRESENT密碼算法進行重構優化,使得其在單一芯片上資源最優化實現,從而可以適應復雜環境下高安全的加密應用。密碼算法重構使得加密運算具有靈活性,從而增強了密碼系統的安全。因為密碼攻擊需要確切知道正在執行的具體密碼算法,所以在一定程度上可以抵抗密碼攻擊。
[1]Bogdanov A,Knudsen L R,Leander G,et al.PRESENT:an ultra-lightweight block cipher//Proceddings of the 2007International Workshop on Cryptographic Hardware and Embedded Systems.Vienna,Austria.2007:450-466.
[2]Guo J,Peyrin T,Poschmann A et al.The LED block cipher//Proceddings of the 2011International Workshop of Cryptographic Hardware and Embedded Systems.Nara,Japan.2011:326-341.
[3]李瑋,谷大武,趙辰,等.物聯網環境下LED輕量級密碼算法的安全性分析[J].計算機學報,2012,35(3):434-445.
[4]吳克輝,趙新杰,王韜,等.PRESENT密碼代數故障攻擊[J],通信學報,2012,33(8):85-92.
[5]李浪,李仁發,鄒祎等.PRESENT密碼硬件語言實現及其優化研究[J].小型微型計算機系統,2013,34(10):2272-2275.
[6]李文君.DES、AES和SMS4密碼算法的高效可重構實現研究[D].鄭州:解放軍信息工程大學,2010.
[7]楊宏志,韓文報,李光松.AES和Camellia算法的可重構硬件實現[J].計算機工程,2010,36(10):18-20.
[8]高娜娜,王沁,李占才.一種可重構體系結構用于高速實現DES、3DES和 AES[J].電子學報,2006,34(8):1386-1390.