RISC結(jié)構(gòu)微處理器專用存儲(chǔ)單元的研究與實(shí)現(xiàn)
采用通用微處理器實(shí)現(xiàn)密碼算法雖然靈活性好,但性能不佳,實(shí)現(xiàn)速度也較慢。而采用專用ASIC針對(duì)特定密碼算法進(jìn)行加速,靈活性不高。RISC結(jié)構(gòu)密碼專用微處理器設(shè)計(jì)是面向通用微處理器與高效密碼處理器的結(jié)合,在RISC結(jié)構(gòu)中整合了一個(gè)密碼運(yùn)算單元,并且這些運(yùn)算單元是基于可重構(gòu)的,對(duì)它配置不同的信息可以完成不同的算法,該運(yùn)算單元與算術(shù)運(yùn)算單元ALU并行工作,并訪問同一個(gè)寄存器文件[1]。RISC體系結(jié)構(gòu)作為計(jì)算機(jī)設(shè)計(jì)策略的一種類型己愈來愈多地應(yīng)用于計(jì)算機(jī)的體系設(shè)計(jì)中。RISC結(jié)構(gòu)的指令系統(tǒng)中,采用大量的寄存器——寄存器操作指令,但只有l(wèi)oad/store指令可以訪問內(nèi)存。從內(nèi)存中取出的數(shù)據(jù)要送到寄存器,在寄存器之間對(duì)數(shù)據(jù)進(jìn)行快速處理,從而避免了由于頻繁訪問內(nèi)存而降低執(zhí)行速度[2]。RISC指令尋址模式和指令操作都相對(duì)簡(jiǎn)單,這雖然有利于簡(jiǎn)化微結(jié)構(gòu)實(shí)現(xiàn),但是在進(jìn)行大量數(shù)據(jù)流處理特別是密碼運(yùn)算時(shí),由于它需要存儲(chǔ)較多的數(shù)據(jù),所以必須頻繁地利用load/store指令控制數(shù)據(jù)的進(jìn)出,這需要占用較多的指令和較多的時(shí)鐘周期。因此,針對(duì)上述問題,本文在32位RISC密碼專用微處理器中設(shè)計(jì)了一個(gè)專用存儲(chǔ)單元用來存放密碼運(yùn)算的相關(guān)數(shù)據(jù),在密碼運(yùn)算時(shí)可以對(duì)其直接訪問,大大減少了指令條數(shù),提高了密碼運(yùn)算效率。
本文引用地址:http://2s4d.com/article/201706/348383.htm1 應(yīng)用分析
通過對(duì)DES、RIJNDAEL、SERPENT、RC6、IDEA等分組密碼算法的分析,很多不同分組密碼算法具有相同或相似的基本操作運(yùn)算,或者說,同一基本操作運(yùn)算在不同的算法中出現(xiàn)的頻率也不相同,如表1所示。
在表1所示常見操作中:S盒變換需要用到查找表LUT數(shù)據(jù),算法不同,S盒查找表的大小也不相同,例如,DES是8個(gè)6~4的查找表,AES是1個(gè)8~8的查找表;位置換操作需要用到相關(guān)的控制信息,不同的置換其控制信息也不相同,例如,DES算法就用到了六種置換的控制信息;有限域乘法運(yùn)算中需要對(duì)不可約多項(xiàng)式和乘數(shù)多項(xiàng)式進(jìn)行配置;密碼運(yùn)算中還有密鑰及運(yùn)算生成的子密鑰數(shù)據(jù)。由此可見,密碼運(yùn)算中需要存儲(chǔ)大量的不同類型的數(shù)據(jù),每種數(shù)據(jù)的存儲(chǔ)量大小也各不相同。這就決定了基于RISC結(jié)構(gòu)的密碼專用微處理器需要具有較靈活的存儲(chǔ)結(jié)構(gòu)。
因此,為了提高密碼運(yùn)算的執(zhí)行效率,在密碼微處理器中可以設(shè)計(jì)一個(gè)內(nèi)部的專用存儲(chǔ)單元,用來存儲(chǔ)密鑰和一些特定的配置數(shù)據(jù)。對(duì)專用存儲(chǔ)單元的訪問要結(jié)合密碼運(yùn)算單元的特點(diǎn)才能具有較好的靈活性。因此在本設(shè)計(jì)中,微處理器完成密碼運(yùn)算時(shí)使用專用存儲(chǔ)單元,而完成其他運(yùn)算時(shí)則使用數(shù)據(jù)存儲(chǔ)器。這樣,既具有了其專用性又保留了其通用性,能夠高效地實(shí)現(xiàn)密碼算法[3]。
2 專用存儲(chǔ)單元的設(shè)計(jì)
2.1 整體結(jié)構(gòu)
密碼專用微處理器在支持原load指令和store指令訪問數(shù)據(jù)存儲(chǔ)單元的基礎(chǔ)上,硬件上又加入了專用存儲(chǔ)單元的訪問邏輯。專用存儲(chǔ)單元與數(shù)據(jù)存儲(chǔ)單元分離獨(dú)立地存儲(chǔ)相應(yīng)的數(shù)據(jù),這樣就減少了大量RISC結(jié)構(gòu)中難以避免的寄存器與存儲(chǔ)單元交換數(shù)據(jù)的指令[4]。密碼專用微處理器的整體結(jié)構(gòu)如圖1所示。
專用存儲(chǔ)單元放置于IF/ID極間寄存器之后,在進(jìn)行密碼運(yùn)算時(shí),操作數(shù)從寄存器堆中取出,對(duì)于密碼運(yùn)算的配置信息,則從專用存儲(chǔ)單元中取出直接進(jìn)入IU運(yùn)算單元完成配置。
專用存儲(chǔ)單元共分為三個(gè)模塊:S盒模塊、密鑰模塊、bit置換和有限域模塊,每一個(gè)模塊又由一些地址位寬和數(shù)據(jù)位寬各不相同的RAM組成,如圖2所示。
圖2中,存放S盒LUT數(shù)據(jù)部分由8個(gè)28×8的RAM構(gòu)成,存放密鑰部分由1個(gè)27×32的RAM構(gòu)成,存放置換和有限域配置信息部分由6個(gè)24×32的RAM構(gòu)成。三個(gè)存儲(chǔ)模塊統(tǒng)一編址,對(duì)于S盒存儲(chǔ)模塊前2bit進(jìn)行譯碼,后8bit進(jìn)行尋址;對(duì)于密鑰存儲(chǔ)模塊前3bit進(jìn)行譯碼,后7bit進(jìn)行尋址;對(duì)于存儲(chǔ)置換和有限域模塊,前6bit進(jìn)行譯碼,后4bit進(jìn)行尋址。訪問專用存儲(chǔ)單元時(shí)由Opcode及指令字中其他字段參加譯碼來控制對(duì)不同數(shù)據(jù)的訪問。
2.2 S盒存儲(chǔ)模塊
通過對(duì)DES、AES、IDEA等41種分組密碼算法分析可知,有30種算法使用了S盒替代操作,共計(jì)十種不同類型的S盒,十種S盒中為二種以上不同算法所使用的僅有4×4、6×4、8×8、8×32 四種S盒,其他六種不同類型的S盒查表操作可以采用以上四種S盒查表操作或邏輯運(yùn)算實(shí)現(xiàn)[5]。本設(shè)計(jì)的S盒實(shí)現(xiàn)方式是基于查找表LUT(Look Up Table)的實(shí)現(xiàn)方式,將S盒查找表存儲(chǔ)在RAM中,操作數(shù)作為讀地址。這種方法占用較多存儲(chǔ)單元,但運(yùn)算速度快,最主要的是它具有可配置性,能滿足當(dāng)前多種密碼運(yùn)算的需要,并且不進(jìn)行配置時(shí)它本身不帶有任何算法信息,使得本身更具有安全性。S盒電路結(jié)構(gòu)如圖3所示。
S盒代替電路在設(shè)計(jì)上考慮支持8×8、8×32、4×4、6×4四種查表模式,采用RAM組的設(shè)計(jì)方式,為支持32bit的數(shù)據(jù)路徑,采用了4個(gè)雙端口28×8的RAM組并聯(lián)電路,即2個(gè)28×8的RAM構(gòu)成一個(gè)RAM組。
2.3 密鑰存儲(chǔ)模塊
密鑰存儲(chǔ)模塊是由一個(gè)27×32的RAM組成,通過對(duì)如表2所示的多種分組密碼算法密鑰容量的統(tǒng)計(jì)和分析可知,深度為128的存儲(chǔ)容量可以滿足密碼運(yùn)算中密鑰的存儲(chǔ)要求。
在AES算法中每輪要進(jìn)行輪密鑰加,即“異或”運(yùn)算;在DES算法中,密鑰要進(jìn)行64位減至56位的置換,然后每一輪都要進(jìn)行移位和壓縮置換;在IDEA算法中,在每一輪運(yùn)算中其子密鑰要進(jìn)行多次的“異或”、模加、模乘??梢娒荑€或子密鑰在密碼運(yùn)算中參與了多種運(yùn)算。為了減少硬件設(shè)計(jì)的復(fù)雜度,本設(shè)計(jì)將取出的密鑰放入寄存器堆中,以便能靈活地和其他數(shù)據(jù)進(jìn)行各種運(yùn)算。
2.4 置換及有限域存儲(chǔ)模塊
置換作為擴(kuò)散的首要手段,在密碼算法中得到了廣泛應(yīng)用。例如:在DES中有六種不同種類的置換;Twofish和Serpent中有兩種不同種類的置換。本設(shè)計(jì)的bit置換單元是基于64×64的omega-flip網(wǎng)絡(luò),該網(wǎng)絡(luò)共有11級(jí),在進(jìn)行數(shù)據(jù)置換之前,要先對(duì)每一級(jí)的開關(guān)邏輯進(jìn)行配置。一級(jí)omega-flip網(wǎng)絡(luò)需要N/2bit(即32bit)控制信息決定該級(jí)開關(guān)的狀態(tài)(交叉或直通),所以該置換網(wǎng)絡(luò)進(jìn)行一次置換需要11個(gè)控制信息。如果用通用指令實(shí)現(xiàn)這些控制信息,則至少需要6條指令才能完成配置。
分組密碼應(yīng)用中,有限域乘法運(yùn)算主要在GF(28)、GF(27)及GF(29)域上。其中,在GF(28)域上的乘法運(yùn)算最為常見,占到了全部有限域乘法的54.14%。有限域乘法電路運(yùn)算前需要對(duì)乘數(shù)多項(xiàng)式和不可約多項(xiàng)式進(jìn)行靜態(tài)配置,每組136bit,其中128bit為乘法矩陣配置數(shù)據(jù),8bit作為不可約多項(xiàng)式配置數(shù)據(jù)。
由以上分析可知,本設(shè)計(jì)的bit置換和有限域模塊由6個(gè)24×32的RAM組成,它一次可以存放六種置換所需要的控制信息,四種有限域運(yùn)算所需的128bit乘法矩陣配置數(shù)據(jù)和8bit不可約多項(xiàng)式配置數(shù)據(jù)。6個(gè)RAM都是雙端口(即2個(gè)讀端口),所以給出2個(gè)相同的讀地址,6個(gè)RAM就可以同時(shí)讀出12個(gè)配置數(shù)據(jù)。64位的bit置換一次需要的11個(gè)控制信息只用一條指令就可以完成配置,大大提高了密碼運(yùn)算速度。
2.5指令設(shè)計(jì)
密碼專用微處理器擴(kuò)展了指令集,增加了密碼指令。加入專用存儲(chǔ)單元后,由于專用存儲(chǔ)單元存放的主要是配置數(shù)據(jù),結(jié)合運(yùn)算單元的特點(diǎn),在擴(kuò)展的專用密碼指令中對(duì)原指令格式進(jìn)行了改進(jìn),使之更適合于密碼算法。改進(jìn)后該指令字中的低11位被作為5位的shift域和6位的func域,其指令格式如表3所示。三個(gè)模塊的數(shù)據(jù)都由CONFIGURE指令存儲(chǔ)到專用存儲(chǔ)單元中,密鑰和S盒可以直接參與運(yùn)算,對(duì)于置換和有限域乘法,在其密碼運(yùn)算指令的shift域中添加專用存儲(chǔ)單元的地址,運(yùn)算時(shí)再將配置信息動(dòng)態(tài)配置到IU運(yùn)算單元中,這樣配置和運(yùn)算用一條指令就可以完成。
表3中:Op為操作碼,Rd為目的寄存器地址,Rs1和Rs2為源寄存器地址。type(1)作為區(qū)分bit置換和有限域。addr(4)為置換和有限域模塊4bit地址,該4bit地址與該地址加1為bit置換和有限域模塊6個(gè)RAM的2個(gè)讀地址,讀出的數(shù)據(jù)直接送入運(yùn)算單元內(nèi)部對(duì)相應(yīng)模塊進(jìn)行配置。sboxtype(2)2bit為S盒類型選擇,用來區(qū)分8×8、8×32、4×4及6×4四種S盒。Sboxa/b(1)這1bit是訪問S盒時(shí)用來選擇RAM組a或RAM組b。
3 性能分析
指令條數(shù)是影響性能的關(guān)鍵因素,設(shè)計(jì)專用密碼處理指令的目的就是減少實(shí)現(xiàn)過程中的指令條數(shù)。由于本設(shè)計(jì)所基于指令的CPI都為1,故可以通過算法所需的指令數(shù)來反映系統(tǒng)處理明文的效率。表4給出了與其他兩種處理器所需指令條數(shù)的對(duì)比情況,表中的I386為32位指令編碼的通用處理器,PVCP[6]為國防科技大學(xué)研制的一款向量結(jié)構(gòu)的密碼處理器。
從表4可以看出,本設(shè)計(jì)的指令條數(shù)與通用處理器指令條數(shù)相比減少了78%~90%,與功能相似的向量處理器相比,指令條數(shù)也減少了許多。
通過對(duì)RISC結(jié)構(gòu)進(jìn)行研究可以發(fā)現(xiàn),寄存器—寄存器的指令特性極大地降低了微處理器對(duì)大量存儲(chǔ)器中數(shù)據(jù)的處理效率。因此,結(jié)合密碼運(yùn)算的特點(diǎn)及系統(tǒng)需求,本設(shè)計(jì)將重點(diǎn)放在RISC結(jié)構(gòu)密碼專用微處理器在實(shí)現(xiàn)密碼算法過程中如何減少指令條數(shù)上。本文在RISC密碼專用微處理器中加入了專用存儲(chǔ)單元,用來存儲(chǔ)和密碼處理相關(guān)的數(shù)據(jù),如密鑰、S盒運(yùn)算中的LUT數(shù)據(jù)、有限域乘法中的配置數(shù)據(jù)及bit置換所用到的控制信息,并擴(kuò)展和改進(jìn)了其相應(yīng)的指令集,減少了指令條數(shù),提高了運(yùn)算效率。
評(píng)論