明洋,曲英杰
(青島科技大學(xué)信息科學(xué)技術(shù)學(xué)院,山東青島 266061)
隨著工業(yè)互聯(lián)網(wǎng)和物聯(lián)網(wǎng)關(guān)鍵技術(shù)的發(fā)展,越來越多的嵌入式設(shè)備應(yīng)用于工業(yè)生產(chǎn)和社會應(yīng)用中,隨之而來的網(wǎng)絡(luò)安全和隱私問題也愈發(fā)嚴(yán)重[1-2],IoT(Internet of Things,物聯(lián)網(wǎng))設(shè)備機(jī)器及其傳感器所產(chǎn)生的大量的敏感數(shù)據(jù)需要通過加密的方式進(jìn)行保存和傳輸,但是拘泥于其超低的功耗和有限的計(jì)算資源無法進(jìn)行全面有效地部署[3]。
加解密算法可以用軟件和硬件兩種方式實(shí)現(xiàn),使用軟件實(shí)現(xiàn),利用CPU 中原有的計(jì)算資源去做數(shù)據(jù)加解密的效率是非常低的。對延遲敏感的物聯(lián)網(wǎng)設(shè)備,為其擴(kuò)展加解密專用的協(xié)處理器是提高加解密效率的有效解決方式[4-7]。文獻(xiàn)[8]基于ARM 平臺設(shè)計(jì)實(shí)現(xiàn)了SM2 算法擴(kuò)展的SOC,但是在實(shí)際應(yīng)用中,為了提高加密效率,經(jīng)常會使用多種算法復(fù)合加密的方式進(jìn)行[9-10],AES 和RSA 算法分屬對稱和不對稱密碼算法,在國際上使用廣泛?;谶@兩種密碼算法設(shè)計(jì)開發(fā)密碼協(xié)處理器,搭配蜂鳥E203 MCU 組成適用于嵌入式應(yīng)用場景的信息安全SOC。
在開源蜂鳥E203 MCU基礎(chǔ)上,通過EAI(Extension Accelerator Interface)接口設(shè)計(jì)擴(kuò)展AES、RSA 算法核,整個(gè)SOC 的體系結(jié)構(gòu)如圖1 所示,EAI 接口是通過RISC-V 指令集中預(yù)留的Custom 指令擴(kuò)展協(xié)處理器的接口。協(xié)處理器可通過EAI 接口中的存儲器訪存通道調(diào)用E203 核內(nèi)的存儲器資源,配合E203 內(nèi)核完成加解密的任務(wù)。
圖1 SOC系統(tǒng)架構(gòu)
RISC-V 32 位指令集中預(yù)留了4 條Custom 指令,指令12-14 位為控制讀源寄存器和寫目標(biāo)寄存器的Funct3 區(qū)間,25-31 位為作為額外編碼空間的Funct7區(qū)間。在本設(shè)計(jì)中,AES 使用Custom0,RSA 使用Custom1,并通過對Funct3 和Funct7 區(qū)間進(jìn)行編碼;如表1 與表2 所示,擴(kuò)展出加載數(shù)據(jù),開始加解密以及寫回?cái)?shù)據(jù)的對應(yīng)指令。
表1 Custum0擴(kuò)展指令定義
表2 Custom1擴(kuò)展指令定義
如圖2 所示,密碼協(xié)處理器核A&R(AES 和RSA)在蜂鳥E203 MCU 兩級流水線的位置與核內(nèi)的ALU(Arithmetic and Logic Unit,算術(shù)邏輯單元)平行。當(dāng)譯碼器譯到Custom 指令時(shí),就會將指令以及所用的操作數(shù)通過EAI 接口轉(zhuǎn)發(fā)到協(xié)處理器中進(jìn)行二次譯碼,完成對協(xié)處理的控制;通過EAI 接口的存儲器訪問通道占用LSU(Load Storage Unit,讀寫存儲器單元),訪存MCU 內(nèi)部的存儲器資源,完成數(shù)據(jù)在MCU 與協(xié)處理之間的傳輸。
圖2 協(xié)處理器在MCU流水線的位置
如圖3 所示,協(xié)處理器核主要由控制單元、寄存器堆和AES、RSA 算法核組成。譯碼器在指令請求通道中譯到協(xié)處理器對應(yīng)的Custom 指令,會立刻通過指令反饋通道給MCU 反饋,進(jìn)入工作態(tài)或者進(jìn)入數(shù)據(jù)傳輸狀態(tài)。協(xié)處理器內(nèi)部設(shè)置了5×1 024 bit的寄存器堆,在訪問DTCM(Data Tightly Coupled Memory,數(shù)據(jù)緊耦合存儲器)存儲的數(shù)據(jù)時(shí),將數(shù)據(jù)暫存在寄存器堆中,等待分組數(shù)據(jù)完整加載后,再傳至AES、RSA 算法核進(jìn)行運(yùn)算。數(shù)據(jù)傳輸完畢后,就會關(guān)閉存儲器訪問通道,使協(xié)處理器單獨(dú)工作。
圖3 協(xié)處理器系統(tǒng)架構(gòu)圖
為了更高效地利用EAI 接口的存儲器訪存通道,在協(xié)處理內(nèi)部設(shè)計(jì)了地址自增的邏輯,使用EAI接口中的32 位數(shù)據(jù)總線,協(xié)處理器可以在32 個(gè)周期內(nèi)完成1 024 位數(shù)據(jù)的傳輸。當(dāng)協(xié)處理器完成加解密運(yùn)算后,會將結(jié)果保存到協(xié)處理器的Regfile中,AES、RSA 算法核可以繼續(xù)進(jìn)行下一組任務(wù),控制器單獨(dú)響應(yīng)程序中的寫回指令,將計(jì)算結(jié)果寫回到MCU,整個(gè)過程在MCU 內(nèi)軟件程序的控制下完成。
AES 算法主要分兩部分——加解密算法和密鑰擴(kuò)展算法,是迭代型分組密碼算法。加解密運(yùn)算主要由四種變換組成,分別是SubBytes(S 盒變換)、ShiftRow(行移位變換)、MixColumn(列混合變換)、AddRoundKey(輪密鑰加變換)[11]。該文實(shí)現(xiàn)的是128 bit 密鑰長度的AES 算法,前Nr輪操作相同,Nr+1 輪所做操作缺少M(fèi)ixCloumn,但仍可通過復(fù)用前Nr輪的邏輯電路進(jìn)行運(yùn)算。
為了降低ASIC(Application Specific Integrated Circuit,專用集成電路)實(shí)現(xiàn)的資源開銷,摒棄了使用寄存器堆或者RAM(Random Access Memory,隨機(jī)存取存儲器)單元實(shí)現(xiàn)S 盒變換的方式,而采用組合邏輯實(shí)現(xiàn)。除此之外,為了盡量減少核內(nèi)寄存器的使用,如圖4 所示,采用在線實(shí)時(shí)產(chǎn)生輪密鑰的方法,大量減少保存輪密鑰所需的寄存器,且明文密文共享一個(gè)寄存器。整個(gè)AES 核僅使用4 組128 位的寄存器,較傳統(tǒng)實(shí)現(xiàn)方法,節(jié)省了9 組128 位的寄存器。對于AES 算法中多輪迭代的結(jié)構(gòu),僅需實(shí)現(xiàn)一輪電路通過FSM(Finite State Machine,有限狀態(tài)機(jī))控制分時(shí)復(fù)用,大大減少了電路規(guī)模。同時(shí),為了保證AES 的加解密速度,并沒有采用S 盒復(fù)用的架構(gòu),AES 核內(nèi)同時(shí)實(shí)例化了16 個(gè)S盒,保留了AES 算法內(nèi)部固有的并行性,使得輪邏輯可以高速運(yùn)行。
圖4 AES 的數(shù)據(jù)路徑
RSA 作為一種經(jīng)典的非對稱密碼算法,其可靠性在于大數(shù)的因式分解,其系統(tǒng)核心是模冪運(yùn)算P=ME(modn)。設(shè)計(jì)采用基于改進(jìn)的蒙哥馬利算法的R-L 掃描法實(shí)現(xiàn)模冪運(yùn)算,算法需要兩個(gè)操作數(shù)進(jìn)行模乘循環(huán)n次實(shí)現(xiàn)。如算法1 所示,模乘主要是通過基2 的蒙哥馬利算法,轉(zhuǎn)化成模加運(yùn)算和移位操作實(shí)現(xiàn)。
算法1:(改進(jìn)的蒙哥馬利算法)
如圖5 所示,RSA 算法核由控制模塊(Control),蒙哥馬利模乘模塊(MM)和寄存器堆(Regfile)組成,參數(shù)N,C需要在軟件部分提前計(jì)算,通過Indata 端口直接輸入至RSA 核中,由RSA 核完成模冪運(yùn)算最終完成加解密流程。為了保證RSA 核的運(yùn)算速度,MM 模塊內(nèi)部采用脈動陣列結(jié)構(gòu)來解決長進(jìn)位鏈的問題。為了減小MM 的面積資源開銷,僅實(shí)現(xiàn)一行脈動陣列結(jié)構(gòu),將1 024 位加法分成32 個(gè)32 位加法器模塊,并進(jìn)行復(fù)用。
圖5 RSA的系統(tǒng)架構(gòu)
考慮到加法器模塊的復(fù)用,對蒙哥馬利模乘模塊中的加法器進(jìn)行了重新設(shè)計(jì),如圖6 所示,將qi的計(jì)算放到模塊外,模塊由兩個(gè)32 bit 的加法器組成,中間插入兩級寄存器,形成流水線,分別計(jì)算Ri中的兩次加法。
圖6 加法器的結(jié)構(gòu)設(shè)計(jì)
在華虹40 nm 工藝下單獨(dú)對AES 進(jìn)行綜合,并對其進(jìn)行靜態(tài)時(shí)序分析,其主頻可達(dá)400 MHz,面積為30 805 μm2,經(jīng)過詳細(xì)的物理設(shè)計(jì)后,版圖的面積為44 944 μm2(212 μm×212 μm),版圖后的靜態(tài)時(shí)序分析結(jié)果與綜合后的一致。根據(jù)設(shè)計(jì)中的電路結(jié)構(gòu),13 個(gè)時(shí)鐘周期即可完成一次128 bit 的加/解密,估算數(shù)據(jù)吞吐率為3.9 Gbps,對比同為邏輯復(fù)用結(jié)構(gòu)的低開銷ASIC 實(shí)現(xiàn)AES 算法的方案,如表3 所示,雖然面積要比同為低開銷設(shè)計(jì)的相關(guān)研究要大,但數(shù)據(jù)吞吐率與面積之比,該設(shè)計(jì)仍有較大優(yōu)勢。造成這一現(xiàn)象的原因主要是設(shè)計(jì)的側(cè)重點(diǎn)不同,如文獻(xiàn)[12]瞄準(zhǔn)的是超小面積,而該文的目的是在速度與面積之間達(dá)到平衡。
表3 AES ASIC實(shí)現(xiàn)與其他文獻(xiàn)的對比
設(shè)計(jì)中AES 算法核已在SMIC180 nm 工藝下順利流片,圖7為流片后的顯微照片。由于IO pad(Input&Output pad,輸入輸出端口)數(shù)量和性能的限制,設(shè)計(jì)改為8 bit輸入輸出,芯片尺寸為1 256 μm×1 028 μm,主頻可達(dá)100 MHz,數(shù)據(jù)吞吐率達(dá)980 Mbps。
圖7 AES芯片顯微照片
單獨(dú)對RSA 算法核在華虹40 nm 工藝下綜合,所用標(biāo)準(zhǔn)單元面積為94 552 μm2,主頻可達(dá)到100 MHz,對其進(jìn)行詳細(xì)的物理設(shè)計(jì)后,面積為129 600 μm2(360 μm×360 μm),版圖后的靜態(tài)時(shí)序分析結(jié)果與綜合后一致,根據(jù)蒙哥馬利模乘模塊的運(yùn)算流程分析,1 024 bit RSA 共需執(zhí)行1 026 次模乘,單次模乘所需要的時(shí)鐘周期數(shù)為[2×(1 024+2)+1],可以估算一次RSA 加密所需要的時(shí)間為20.53 ms,吞吐率估算為49.87 kbps,對比同為低開銷ASIC 實(shí)現(xiàn)RSA 算法的方案,如表4 所示,所用等效門數(shù)與文獻(xiàn)[15]相比減少了29.5%。
表4 RSA ASIC實(shí)現(xiàn)與文獻(xiàn)的對比
在Xlinx-Artix 7 系列開發(fā)板上做SOC 的軟硬件聯(lián)合測試,測試之前分別編寫使用協(xié)處理器和不使用協(xié)處理器的C 程序,使用RISC-V 的編譯工具編譯后,通過JTAG(Joint Test Action Group,聯(lián)合測試工作組)接口將其上載到FPGA(Field Programmable Gate Array,可編程門陣列)開發(fā)板上。通過測試可見,AES、RSA協(xié)處理核可以正常進(jìn)行加解密,如表5、6所示,與沒有使用協(xié)處理器的AES 和RSA 算法程序相比,128 bit AES 加解密所用的處理器周期數(shù)減少為235.42,1 024 bit RSA 所用的處理器周期數(shù)減少了240.92。
表5 AES 有/無擴(kuò)展指令所用時(shí)鐘周期和指令條數(shù)對比
表6 RSA有/無擴(kuò)展指令所用指令條數(shù)核時(shí)鐘周期對比
面向工業(yè)互聯(lián)網(wǎng)和物聯(lián)網(wǎng)的加密應(yīng)用場景,使用EAI 接口將AES、RSA 算法核擴(kuò)展至蜂鳥E203 MCU上,完成了復(fù)合加密場景的RISC-V SOC 的設(shè)計(jì),針對協(xié)處理器核的ASIC 實(shí)現(xiàn)面積資源與運(yùn)算速度之間的平衡設(shè)計(jì)。在SOC 的軟硬件測試中可以看出,相對于無協(xié)處理器,AES 和RSA 的處理速度都得到了很大的提升。