文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2011)04-0138-04
為了解決數(shù)據(jù)在網(wǎng)絡(luò)通信中的安全傳輸問題,通常采用分組加密技術(shù)對數(shù)據(jù)信息進(jìn)行加密保護(hù),,其中最具有代表性的是數(shù)據(jù)加密標(biāo)準(zhǔn)DES,。DES加密算法已成為應(yīng)用非常廣泛的一種分組對稱加密算法,該算法具有極高的安全性。到目前為止,,除了窮舉搜索法對DES算法進(jìn)行攻擊外,,還沒有發(fā)現(xiàn)更有效的方法。目前,,DES算法廣泛應(yīng)用于衛(wèi)星通信、網(wǎng)關(guān)服務(wù)器,、網(wǎng)絡(luò)通信設(shè)備,、智能卡(IC卡)等領(lǐng)域[1]。其實(shí)現(xiàn)方法通常分為軟件實(shí)現(xiàn)和硬件實(shí)現(xiàn)兩種,,由于軟件實(shí)現(xiàn)時速度較慢,,最快速度不到150 Mb/s[2],且利用軟件實(shí)現(xiàn)DES算法在安全性方面也存在隱患,,而應(yīng)用硬件實(shí)現(xiàn)則可以克服以上的問題?,F(xiàn)場可編程門陣列(FPGA)在算法實(shí)現(xiàn)方面具有靈活性、物理安全性,,相對于軟件實(shí)現(xiàn),,在速度和性能上具有明顯的優(yōu)勢。
DES算法是以多輪的密鑰變換輪函數(shù),、子密鑰和數(shù)據(jù)異或運(yùn)算的輪函數(shù)為特征,,相應(yīng)的硬件實(shí)現(xiàn)方法有兩種:一種是通過輪函數(shù)的16份硬件拷貝,達(dá)到深度細(xì)化的流水線處理,,實(shí)現(xiàn)性能最優(yōu),;另一種是通過時分復(fù)用,重復(fù)調(diào)用1份輪函數(shù)的硬件拷貝,,以時間換空間,,從而得到硬件資源占用的最小化,。通過對系統(tǒng)的性能和資源占用進(jìn)行綜合考慮,本文采用資源優(yōu)先方案,。
采用此方案系統(tǒng)消耗的資源較少,,但運(yùn)行速度受限。改進(jìn)的方法是采取在輪函數(shù)內(nèi)部設(shè)置流水線結(jié)構(gòu)來提高整體處理的速度,,同時子密鑰變換輪函數(shù)提供子密鑰,,應(yīng)與迭代輪函數(shù)保持同步工作狀態(tài),以減少迭代運(yùn)算帶來的等待延遲,。通過設(shè)置迭代輪計(jì)數(shù)器產(chǎn)生的算法狀態(tài)執(zhí)行指示位,,控制輪函數(shù)的輸入和反饋,實(shí)現(xiàn)輪函數(shù)的復(fù)用,。
1 DES算法概述與原理
DES是一種分組加密算法,將64 bit的明文模塊輸入用64 bit密鑰加密得到64 bit密文輸出,。其64 bit密鑰中有效密鑰只有56 bit,其余8 bit為奇偶校驗(yàn)位,,不參與運(yùn)算,。同時,它也是對稱加密算法,,其加密和解密運(yùn)算過程是一樣的,,區(qū)別僅僅在于迭代時子密鑰的使用順序,算法本身并沒有任何變化,。DES算法的處理流程如圖1所示,。
圖1(a)是整個算法的實(shí)現(xiàn)處理流程,64 bit的明文輸入模塊經(jīng)過初始置換IP后,,改變了分組中每個bit的順序,并把置換輸出分為L0,、R0兩部分;進(jìn)入16輪迭代運(yùn)算,每一輪迭代都要用到輪函數(shù)f,第16輪迭代兩輸出左右互換的結(jié)果R16,、L16作為逆初始置換IP-1的輸入,;64 bit的R16、L16經(jīng)過逆初始置換得到64 bit的密文輸出,IP·IP-1=I,。
圖1(b)是單輪迭代運(yùn)算過程,,也是一非線性變換的作用過程。第i輪迭代過程的具體描述可表示為[3]:
其中,㈩表示2 bit串的“異或”(按位模2加),。
輪函數(shù)f是迭代運(yùn)算的核心部分,,正是在密鑰控制下多次利用論函數(shù)進(jìn)行加密變換,才達(dá)到實(shí)現(xiàn)擴(kuò)散和混淆的效果,。輪函數(shù)f的功能由四個部分按順序完成:(1)將32 bit Ri-1輸入通過擴(kuò)展E變換擴(kuò)展為48 bit的數(shù)據(jù),; (2)將擴(kuò)展后的48 bit數(shù)據(jù)與對應(yīng)的48 bit子密鑰Ki“異或”; (3)將異或結(jié)果分成8個6 bit分組,,8個分組在8個不同的非線性S盒的作用下被轉(zhuǎn)變?yōu)?個4 bit分組,其中每個S盒都將6 bit輸入映射為4 bit輸出;(4)將S盒的輸出結(jié)果經(jīng)過P盒的換位置換,得到f(Ri-1,Ki)的32 bit輸出,。
DES實(shí)際有效的密鑰長度為56 bit,,對于56 bit的密碼信息,每7 bit擴(kuò)充1 bit奇偶校驗(yàn)位,從而得到64 bit外部密鑰,。外部密鑰輸入后,,首先經(jīng)過重排PC-1表(剔除奇偶校驗(yàn)位,打亂密碼信息順序)得到56 bit原始密鑰,,并分成兩部分28 bit的輸出,。每部分按循環(huán)移位次數(shù)表[4]移位,并按重排PC-2表置換得到每輪迭代所需的48位子密鑰,。
2 DES算法的FPGA實(shí)現(xiàn)
本設(shè)計(jì)選用資源優(yōu)先方案,即僅用硬件實(shí)現(xiàn)單輪密鑰變換和密鑰加數(shù)據(jù)運(yùn)算的輪函數(shù),通過重復(fù)16次調(diào)用這一功能模塊來實(shí)現(xiàn)一次DES加/解密運(yùn)算,。該設(shè)計(jì)方案原理圖如圖2所示。當(dāng)數(shù)據(jù)裝載信號置為高電平時,,待加/解密數(shù)據(jù)通過數(shù)據(jù)選擇器送到輪函數(shù)的入口,。同時在輪計(jì)數(shù)器的控制下,算法狀態(tài)執(zhí)行位置1,。在第一個時鐘到來時,將數(shù)據(jù)(B1,、B2)通過輪函數(shù)實(shí)現(xiàn)第一輪變換,經(jīng)過第一輪變換后的數(shù)據(jù)被寄存器鎖存,。在下一個時鐘到來時,,與相應(yīng)輪的子密鑰一起再次被送到輪函數(shù)的輸入端,這樣循環(huán)16輪后,,算法狀態(tài)執(zhí)行位置0,,輸出最終數(shù)據(jù)。
本文在對DES算法進(jìn)行建模時,,將整個算法分為子密鑰生成模塊,、S盒非線性變換模塊,、單輪迭代運(yùn)算模塊和頂層模塊四個部分,。其中,單輪迭代運(yùn)算模塊調(diào)用子密鑰生成模塊和S盒模塊實(shí)現(xiàn)了一輪迭代運(yùn)算功能,。
2.1子密鑰的生成
DES算法每一輪次迭代都需要一個子密鑰參與“異或”運(yùn)算,。傳統(tǒng)的硬件實(shí)現(xiàn)時,通過對外部密鑰的換位重組,,以及每次迭代對應(yīng)的不同次數(shù)的循環(huán)移位,,預(yù)先生成子密鑰。這樣不僅語言描述復(fù)雜,,占用的硬件資源較多,,而且每輪密鑰移位次數(shù)也不同,需要的運(yùn)算時間不同,,會給算法的迭代運(yùn)算帶來更大的等待延遲,。
外部密鑰先后經(jīng)過置換重排1,、第n輪的循環(huán)移位和置換重排2這三個步驟得到第n輪的子密鑰。通過分析可知這一系列處理都只是位的置換,,每輪迭代需要每一位子密鑰,,相對于外部密鑰的每一位存在一定固定的對應(yīng)關(guān)系。為了降低資源消耗,,提高算法執(zhí)行速度,,設(shè)計(jì)中可將三個步驟合并成一次位的置換。采用硬件描述語言Verilog HDL對子密鑰生成模塊進(jìn)行組合邏輯設(shè)計(jì),其仿真結(jié)果如圖3所示,。圖中,,mode為工作方式(=0時,加密;=1時,解密);外部密鑰為十六進(jìn)制數(shù)133457799bbcdff1時,,prekey為外部密鑰被剔除奇偶校驗(yàn)位生成的56 bit有效密鑰重排PC-1得到的原始密鑰,,newkey為經(jīng)過重排PC-2置換的48 bit子密鑰。只要改變迭代輪數(shù)ki,,就會預(yù)先生成子密鑰,。迭代輪數(shù)的變化是通過輪計(jì)數(shù)器來控制。
此設(shè)計(jì)方案消除了子密鑰之間的相關(guān)性,,便于子密鑰在迭代過程中動態(tài)分發(fā),。同時,簡化了子密鑰的產(chǎn)生,,有效地節(jié)約了硬件資源,。
2.2 單輪迭代運(yùn)算模塊
DES算法是典型的迭代分組密碼算法,實(shí)現(xiàn)過程的核心是16輪次迭代運(yùn)算,。16輪迭代運(yùn)算過程完全相同,,只是輪迭代的輸入?yún)?shù)不同。迭代運(yùn)算中的輪函數(shù)f是非線性的,,它是每輪實(shí)現(xiàn)擴(kuò)散和混淆的關(guān)鍵,。其中,E盒擴(kuò)展置換和P盒置換都是線性變換,,而S盒代換部件是一個十分復(fù)雜的非線性函數(shù),,正是經(jīng)過它的非線性變換才使明文實(shí)現(xiàn)了較好的混亂,達(dá)到加解密的效果,,從而具有較強(qiáng)的安全性,。因此,S盒設(shè)計(jì)在整個DES算法中是非常關(guān)鍵的,。
S盒的功能描述:如果用a1a2a3a4a5a6表示6 bit輸入,,那么4 bit的輸出值可以通過查表得到,行的a1a6索引的表示與列的a2a3a4a5索引表示均為二進(jìn)制數(shù)。因此,,建立S盒模型時,,一般采用case語句來實(shí)現(xiàn),。用case多分支選擇語句實(shí)現(xiàn)S盒有兩種方法:(1)直接使用輸入為6變量,輸出為4變量的case語句對S盒描述,形成一個4 bit 64個存儲空間的表。此方法可讀性強(qiáng),,但8個S盒需要8×64個存儲空間,,占用大量資源,綜合效率低,,速度慢,,不利于整個系統(tǒng)設(shè)計(jì)實(shí)現(xiàn); (2)由于S盒是一個4×16的二維數(shù)組,使用雙重case語句,,外層使用2個變量,,對應(yīng)S盒輸入的第1、6位,。內(nèi)層使用4個變量,,對應(yīng)S盒輸入的第2、3,、4,、5 位。采用雙重case語句可以直接定位輸出結(jié)果,。該方案可充分利用FPGA的內(nèi)部資源,,提高綜合效率,加快算法執(zhí)行速度,。經(jīng)過綜合后,,單個S盒的實(shí)現(xiàn)僅占用24個邏輯單元,相對于直接使用6個變量的case語句的實(shí)現(xiàn),占用資源約減少50%,。
本文對單輪迭代運(yùn)算進(jìn)行功能模塊設(shè)計(jì),,實(shí)現(xiàn)過程調(diào)用了密鑰生成模塊和S盒模塊。由于該設(shè)計(jì)的子密鑰是獨(dú)立產(chǎn)生的,,彼此不相關(guān),,因此在一輪運(yùn)算中,不需把子密鑰輸出作為下輪運(yùn)算用來產(chǎn)生密鑰的輸入,。子密鑰通過控制信號直接控制子密鑰生成模塊產(chǎn)生分發(fā),,在一輪運(yùn)算中只參與與E擴(kuò)展后的數(shù)據(jù)進(jìn)行“異或”運(yùn)算,既節(jié)省了器件的管腳資源,又提高了算法的執(zhí)行效率,。同樣,S盒在具體實(shí)例調(diào)用時,,亦采用了此方法。單輪迭代變換仿真結(jié)果如圖4所示,。圖中,,ki_i為控制子密鑰動態(tài)分發(fā)的控制信號;L_i和R_i是第i輪非線性變換的輸入,;R_i是經(jīng)過輪函數(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ù)裝載控制信號load為高電平時,接收外部數(shù)據(jù)din;發(fā)送控制信號ready為高電平時,輸出dout為有效數(shù)據(jù),。由于16輪迭代的每一輪運(yùn)算都要用到上一輪的最后計(jì)算結(jié)果,并且每輪迭代都是調(diào)用單輪迭代運(yùn)算模塊,。因此,,設(shè)計(jì)了算法執(zhí)行狀態(tài)指示位dt,用來協(xié)調(diào)控制整個DES算法的各輪迭代運(yùn)算結(jié)果的反饋賦值,。采用Altera公司的CycloneII系列的EP2C8Q208C8器件作為平臺,,在Quartus II 8.0下對Verilog HDL代碼進(jìn)行綜合,然后布局布線對其進(jìn)行時序仿真,,仿真結(jié)果完全符合時序要求,,達(dá)到了設(shè)計(jì)目的。由表1給出的DES算法硬件實(shí)現(xiàn)性能對比結(jié)果表明,,在資源使用和實(shí)現(xiàn)速度方面,,本文算法實(shí)現(xiàn)方案都比較理想。DES系統(tǒng)的實(shí)現(xiàn)所占用的邏輯單元數(shù)僅為468,小于整個硬件資源的6%,,可見設(shè)計(jì)資源得到了極大的優(yōu)化利用,。
本文的創(chuàng)新點(diǎn):在傳統(tǒng)硬件實(shí)現(xiàn)資源優(yōu)先方案的基礎(chǔ)上,采取在輪函數(shù)內(nèi)部設(shè)置流水線結(jié)構(gòu)來提高系統(tǒng)的整體運(yùn)行速度,,既節(jié)省了硬件資源,,又提高了系統(tǒng)的性能;簡化了子密鑰與外部密鑰的生成關(guān)系,消除了各個子密鑰之間的相關(guān)性,,保證了在子密鑰和數(shù)據(jù)異或運(yùn)算的輪函數(shù)實(shí)現(xiàn)時,,子密鑰的動態(tài)分發(fā)。
通過對整個DES算法的詳細(xì)分析,,提出了合理的分模塊設(shè)計(jì)思想,,并采用Verilog硬件描述語言對算法進(jìn)行了驗(yàn)證仿真。設(shè)計(jì)文件最終生成的原理圖可以完成DES算法的功能,,對其進(jìn)行適當(dāng)改進(jìn),,可以作為功能模塊嵌入到實(shí)際系統(tǒng)中,實(shí)現(xiàn)通信數(shù)據(jù)的實(shí)時、可靠傳輸,,具有一定的實(shí)際應(yīng)用價值,。
參考文獻(xiàn)
[1] 王簡瑜, 張魯國. 基于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] 張峰, 鄭春來, 耶曉東. DES加密算法的FPGA實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù), 2008, 31(7):80-82.