??? 摘? 要:一種基于FPGA的數(shù)據(jù)加密標(biāo)準(zhǔn)算法的實(shí)現(xiàn)。就資源優(yōu)先和性能優(yōu)先分別使用循環(huán)法和流水線法對(duì)DES加密算法進(jìn)行了設(shè)計(jì),并對(duì)其進(jìn)行了比較。通過(guò)采用子密鑰簡(jiǎn)單產(chǎn)生和ROM優(yōu)化S盒的方法,對(duì)流水線法進(jìn)行改進(jìn),達(dá)到了資源占用率低、加密速度快的效果。?
??? 關(guān)鍵詞: DES; 流水線; 循環(huán)法; FPGA; 密碼學(xué)
?
??? 付費(fèi)節(jié)目是數(shù)字電視的重要新業(yè)務(wù)之一,建立付費(fèi)頻道,其中關(guān)鍵性的技術(shù)就是加密技術(shù),數(shù)字電視條件接收系統(tǒng)CAS(Conditional Access System)是數(shù)字電視加密控制的核心技術(shù)的保證。典型的CAS由前端子系統(tǒng)、終端接收子系統(tǒng)等組成,前端子系統(tǒng)邏輯結(jié)構(gòu)如圖1所示。圖1中加密器B采用數(shù)據(jù)加密標(biāo)準(zhǔn)DES(Data Encryption Standard)加密算法進(jìn)行硬件實(shí)現(xiàn),以達(dá)到對(duì)控制字CW進(jìn)行快速加密。盡管目前DES算法已經(jīng)出現(xiàn)很多變形的算法,但基礎(chǔ)仍然是DES算法,可見(jiàn),對(duì)DES算法的研究具有很大現(xiàn)實(shí)意義。?
?
?
??? 通過(guò)軟件實(shí)現(xiàn)的安全系統(tǒng)從本質(zhì)上來(lái)說(shuō)很難做到真正的保密,而通過(guò)硬件來(lái)實(shí)現(xiàn)加密模塊的內(nèi)部運(yùn)作,可實(shí)現(xiàn)硬件的自鎖、自毀功能,能夠?qū)崿F(xiàn)真正意義上的保密。現(xiàn)場(chǎng)可編程門陣列FPGA在實(shí)現(xiàn)算法方面具有靈活性、物理安全性和比軟件高的速度性能,已成為硬件實(shí)現(xiàn)DES算法最好的選擇。本文就資源優(yōu)先和性能優(yōu)先上對(duì)DES算法進(jìn)行了設(shè)計(jì)和比較,這兩種設(shè)計(jì)方法和針對(duì)流水線改進(jìn)后的方法都在Altera CycloneⅡ芯片上得到了實(shí)現(xiàn)。?
1 DES加密算法原理?
??? 本文采用電碼本模式ECB(Electric Code Book)的DES加密算法,通過(guò)直接使用分組密碼算法來(lái)進(jìn)行消息加密。這一工作模式的優(yōu)點(diǎn)就是分組密碼的優(yōu)點(diǎn),其缺點(diǎn)是相同的密文對(duì)應(yīng)相同的明文。DES是迭代型分組密碼,明文分組長(zhǎng)度為64bit,密鑰的長(zhǎng)度也為64bit,但實(shí)際上只有56bit有效,密鑰中第8、16、24、…、64位被舍去,因?yàn)樗鼈兺ǔJ瞧媾夹r?yàn)位。DES加密算法從數(shù)據(jù)流的角度來(lái)看,可以分為兩部分:明文的變換和密鑰的變換。變換中引入了輪的概念,每一輪的算法都是重復(fù)的,一般要進(jìn)行16輪。?
??? 在每輪密鑰變換過(guò)程中,密鑰擴(kuò)展算法還需要用到循環(huán)左移變換。密鑰變換的原則是:在第1、2、9、16輪變換時(shí),密鑰循環(huán)左移1位;當(dāng)?shù)?~8輪或者10~15輪變換時(shí),密鑰循環(huán)左移2位。每個(gè)循環(huán)左移變換的輸入和輸出都是28bit串。將移位所得的56bit密鑰通過(guò)壓縮變換變成48bit密鑰,此密鑰即為這輪變換所得的子密鑰[1]。?
??? 在一輪明文變換時(shí),輸入數(shù)據(jù)被分為左右對(duì)稱的兩部分。通過(guò)一個(gè)擴(kuò)展置換將數(shù)據(jù)的右半部分?jǐn)U展成48bit,將其與此輪生成的子密鑰進(jìn)行模二加運(yùn)算,經(jīng)過(guò)S盒代換將模二加生成的48bit密鑰替代成32bit密鑰,最后將其進(jìn)行P盒置換。以上四個(gè)運(yùn)算過(guò)程構(gòu)成函數(shù)F。通過(guò)另一個(gè)模二加運(yùn)算,函數(shù)F的輸出與輸入數(shù)據(jù)左半邊模二加構(gòu)成新的右半部分,原來(lái)的右半部分變成新的左半部分。以上過(guò)程即完成了DES算法的完整的一輪運(yùn)算。DES加密算法一輪運(yùn)算和總運(yùn)算流程如圖2所示。?
?
?
2 DES加密算法的FPGA實(shí)現(xiàn)?
2.1 資源優(yōu)先設(shè)計(jì)方案?
??? 資源優(yōu)先方案就是通過(guò)硬件設(shè)計(jì)出一個(gè)密鑰變換輪函數(shù)和一個(gè)明文變換輪函數(shù),通過(guò)16輪反復(fù)調(diào)用這一個(gè)硬件系統(tǒng)實(shí)現(xiàn)一次DES加密運(yùn)算。由于16輪運(yùn)算都只占用一輪運(yùn)算所需的硬件資源,使硬件的開(kāi)銷大大減少。但是,一個(gè)時(shí)鐘周期只能進(jìn)行一輪加密運(yùn)算,要完成整個(gè)加密過(guò)程要花費(fèi)16個(gè)時(shí)鐘周期,從而在速度性能上大打折扣。而采用循環(huán)法實(shí)現(xiàn)DES加密算法能達(dá)到減少資源占用的目的,具體實(shí)現(xiàn)方法如圖3所示。?
?
?
2.2 性能優(yōu)先設(shè)計(jì)方案?
??? 性能優(yōu)先設(shè)計(jì)方案剛好與資源優(yōu)先設(shè)計(jì)方案相反。傳統(tǒng)方案是將循環(huán)全部打開(kāi)配合流水線結(jié)構(gòu)進(jìn)行設(shè)計(jì),即將16輪函數(shù)進(jìn)行硬件級(jí)聯(lián)構(gòu)成一個(gè)16級(jí)的流水線結(jié)構(gòu),提前生成16個(gè)子密鑰,隨著流水線的進(jìn)程發(fā)送給相對(duì)應(yīng)的流水級(jí),從而達(dá)到16個(gè)數(shù)據(jù)塊同時(shí)加密的目的[3-4]。這樣,從第一個(gè)數(shù)據(jù)塊開(kāi)始加密起,每一個(gè)時(shí)鐘周期延時(shí)都會(huì)有一個(gè)數(shù)據(jù)塊進(jìn)行加密,經(jīng)16個(gè)時(shí)鐘周期延時(shí)后,得到最終的密文。流水線結(jié)構(gòu)設(shè)計(jì)通過(guò)一個(gè)時(shí)鐘周期即可進(jìn)行一個(gè)數(shù)據(jù)塊的加密,通過(guò)占用資源換取速度性能的提高。
??? 本文通過(guò)子密鑰的簡(jiǎn)化和S盒的優(yōu)化來(lái)改進(jìn)傳統(tǒng)的流水線結(jié)構(gòu),實(shí)現(xiàn)一個(gè)占用資源少、加密速度快的加密系統(tǒng)。具體的設(shè)計(jì)框圖如圖4所示。?
?
?
??? (1) 子密鑰的簡(jiǎn)單生成?
??? 由DES加密算法原理可知,一個(gè)64bit的初始密鑰輸入后通過(guò)一次壓縮變換、移位變換、二次壓縮變換后得到第一輪子密鑰,其密鑰為48bit。第一輪子密鑰變換結(jié)果如圖5所示。由圖5可知,第一輪子密鑰的第1、2、3、…、46、47、48位分別為初始密鑰的第10、51、34、…、62、55、31位。每一輪子密鑰產(chǎn)生的方法是一樣的,如果采用硬件描述語(yǔ)言按照其子密鑰產(chǎn)生的原理一步步地推導(dǎo)出16次DES迭代的密鑰,不僅語(yǔ)言表述繁瑣,而且占用很多的硬件資源。同時(shí),由于每一輪子密鑰產(chǎn)生的時(shí)間并不相同,會(huì)給DES密碼的迭代運(yùn)算帶來(lái)很多不必要的麻煩。?
?
?
??? 對(duì)密鑰變換原理進(jìn)行分析可以發(fā)現(xiàn),每一輪子密鑰的產(chǎn)生只是將初始密鑰經(jīng)過(guò)置換和不同次數(shù)的循環(huán)移位。每一輪循環(huán)移位的次數(shù)對(duì)原始密鑰是固定的,其每一位相對(duì)于初始密鑰的每一位存在著固定的關(guān)系,由此可以列出每一輪子密鑰與初始密鑰之間的關(guān)系表,通過(guò)關(guān)系表采用硬件描述語(yǔ)言可同時(shí)產(chǎn)生16輪子密鑰。采用此方法大大簡(jiǎn)化了程序語(yǔ)言、節(jié)約了硬件的資源開(kāi)銷。?
??? (2) S盒的優(yōu)化?
??? S盒的設(shè)計(jì)是DES算法的關(guān)鍵部分, S盒設(shè)計(jì)的優(yōu)劣將影響整個(gè)算法的性能。S盒是DES加密算法中唯一的非線性函數(shù),S盒的非線性變換使算法達(dá)到很好的“混亂”效果,從而具有較強(qiáng)的安全性。?
??? S盒的原理是輸入6bit的數(shù)據(jù),其中第1位和第6 位確定行,中間4bit確定列,通過(guò)行、列查表確定對(duì)應(yīng)的4 bit的輸出。根據(jù)S盒的工作原理,可直接使用輸入為6變量、輸出為4變量的case語(yǔ)句進(jìn)行描述,構(gòu)成一個(gè)4bit 64個(gè)存儲(chǔ)空間的表。然而這樣的語(yǔ)句雖然可讀性很強(qiáng),但綜合的效率往往不高,占用資源過(guò)多,速度也比較低,使S盒成為系統(tǒng)速度的瓶頸。?
??? 本文采用8個(gè)ROM來(lái)實(shí)現(xiàn)S盒。把輸入的6bit作為地址,對(duì)應(yīng)的地址空間里存放的就是待輸出的4bit,這樣可提高運(yùn)算時(shí)間,解決S盒變換的時(shí)間瓶頸;利用FPGA內(nèi)部自帶的ROM,大大減少邏輯資源的占用。以第一個(gè)S盒設(shè)計(jì)為例,其設(shè)計(jì)實(shí)現(xiàn)電路如圖6所示。輸入為IN[6:1],經(jīng)地址變換電路將輸入的初始值轉(zhuǎn)換為相應(yīng)的查表地址{IN[6]、IN[1]、IN[5:2]},即ADR[6:1],以此對(duì)64×4 ROM進(jìn)行查表,ROM值按照S盒查找表進(jìn)行初始化,由ADR[6:1]讀取ROM中相對(duì)應(yīng)的數(shù)據(jù)從而得到OUT[3:0][2,5]。采用同樣的辦法,通過(guò)ROM實(shí)現(xiàn)其他7個(gè)S盒,以達(dá)到優(yōu)化的目的。?
?
?
3 綜合仿真結(jié)果對(duì)比?
??? 利用ModelSim對(duì)三種不同方法實(shí)現(xiàn)的DES加密算法程序進(jìn)行了仿真,得到的仿真波形初步驗(yàn)證了DES加密功能的正確性。選用Altera公司的QuartusⅡ6.0環(huán)境下成功編譯、綜合、適配、仿真,并下載到CycloneⅡ系列的FPGA中進(jìn)行了驗(yàn)證,通過(guò)分析得到循環(huán)法、傳統(tǒng)流水線法、改進(jìn)流水線法在速度性能和資源占用上的差異如表1所示。?
?
?
??? 從表1可以看出,三種不同的方法,各自占用硬件資源、可以達(dá)到的最大時(shí)鐘頻率、加密速率上都存在各自的特點(diǎn)。循環(huán)法占用資源少、時(shí)鐘頻率低、加密速度相對(duì)較慢。傳統(tǒng)流水線法通過(guò)改進(jìn)后,大大減少了邏輯資源的占用量,同時(shí)在時(shí)鐘頻率和加密速率上都得到很大的提升。?
??? 本文按照資源優(yōu)先和性能優(yōu)先兩種不同的設(shè)計(jì)方案,分別采取循環(huán)法和流水線法予以實(shí)現(xiàn)。同時(shí),對(duì)性能優(yōu)先方案提出了改進(jìn)方法即:子密鑰簡(jiǎn)單生成和S盒的優(yōu)化。通過(guò)對(duì)這三種方法進(jìn)行綜合仿真驗(yàn)證,證實(shí)了改進(jìn)流水線法的正確可行性。這兩種方案可以用于不同要求的應(yīng)用領(lǐng)域,具有較大的靈活性。?
參考文獻(xiàn)?
[1] 胡予濮,張玉清,肖國(guó)鎮(zhèn).對(duì)稱密碼學(xué)[M].北京:機(jī)械工業(yè)出版社,2002:143-162.?
[2] HASKINS G M. Securing asynchronous transfer mode?networks[D].Worcester Polytechnic Institute,Worcester,Massachusetts,USA,1997. ?
[3] MCLOONE M, MCCANNY J V. High-performance FPGA?implementation of DES using a novel method for implementing the key schedule[J]. Circuits, Devices and?Systems, IEE Proceedings,2003,150(5):373-378.?
[4] LUBBE V D. Basic methods of cryptography[J].IEE?Review, 1999,45(2):77-77.?
[5] 艾顯峰,葉宇煌.高速通用DES加解密芯片設(shè)計(jì)與實(shí)現(xiàn).寧德師專學(xué)報(bào),2004,16(3).