基于FPGA的改進(jìn)DES算法的實(shí)現(xiàn)
此設(shè)計(jì)方案消除了子密鑰之間的相關(guān)性,便于子密鑰在迭代過(guò)程中動(dòng)態(tài)分發(fā)。同時(shí),簡(jiǎn)化了子密鑰的產(chǎn)生,有效地節(jié)約了硬件資源。
2.2 單輪迭代運(yùn)算模塊
DES算法是典型的迭代分組密碼算法,實(shí)現(xiàn)過(guò)程的核心是16輪次迭代運(yùn)算。16輪迭代運(yùn)算過(guò)程完全相同,只是輪迭代的輸入?yún)?shù)不同。迭代運(yùn)算中的輪函數(shù)f是非線性的,它是每輪實(shí)現(xiàn)擴(kuò)散和混淆的關(guān)鍵。其中,E盒擴(kuò)展置換和P盒置換都是線性變換,而S盒代換部件是一個(gè)十分復(fù)雜的非線性函數(shù),正是經(jīng)過(guò)它的非線性變換才使明文實(shí)現(xiàn)了較好的混亂,達(dá)到加解密的效果,從而具有較強(qiáng)的安全性。因此,S盒設(shè)計(jì)在整個(gè)DES算法中是非常關(guān)鍵的。
S盒的功能描述:如果用a1a2a3a4a5a6表示6 bit輸入,那么4 bit的輸出值可以通過(guò)查表得到,行的a1a6索引的表示與列的a2a3a4a5索引表示均為二進(jìn)制數(shù)。因此,建立S盒模型時(shí),一般采用case語(yǔ)句來(lái)實(shí)現(xiàn)。用case多分支選擇語(yǔ)句實(shí)現(xiàn)S盒有兩種方法:(1)直接使用輸入為6變量,輸出為4變量的case語(yǔ)句對(duì)S盒描述,形成一個(gè)4 bit 64個(gè)存儲(chǔ)空間的表。此方法可讀性強(qiáng),但8個(gè)S盒需要8×64個(gè)存儲(chǔ)空間,占用大量資源,綜合效率低,速度慢,不利于整個(gè)系統(tǒng)設(shè)計(jì)實(shí)現(xiàn); (2)由于S盒是一個(gè)4×16的二維數(shù)組,使用雙重case語(yǔ)句,外層使用2個(gè)變量,對(duì)應(yīng)S盒輸入的第1、6位。內(nèi)層使用4個(gè)變量,對(duì)應(yīng)S盒輸入的第2、3、4、5 位。采用雙重case語(yǔ)句可以直接定位輸出結(jié)果。該方案可充分利用FPGA的內(nèi)部資源,提高綜合效率,加快算法執(zhí)行速度。經(jīng)過(guò)綜合后,單個(gè)S盒的實(shí)現(xiàn)僅占用24個(gè)邏輯單元,相對(duì)于直接使用6個(gè)變量的case語(yǔ)句的實(shí)現(xiàn),占用資源約減少50%。
本文對(duì)單輪迭代運(yùn)算進(jìn)行功能模塊設(shè)計(jì),實(shí)現(xiàn)過(guò)程調(diào)用了密鑰生成模塊和S盒模塊。由于該設(shè)計(jì)的子密鑰是獨(dú)立產(chǎn)生的,彼此不相關(guān),因此在一輪運(yùn)算中,不需把子密鑰輸出作為下輪運(yùn)算用來(lái)產(chǎn)生密鑰的輸入。子密鑰通過(guò)控制信號(hào)直接控制子密鑰生成模塊產(chǎn)生分發(fā),在一輪運(yùn)算中只參與與E擴(kuò)展后的數(shù)據(jù)進(jìn)行“異或”運(yùn)算,既節(jié)省了器件的管腳資源,又提高了算法的執(zhí)行效率。同樣,S盒在具體實(shí)例調(diào)用時(shí),亦采用了此方法。單輪迭代變換仿真結(jié)果如圖4所示。圖中,ki_i為控制子密鑰動(dòng)態(tài)分發(fā)的控制信號(hào);L_i和R_i是第i輪非線性變換的輸入;R_i是經(jīng)過(guò)輪函數(shù)一系列運(yùn)算生成的數(shù)據(jù)與輸入L_i“異或”,產(chǎn)生的結(jié)果作為輸出R_o;把R_i直接賦值給輸出L_o。
2.3 頂層模塊的設(shè)計(jì)與實(shí)現(xiàn)
頂層模塊的功能就是調(diào)用單輪迭代運(yùn)算模塊,實(shí)現(xiàn)16輪次循環(huán)迭代,完成DES算法的總體設(shè)計(jì)。采用組合邏輯設(shè)計(jì)實(shí)現(xiàn)了數(shù)據(jù)的初始置換IP、輪函數(shù)f、子密鑰的產(chǎn)生以及最后的逆初始置換IP-1。圖5所示為DES算法的最終設(shè)計(jì)工程文件生成的原理圖。
頂層模塊僅在數(shù)據(jù)裝載控制信號(hào)load為高電平時(shí),接收外部數(shù)據(jù)din;發(fā)送控制信號(hào)ready為高電平時(shí),輸出dout為有效數(shù)據(jù)。由于16輪迭代的每一輪運(yùn)算都要用到上一輪的最后計(jì)算結(jié)果,并且每輪迭代都是調(diào)用單輪迭代運(yùn)算模塊。因此,設(shè)計(jì)了算法執(zhí)行狀態(tài)指示位dt,用來(lái)協(xié)調(diào)控制整個(gè)DES算法的各輪迭代運(yùn)算結(jié)果的反饋賦值。采用Altera公司的CycloneII系列的EP2C8Q208C8器件作為平臺(tái),在Quartus II 8.0下對(duì)Verilog HDL代碼進(jìn)行綜合,然后布局布線對(duì)其進(jìn)行時(shí)序仿真,仿真結(jié)果完全符合時(shí)序要求,達(dá)到了設(shè)計(jì)目的。由表1給出的DES算法硬件實(shí)現(xiàn)性能對(duì)比結(jié)果表明,在資源使用和實(shí)現(xiàn)速度方面,本文算法實(shí)現(xiàn)方案都比較理想。DES系統(tǒng)的實(shí)現(xiàn)所占用的邏輯單元數(shù)僅為468,小于整個(gè)硬件資源的6%,可見(jiàn)設(shè)計(jì)資源得到了極大的優(yōu)化利用。
本文的創(chuàng)新點(diǎn):在傳統(tǒng)硬件實(shí)現(xiàn)資源優(yōu)先方案的基礎(chǔ)上,采取在輪函數(shù)內(nèi)部設(shè)置流水線結(jié)構(gòu)來(lái)提高系統(tǒng)的整體運(yùn)行速度,既節(jié)省了硬件資源,又提高了系統(tǒng)的性能;簡(jiǎn)化了子密鑰與外部密鑰的生成關(guān)系,消除了各個(gè)子密鑰之間的相關(guān)性,保證了在子密鑰和數(shù)據(jù)異或運(yùn)算的輪函數(shù)實(shí)現(xiàn)時(shí),子密鑰的動(dòng)態(tài)分發(fā)。
通過(guò)對(duì)整個(gè)DES算法的詳細(xì)分析,提出了合理的分模塊設(shè)計(jì)思想,并采用Verilog硬件描述語(yǔ)言對(duì)算法進(jìn)行了驗(yàn)證仿真。設(shè)計(jì)文件最終生成的原理圖可以完成DES算法的功能,對(duì)其進(jìn)行適當(dāng)改進(jìn),可以作為功能模塊嵌入到實(shí)際系統(tǒng)中,實(shí)現(xiàn)通信數(shù)據(jù)的實(shí)時(shí)、可靠傳輸,具有一定的實(shí)際應(yīng)用價(jià)值。
參考文獻(xiàn)
[1] 王簡(jiǎn)瑜, 張魯國(guó). 基于FPGA實(shí)現(xiàn)DES算法的性能分析 [J]. 微計(jì)算機(jī)信息, 2007, 23(3-2): 217-218.
[2] MCLOONE M, MCCANNY J V. High-performance FPGA implementation of DES using a novel method for implementing the key schedule [J]. IEEE, Circuits Devices System. 2003, 150(5): 373-378.
[3] 鄭東, 李祥學(xué), 黃征. 密碼學(xué)—密碼算法與協(xié)議[M]. 北京: 電子工業(yè)出版社, 2009.
[4] STALLINGS W. Cryptography and network security principles and practices[M]. Prentice Hall,1996.
[5] 姚霽, 劉建華, 范九倫. 一種密鑰可配置的DES加密算法的FPGA實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2009,35(7):145-148.
[6] 張峰, 鄭春來(lái), 耶曉東. DES加密算法的FPGA實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù), 2008, 31(7):80-82.
評(píng)論