徐欣
摘要:結(jié)合具體項(xiàng)目對(duì)信息安全的需求,研究了AES算法的實(shí)現(xiàn)過程。針對(duì)算法涉及的數(shù)論知識(shí)及實(shí)現(xiàn)步驟,對(duì)加解密算法進(jìn)行了綜合優(yōu)化。在此基礎(chǔ)上,設(shè)計(jì)了一種基于AXIStream接口的加密IP核,該IP核主要是針對(duì)實(shí)際項(xiàng)目中需要對(duì)流數(shù)據(jù)進(jìn)行快速可靠的加密要求所設(shè)計(jì)的。結(jié)合實(shí)際項(xiàng)目場景以及AXIStream接口特點(diǎn),IP核的設(shè)計(jì)可最大限度地減少資源消耗。IP核使用兩個(gè)通道分別進(jìn)行加密與解密的并行實(shí)現(xiàn),經(jīng)過Testbench模型仿真測(cè)試以及開發(fā)板真實(shí)環(huán)境的測(cè)試,其吞吐率可達(dá)1.12Gb/s,完全符合對(duì)速率要求較高的項(xiàng)目應(yīng)用要求。
關(guān)鍵詞關(guān)鍵詞:AES加密算法;IP核;AXIStream
DOIDOI:10.11907/rjdk.162271
中圖分類號(hào):TP309.7文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào)文章編號(hào):16727800(2017)001015402
引言
隨著集成電路的發(fā)展、FPGA結(jié)構(gòu)與功能的改變,基于FPGA的開發(fā)模式也發(fā)生了很多變化。從傳統(tǒng)使用單一的邏輯編程,發(fā)展到如今在SOC上大量使用各種知識(shí)產(chǎn)權(quán)核(IP核)進(jìn)行設(shè)計(jì)。特別是在2011年,Xilinx推出了Zynq7000首款可擴(kuò)展處理平臺(tái)(EPP)[1],將業(yè)界標(biāo)準(zhǔn)的ARM雙核CortexA9 Core處理系統(tǒng)與Xilinx可擴(kuò)展的28nm FPGA架構(gòu)整合在一起。因此,可以預(yù)見未來的開發(fā)模式將為“嵌入式+FPGA”。文獻(xiàn)[2]、[3]提出了基于AXI總線的IP核設(shè)計(jì),但其僅采用AXI總線中的AXI4接口,而在一些對(duì)速率要求比較苛刻的項(xiàng)目中,所用IP核的接口必須是更為高效的AXIStream接口。在設(shè)計(jì)加密IP核的同時(shí),需要結(jié)合實(shí)際IP核所要運(yùn)用的項(xiàng)目場景,考慮外圍可能連接的IP核,最大化地使用官方IP核,進(jìn)行自定義IP核的最優(yōu)化設(shè)計(jì),而這些在目前許多加密IP核設(shè)計(jì)中很難找到。
本文IP核的設(shè)計(jì)思想是在某軍工項(xiàng)目的調(diào)試過程中得到的,其設(shè)計(jì)的IP核并不是簡單地和SOC相連,而是通過AXISteam接口與DMA的IP核相連,對(duì)DMA輸出的數(shù)據(jù)進(jìn)行加密,加密后的事務(wù)同樣通過AXIStream總線發(fā)送給其它總線矩陣。DMA有一定緩沖區(qū),由于加解密IP核與DMA相連,通過計(jì)算分析,自定義的加解密IP核不需要任何額外的存儲(chǔ)空間進(jìn)行加解密數(shù)據(jù)存儲(chǔ),進(jìn)一步簡化了IP核設(shè)計(jì)。
1AXIStream接口介紹
AXIStream接口是一種用來連接需要交換數(shù)據(jù)的兩個(gè)部件的標(biāo)準(zhǔn)接口,它可以用于連接一個(gè)產(chǎn)生數(shù)據(jù)的主機(jī)和一個(gè)接收數(shù)據(jù)的從機(jī),也可以用于連接多個(gè)主機(jī)和從機(jī)。AXIStream接口符合AXI(Advanced Xetensible Interface)總線標(biāo)準(zhǔn)。AXI是一種總協(xié)議,該協(xié)議是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture)3.0協(xié)議中最重要的部分,是一種面向高性能、高帶寬、低延遲的片內(nèi)總線[4]。AXI 總線有讀地址和控制、讀數(shù)據(jù)、寫地址和控制、寫數(shù)據(jù)、寫響應(yīng)5個(gè)通道。AXI總線包括AXI4、AXILite和AXIStream接口,其中AXI4和AXILite有完整的5個(gè)通道,AXIStream不包含地址通道,只有3個(gè)通道。AXI4主要面向高性能地址映射通信的需求;AXI4Lite是一個(gè)簡單的吞吐量地址映射性通信總線;AXIStream接口不存在地址映射,所以它的突發(fā)數(shù)據(jù)量是不受限制的,這也導(dǎo)致了基于AXIStream接口的IP核較一般AXI接口的IP核傳輸速率更快。AXIStream主要應(yīng)用于高速數(shù)據(jù)流的傳輸。
2AES算法基本原理
美國國家標(biāo)準(zhǔn)技術(shù)研究所(NIST)在2001發(fā)布了高級(jí)加密標(biāo)準(zhǔn)(AES),用于取代之前的DES[5]。AES算法使用對(duì)稱密鑰,其加解密的密鑰相同,其實(shí)現(xiàn)也非常方便快捷。AES算法可以使用128bit、192bit或256bit的密鑰一次性加密128bit的分組長度。本文僅對(duì)128bit密鑰加密128bit分組的情況進(jìn)行介紹。AES的加密過程包括字節(jié)替換、行移位、列混淆、輪密鑰加4個(gè)過程,而解密過程正好是4個(gè)步驟的逆過程:逆字節(jié)替換、逆行移位、逆列混淆和輪密鑰加。無論是加密過程中明文與密鑰的運(yùn)算,還是解密過程中密文與密鑰的運(yùn)算都是以4*4的矩陣為單位進(jìn)行輪循環(huán)運(yùn)算,并且都是在有限域上進(jìn)行計(jì)算。
3AXIStream接口加密模塊設(shè)計(jì)
該加密IP核的設(shè)計(jì)來源是用DMA進(jìn)行數(shù)據(jù)傳輸?shù)捻?xiàng)目,所以設(shè)計(jì)的IP核對(duì)外接口是與DMA的IP核進(jìn)行匹配,圖1為自定義IP核與DMA的連接示意圖。從圖中可以看出,AXIStream接口比AXI4、AXILite接口的連接線要少,因此無論是硬件還是軟件實(shí)現(xiàn)起來都更加方便。
AES的IP核設(shè)計(jì)了4個(gè)AXIStream接口,s_axis_rxd_en和m_axis_txd_en用于數(shù)據(jù)的接收并且發(fā)送加密數(shù)據(jù),s_axis_rxd_de和m_axis_txd_de用于接收加密數(shù)據(jù)并且發(fā)送解密后的數(shù)據(jù)。
AES的IP核設(shè)計(jì)不僅在接口方面要考慮與DMA的對(duì)接,更重要的是在進(jìn)行IP核內(nèi)部設(shè)計(jì)時(shí),要考慮到DMA的特點(diǎn)以及其它擁有流接口的IP核特點(diǎn),并同時(shí)考慮到FPGA內(nèi)部資源的充分利用以及損耗情況。AES加密算法的優(yōu)化設(shè)計(jì)如下:
(1) 很多AES的IP核設(shè)計(jì),如文獻(xiàn)[6]提出的設(shè)計(jì),由于數(shù)據(jù)位寬不匹配,需要給IP核設(shè)置一系列的FIFO進(jìn)行數(shù)據(jù)緩存。這不但造成了FPGA資源的消耗,而且也會(huì)給設(shè)計(jì)上帶來更多困難。 Xilinx提供的DMA給出了最多23bit的緩存,可以用于數(shù)據(jù)的暫時(shí)存儲(chǔ)區(qū),待數(shù)據(jù)位寬為128bit后,再傳輸?shù)紸ES的IP核內(nèi)進(jìn)行加密。
(2) AES的字節(jié)替換需要用到S盒,普通AES設(shè)計(jì)中的S盒一般使用查找表形式,加解密需要兩個(gè)不同的S盒,這將消耗很大的邏輯資源。所以,根據(jù)FPGA的基本結(jié)構(gòu)特點(diǎn)使用RAM塊進(jìn)行S盒設(shè)計(jì),通過地址訪問的方式實(shí)現(xiàn)字節(jié)置換。RAM塊是FPGA內(nèi)部的塊資源,資源使用時(shí)不會(huì)損耗任何邏輯資源。
(3) 使用一次生成所有擴(kuò)展密鑰的方式。擴(kuò)展密鑰總共只需176字節(jié)進(jìn)行存儲(chǔ),雖然消耗了少量資源,卻可以節(jié)省等待密鑰生成的時(shí)間。
(4) 深入研究AES的加解密流程發(fā)現(xiàn),雖然AES的解密過程與加密過程有所不同,但是通過合適的變換,可以將AES加解密過程使用同一套流程實(shí)現(xiàn),從而減少了硬件實(shí)現(xiàn)難度,降低了資源消耗。
4仿真波形與測(cè)試
設(shè)計(jì)使用Xilinx最新的開發(fā)集成環(huán)境Vivado進(jìn)行邏輯實(shí)現(xiàn)以及相關(guān)的仿真測(cè)試。設(shè)計(jì)采用層次化設(shè)計(jì)思想,將復(fù)雜的設(shè)計(jì)簡化為模塊化設(shè)計(jì),不但使代碼的編寫和管理更加方便,而且有利于加解密的并行化實(shí)現(xiàn)。
由于FPGA的綜合實(shí)現(xiàn)耗時(shí)周期較長,所以設(shè)計(jì)時(shí)先采用不需要硬件的Testbench模型進(jìn)行功能仿真測(cè)試。圖2為功能仿真測(cè)試結(jié)果,輸入數(shù)據(jù)包括128bit明文與128bit密鑰,在一個(gè)時(shí)鐘周期中即可對(duì)數(shù)據(jù)進(jìn)行一輪AES加密操作。通過對(duì)加密結(jié)果的分析,所設(shè)計(jì)的基于AXIStream接口的AES IP核可以成功實(shí)現(xiàn)對(duì)數(shù)據(jù)的加密功能。
為了獲取IP核的真實(shí)加密速率,使用Vivado搭建了基本的硬件測(cè)試平臺(tái)。MicroBlaze是Xilinx提供的一個(gè)處理器軟核,利用其產(chǎn)生明文數(shù)據(jù)和初始密鑰。MicroBlaze通過DMA將明文和密鑰傳輸?shù)紸ES的IP核進(jìn)行加密,其使用的硬件平臺(tái)為Artix-7開發(fā)板。通過測(cè)試計(jì)算,在FPGA主時(shí)鐘為200MHZ、總線寬度為64bit的條件下,AES加密模塊的加密速度可達(dá)3.04Gb/s,而整體系統(tǒng)的加密速度可達(dá)1.12Gb/s。設(shè)計(jì)的AES加密IP核總共只需要1 392個(gè)Slice LUTs、189個(gè)Slice Registers。與文獻(xiàn)[2]的門數(shù)高達(dá)13.5K,文獻(xiàn)[7]需要3 012個(gè)Slice LUTs相比,可看出優(yōu)化后的加解密算法能夠有效減少資源消耗。
加密模塊與整體系統(tǒng)的加密速率不同是由DMA的傳輸造成的。Xilinx提供的DMA在32bit位寬、100MHZ系統(tǒng)中的極限傳輸速率為400Mb/s。由此可以判斷,在200MHZ、64bit位寬的系統(tǒng)中,DMA核最高的理論傳輸速率只能達(dá)到1.6Gb/s,所以整個(gè)系統(tǒng)的加密速度只能達(dá)到1.12Gb/s。