利用FPGA來(lái)實(shí)現(xiàn)RC6算法的設(shè)計(jì)與研究
ROM模塊在輸入地址和得到子密鑰數(shù)據(jù)之間,有一定的延時(shí),從地址“00”輸入,開(kāi)始讀取到輸出子密鑰總時(shí)間約一個(gè)時(shí)鐘周期左右。所以在主函數(shù)調(diào)用ROM時(shí),需提前1~2個(gè)時(shí)鐘輸入地址。
由以上5個(gè)函數(shù)和加解密控制信號(hào),可以實(shí)現(xiàn)此算法的一次計(jì)算。主函數(shù)將需要進(jìn)行計(jì)算的128位數(shù)據(jù)da—tain、2個(gè)子密鑰keyl和key2,以及加解密控制信號(hào)輸入到RFunct函數(shù)里;函數(shù)rfunct將其分配到a、b、c、d四個(gè)寄存器,計(jì)算b=(b+b+1)×b和d=(d+d+1)×d;然后調(diào)用左移函數(shù)計(jì)算templ=b5和temp2=d5,調(diào)用afunct和cfunct計(jì)算a和c,再重組a、b、c、d為dataout,結(jié)束運(yùn)算后輸出dataout。
2.3.3 加解密控制模塊
如圖4所示,RC6加解密端口定義為:
輸入端口
- reset:復(fù)位信號(hào),高電平有效。
- clk:工作時(shí)鐘。
- zset:加解密選擇信號(hào),高電平為加密操作,反之則為解密操作。
- keyin[63..O]:從ROM輸入的子密鑰輸入。
- datain[127..O]:待加解密數(shù)據(jù)的輸入端。
輸出端口
- flag:加解密結(jié)束信號(hào),高電平有效。
- keyad出[4..O]:向ROM輸入5位的地址信號(hào)。
- dataout[127..O]:RC6加解密模塊輸出的128位加解密后的數(shù)據(jù)。
模塊功能
從ROM模塊中,接收包含2個(gè)子密鑰的數(shù)據(jù)keyin,并在前32位和后32位分別為一個(gè)32位子密鑰,根據(jù)zset信號(hào)對(duì)密鑰和數(shù)據(jù)進(jìn)行加解密操作。
在主程序中利用一個(gè)狀態(tài)機(jī)來(lái)實(shí)現(xiàn)加解密運(yùn)算:第1個(gè)狀態(tài)進(jìn)行數(shù)據(jù)的初步處理,將128位數(shù)據(jù)分成4個(gè)32位數(shù)據(jù)保存在a、b、c、d這4個(gè)寄存器中;第2個(gè)狀態(tài)進(jìn)行數(shù)據(jù)的初步運(yùn)算,將結(jié)果保存在128位寄存器data中;第3個(gè)狀態(tài)和第4個(gè)狀態(tài)控制循環(huán)運(yùn)算與ROM進(jìn)行20次交互,一邊接收ROM子密鑰數(shù)據(jù),一邊對(duì)data進(jìn)行運(yùn)算,最后一個(gè)狀態(tài),接收最后2個(gè)密鑰,進(jìn)行最后的加解密運(yùn)算,得到新的a、b、c、d,重新組合成加/解密后的數(shù)據(jù),將其輸出。
2.3.4 加解密頂層模塊
RC6加解密算法的頂層模塊包括了加解密控制模塊和ROM模塊。輸入/輸出信號(hào)描述如下:
輸入信號(hào)
- reset:復(fù)位信號(hào),高電平有效。
- clk:工作時(shí)鐘。
- zset:加解密選擇信號(hào),高電平加密操作,反之則為解密操作。
- datain[l27..0]:待加/解密數(shù)據(jù)的輸入端。
輸出信號(hào)
- flag:加解密結(jié)束信號(hào),高電平有效。
- dataout[l27..0]:128位加解密后得到的數(shù)據(jù)。
此加解密模塊需要260個(gè)I/0端口,如果加入串口通信,可將128位的輸入信號(hào)和輸出信號(hào)分別利用l位的輸入端口和1位的輸出端口來(lái)實(shí)現(xiàn)數(shù)據(jù)傳輸,非常方便。
2.4 仿真結(jié)果分析
圖5為RC6加解密算法的功能仿真圖,輸入和輸出是128位。當(dāng)輸入明文為128位全零數(shù)據(jù)時(shí),得到的加密結(jié)果是36A5C38F78F781564EDF29C11EA44898,解密結(jié)果是全零。另外,還測(cè)試了其他的一些數(shù)據(jù),根據(jù)官方公布的標(biāo)準(zhǔn),此加解密模塊功能正確。
在進(jìn)行仿真時(shí),RC6加解密模塊工作時(shí)鐘周期為100ns,頻率為10 MHz。從reset低電平開(kāi)始后的第一個(gè)時(shí)鐘上升沿(0.45μs),至加解密運(yùn)算結(jié)束并輸出結(jié)束信號(hào)flag(上升沿,8.958 376μs),總共耗時(shí)約為8.5μs。
圖5 RC6加解密算法功能仿真圖
結(jié) 語(yǔ)
本文基于FPGA技術(shù),實(shí)現(xiàn)了RC6算法。整個(gè)設(shè)計(jì)包括加解密函數(shù)模塊、加解密控制模塊、ROM模塊、UART模塊、輸入/輸出控制模塊等,通過(guò)軟件的仿真,并將程序下載到FPGA芯片進(jìn)行硬件調(diào)試,驗(yàn)證了設(shè)計(jì)的正確性和有效性。
評(píng)論