陳 銳,李 冰,夏吉安,胡光永
(1.南京工業(yè)職業(yè)技術(shù)大學計算機與軟件學院,江蘇 南京 210023;2.東南大學微電子學院,江蘇 南京 210096)
近年來,物聯(lián)網(wǎng)技術(shù)被廣泛應用于各行各業(yè),如智慧醫(yī)療[1]、智慧養(yǎng)殖[2]、智慧電力[3]、智慧城市[4]等。物聯(lián)網(wǎng)技術(shù)之所以被廣泛應用,主要是因為其采集數(shù)據(jù)的隱含價值。通過GPRS[5]、NB-IoT[6]、LoRa[3]等無線通信協(xié)議將采集數(shù)據(jù)傳遞至云端,借助于大數(shù)據(jù)、人工智能等技術(shù),可實現(xiàn)數(shù)據(jù)挖掘、預測分析、智能決策等先進應用。在許多應用領(lǐng)域,物聯(lián)網(wǎng)終端設(shè)備采集的數(shù)據(jù)與用戶隱私、生命財產(chǎn)安全密切相關(guān),使得物聯(lián)網(wǎng)攻擊事件頻發(fā),如2010 年的“震網(wǎng)病毒”攻擊多國核電站[7]、2016 年Mirai 惡意代碼控制物聯(lián)網(wǎng)終端發(fā)起DDoS 攻擊導致大半個美國網(wǎng)絡(luò)癱瘓[8]。為了避免數(shù)據(jù)在傳輸過程中遭受篡改、泄露而引起安全事故,應在數(shù)據(jù)源即物聯(lián)網(wǎng)終端側(cè)對采集數(shù)據(jù)進行安全保護。數(shù)據(jù)的保護可以通過在物聯(lián)網(wǎng)終端設(shè)備上部署密碼學算法來實現(xiàn)。認證加密算法作為一類應用廣泛的密碼學算法,不僅可以保障數(shù)據(jù)的機密性,還可以保障數(shù)據(jù)的完整性。2021 年IETF 公布了RFC 8998 標準[9],提出基于國產(chǎn)分組密碼算法SM4 的兩種認證加密算法,SM4-CCM 就是其中一種。本文面向物聯(lián)網(wǎng)數(shù)據(jù)安全,以SM4-CCM 為對象,研究適合于物聯(lián)網(wǎng)資源受限場景下的數(shù)據(jù)安全保障方法。
由于物聯(lián)網(wǎng)終端資源受限,有些甚至采用電池供電,因而對算法實現(xiàn)的成本、功耗要求較高。相比于軟件實現(xiàn)計算密集的密碼學算法,硬件實現(xiàn)具有更高的性能、更低的功耗、更好的安全性、更少的ROM/RAM 資源占用等優(yōu)勢。硬件實現(xiàn)的這些優(yōu)勢促使我們研究和設(shè)計SM4-CCM 的專用硬件電路架構(gòu)。
與本文相關(guān)的文獻主要集中針對SM4 算法的某一種工作模式的硬件實現(xiàn)(如CBC 模式[10-11],CTR 模式[12])、針對SM4 算法的指令集擴展[13-14]、針對SM4 算法本身的低開銷設(shè)計[15-17]等。本文也是針對SM4 算法的一種工作模式,但是與上述文獻不同的是:①采用資源復用技術(shù),僅用一個輪函數(shù)就實現(xiàn)了CCM 模式所包含的CBC-MAC 模式和CTR模式,不僅實現(xiàn)了加解密功能,還實現(xiàn)了完整性校驗功能;②為了降低SM4-CCM 算法的功耗,引入基于Decoder-Switch-Encoder(DSE)[18]架構(gòu)的Sbox,與其他設(shè)計相比,功耗降低明顯。
SM4 算法是國家密碼局2010 年公布的分組密碼算法行業(yè)標準,2016 年成為國家標準,2021 年成為國際標準。該算法由加解密算法和密鑰擴展算法組成。加密算法和解密算法結(jié)構(gòu)相同,均由32 輪迭代和1 個反序變換組成,二者不同之處在于輸入到迭代輪函數(shù)的輪密鑰順序相反。如圖1 所示,加解密算法迭代所需的輪密鑰由密鑰擴展算法依據(jù)輸入的128 比特主密鑰經(jīng)過32 輪迭代生成,共32 個,每個輪密鑰32 比特。密鑰擴展算法與加密算法結(jié)構(gòu)相似,但是不需要反序變換。關(guān)于SM4 算法的詳細介紹可以查看文獻[19]。
圖1 SM4 加解密算法和密鑰擴展算法示意圖
CCM 算法是美國NIST 提出的分組密鑰算法認證加密工作模式,由兩種工作模式組成:用于產(chǎn)生128 比特消息認證碼的CBC-MAC 模式和用于加解密的CTR 模式。因而,CCM 算法既能對輸入數(shù)據(jù)進行加解密,又能保障數(shù)據(jù)的完整性。關(guān)于CCM 模式的詳細介紹可以查看文獻[20]。CCM 算法對數(shù)據(jù)的處理可分為四個階段:Nonce 數(shù)據(jù)的處理、AAD 數(shù)據(jù)的處理、明文數(shù)據(jù)的處理以及認證碼的生成。圖2 為按照這四個階段繪制的CCM 算法簡化流程圖,其中,AAD 為認證附加數(shù)據(jù),用于提升算法的安全性,不需要對其進行加解密。從圖2 中可以看,輸入的明文需同時送入工作于CBC-MAC 模式的SM4模塊和工作于CTR 模式的SM4 模塊。這兩個SM4模塊完全相同,只不過輸入的數(shù)據(jù)不同。
圖2 簡化之后的CCM 算法示意圖
由上述分析可知,SM4-CCM 算法可從兩個層面實現(xiàn)資源復用以降低資源開銷,即SM4 算法本身的實現(xiàn)層面和CCM 算法的實現(xiàn)層面。
基于前文分析,借助于資源復用技術(shù),本節(jié)提出一種低開銷、低功耗的SM4-CCM 硬件架構(gòu)設(shè)計。
圖3 給出了本文提出的SM4-CCM 硬件架構(gòu)。如圖3 所示,采用狀態(tài)機控制單個SM4 算法內(nèi)核,以分時復用的方式實現(xiàn)SM4-CCM 正向加密和反向驗證算法。整體架構(gòu)主要包括:SM4 算法內(nèi)核、SM4-CCM 算法控制狀態(tài)機、總線讀/寫接口、3 個控制類寄存器和5 個128 比特的數(shù)據(jù)寄存器。其中,控制寄存器控制算法開關(guān)和工作模式,數(shù)據(jù)類型寄存器指示總線寫入數(shù)據(jù)的類型,狀態(tài)寄存器存放SM4-CCM 算法狀態(tài)或者驗證結(jié)果。為了降低設(shè)計難度,SM4-CCM IP 處理完一個128 比特的數(shù)據(jù)塊即返回空閑狀態(tài)。因此需要為每次輸入的數(shù)據(jù)塊指明數(shù)據(jù)類型,依據(jù)數(shù)據(jù)塊類型是計數(shù)器初值、AAD 還是明文數(shù)據(jù)塊觸發(fā)狀態(tài)機進入不同的模式,待計算完畢之后將SM4 算法內(nèi)核的計算結(jié)果存入對應的結(jié)果寄存器中。當所有數(shù)據(jù)傳遞完畢之后,將數(shù)據(jù)類型寄存器中的“FINISH”標志位置高,那么狀態(tài)機將控制SM4 算法內(nèi)核完成最后一次計算,生成MAC值寫入CBC-MAC 結(jié)果寄存器中,上位機通過總線讀接口讀取該值。
圖3 本文提出的SM4-CCM 硬件架構(gòu)框圖
本文提出的設(shè)計支持SM4-CCM 正向加密和反向驗證,圖4 給出狀態(tài)機狀態(tài)跳轉(zhuǎn)示意圖。當SM4-CCM IP 使能時,一旦檢測到總線寫接口向總線數(shù)據(jù)寄存器寫入數(shù)據(jù)即啟動狀態(tài)機。
圖4 本文提出的SM4-CCM 控制狀態(tài)機狀態(tài)跳轉(zhuǎn)示意圖
對于SM4-CCM 正向加密采用以下執(zhí)行流程:①將密鑰存入SM4 算法內(nèi)核中的密鑰狀態(tài)寄存器;②將總線數(shù)據(jù)寄存器中的數(shù)據(jù)存入SM4 算法內(nèi)核中的加解密狀態(tài)寄存器;③依據(jù)數(shù)據(jù)類型,執(zhí)行狀態(tài)跳轉(zhuǎn),如果是計數(shù)器初值或者AAD 數(shù)據(jù),則進行CBC-MAC 模式后返回空閑狀態(tài)(狀態(tài)跳轉(zhuǎn)路徑①→②→③→⑧);如果是明文數(shù)據(jù)則進入CBCMAC 模式之后再進入CTR 模式最后返回空閑狀態(tài)(狀態(tài)跳轉(zhuǎn)路徑①→②→③→⑤→⑥);如果數(shù)據(jù)傳遞完畢,在收到數(shù)據(jù)傳遞完畢信號(數(shù)據(jù)類型寄存器中“FINISH”標志置高)則直接進入CTR 模式,對計數(shù)器初值加密之后與CBC-MAC 結(jié)果異或得到所有數(shù)據(jù)的MAC(狀態(tài)跳轉(zhuǎn)路徑①→②→④→⑥)。
對于SM4-CCM 反向驗證采用以下流程:步驟①、②與SM4-CCM 正向加密流程完全一致;③依據(jù)數(shù)據(jù)類型,執(zhí)行狀態(tài)跳轉(zhuǎn),如果是計數(shù)器初值或者AAD 數(shù)據(jù),則進行CBC-MAC 模式后返回空閑狀態(tài)(狀態(tài)跳轉(zhuǎn)路徑①→②→③→⑧);如果是密文數(shù)據(jù)則進入CTR 模式之后再進入CBC-MAC 模式最后返回空閑狀態(tài)(狀態(tài)跳轉(zhuǎn)路徑①→②→④→⑦→⑧);如果數(shù)據(jù)傳遞完畢,在收到數(shù)據(jù)傳遞完畢信號(數(shù)據(jù)類型寄存器中“FINISH”標志置高)則直接進入CTR 模式,對計數(shù)器初值加密之后與CBC-MAC 結(jié)果異或得到所有數(shù)據(jù)的MAC(狀態(tài)跳轉(zhuǎn)路徑①→②→④→⑥),最后將其與原始MAC 比較確認數(shù)據(jù)是否完整。
圖5 給出了SM4 算法內(nèi)核的架構(gòu)設(shè)計,該模塊負責完成SM4 算法的加解密算法和密鑰擴展算法。其中,密鑰擴展算法采用的是在線生成方法,因而無需存放32 個32 bit 的擴展密鑰。SM4 算法內(nèi)核中包含一個密鑰擴展/加解密共享輪函數(shù),其架構(gòu)如圖6 所示。共享輪函數(shù)交替工作于密鑰擴展模式和加解密模式。密鑰擴展模式在前,加解密模式在后。密鑰擴展模式下產(chǎn)生的狀態(tài)數(shù)據(jù)存放于密鑰擴展狀態(tài)寄存器中,其低32 bit 輸出作為加解密模式下的輪密鑰。兩種模式交替執(zhí)行32 次之后一個128 bit 的數(shù)據(jù)塊處理完畢。另外,由于SM4-CCM在CBC-MAC 和CTR 模式下輸入到SM4 算法內(nèi)核進行加密的數(shù)據(jù)是不一樣的,需要特殊處理。在CBC-MAC 模式下,總線數(shù)據(jù)與上一個CBC-MAC 結(jié)果異或之后送入加解密狀態(tài)寄存器,在輪函數(shù)32 輪的迭代之后,直接將加解密狀態(tài)寄存器中的數(shù)據(jù)輸出寫入到CBC 結(jié)果寄存器。在CTR 模式下,輸入到加解密狀態(tài)寄存器的數(shù)據(jù)是計數(shù)器的值,在輪函數(shù)32 輪迭代之后,輸出結(jié)果與總線數(shù)據(jù)寄存器異或之后寫入到CTR 結(jié)果寄存器。
圖5 SM4 算法內(nèi)核硬件架構(gòu)框圖
圖6 密鑰擴展/加解密共享輪函數(shù)硬件架構(gòu)框圖
密鑰擴展/加解密共享輪函數(shù)架構(gòu)較為簡單,如圖6 所示,輸入是4 個32 bit 數(shù)據(jù),經(jīng)過異或之后生成一個32 bit 數(shù)據(jù)。該數(shù)據(jù)將分4 個時鐘周期輪流將其各個字節(jié)送入到Sbox 中進行字節(jié)替換。替換之后的32 bit 數(shù)據(jù)依當前模式是密鑰擴展還是加解密模式,采用不同的移位和異或方式輸出并更新狀態(tài)寄存器。
2.3.1 基于DSE 架構(gòu)的Sbox
為了降低功耗,本文采用了基于Decoder-Switch-Encoder 架構(gòu)的Sbox[18]。這種Sbox 被認為是功耗最低的一種Sbox[21],但是面積較基于查找表的Sbox 或者基于復合域的Sbox 面積大。然而,由于本文只采用單個Sbox,因而對整個SM4-CCM IP的面積影響較小。其架構(gòu)如圖7 所示,輸入為1 個字節(jié)8 個信號,經(jīng)過譯碼器之后轉(zhuǎn)換成為256 個信號組成的獨熱信號。連線模塊將256 位的獨熱信號按照SM4 標準中定義的替換表固定連接輸入和輸出。經(jīng)過連線模塊輸出依然是256 位的獨熱信號,再經(jīng)過編碼器識別出256 位的獨熱信號1 的位置,將其轉(zhuǎn)換成8 比特的位置索引值。獨熱信號的引入使得Sbox 內(nèi)部信號翻轉(zhuǎn)率降低,而功耗與信號翻轉(zhuǎn)率成正比,因而可以降低功耗。
圖7 基于Decoder-Switch-Encoder 架構(gòu)的Sbox
為了評估本文提出的SM4-CCM 算法硬件架構(gòu)的性能、面積和功耗,本文采用Verilog HDL 對其進行了描述,采用Synopsys EDA 工具鏈對其進行功能驗證和仿真以獲得吞吐率報告、綜合以獲得面積報告、門級功耗分析以獲得功耗報告。
圖8 給出了SM4 模塊的仿真結(jié)果,當輸入數(shù)據(jù)塊和密鑰均為0123456789ABCDEFFEDCBA98765 43210 時,加密結(jié)果應為681EDF34D206965E86 B3E94F536E4246,仿真截圖證明SM4 模塊功能的正確性。
圖8 SM4 模塊的仿真結(jié)果
圖9 給出了SM4-CCM 仿真結(jié)果,實驗數(shù)據(jù)來源于文獻[9],Nonce 數(shù)值為00001234567800000000 ABCD,密鑰為 0123456789ABCDEFFEDCBA9876 543210,明文為AAAAAAAAAAAAAAAABBBBBB BBBBBBBBBBCCCCCCCCCCCCCCCCDDDDDDDDD DDDDDDDEEEEEEEEEEEEEEEEFFFFFFFFFFFFF FFFEEEEEEEEEEEEEEEEAAAAAAAAAAAAAAAA,AAD 數(shù)據(jù)為FEEDFACEDEADBEEFFEEDFACEDEADBEEFABADDAD2,最終的認證碼應該為16842D4FA186F56AB33256971FA110F4,圖9 仿真截圖證明本文設(shè)計的SM4-CCM 硬件電路的功能正確性。
圖9 SM4-CCM 的仿真結(jié)果
表1 給出了本文設(shè)計的性能評估結(jié)果。在90 nm工藝100 MHz 時鐘頻率下,本文設(shè)計的硬件電路吞吐率達到32.12 Mbps,面積為31 428 門,而功耗只有1.338 mW。
表1 本文設(shè)計的性能評估結(jié)果
為了獲得較為精確的功耗分析結(jié)果,本文首先采用門級后仿真的方式獲得SAIF 文件,然后將其載入到功耗分析工具PrimeTime-PX 進行分析,由此獲得了較為精確的功耗分析報告,具體結(jié)果如表2 所示。從表2 可以看出,本文架構(gòu)的動態(tài)功耗、靜態(tài)功耗和泄露功耗分別為84.2 μW、1.223 mW 和30.96 μW,三者分別占了總功耗的6.29%、91.4%和2.31%。
表2 本文設(shè)計的門級功耗分析結(jié)果
表3 羅列本文架構(gòu)與參考文獻的比較結(jié)果。從表中可以看出,僅有本文設(shè)計實現(xiàn)了SM4-CCM 算法,并且本文設(shè)計的功能涵蓋列表中所有文獻的功能。與文獻[15,22]相比,本文設(shè)計功耗最低,但是由于SM4-CCM 算法復雜度相較于SM4 算法高很多,使得本文設(shè)計的面積開銷較二者高。雖然本文架構(gòu)的吞吐率較其他文獻低,但是考慮到本文面向的是物聯(lián)網(wǎng)領(lǐng)域,而該領(lǐng)域的無線通信協(xié)議對數(shù)據(jù)速率要求較低(比如LoRa 的數(shù)據(jù)速率僅為250 kbps),因而可得出以下結(jié)論:本文提出的SM4-CCM 硬件架構(gòu)是一種具有低開銷、低功耗、吞吐率適中、完全滿足物聯(lián)網(wǎng)應用需求的設(shè)計。
表3 本文設(shè)計與參考文獻的性能比較
最后,為了證明本文提出的硬件架構(gòu)功能的正確性,我們將其實現(xiàn)并下載到DE10-Standard FPGA開發(fā)板,然后通過Signal Tap 邏輯分析儀抓取FPGA芯片運行結(jié)果,原型驗證環(huán)境如圖10(a)所示。我們將RFC 8998 提供的SM4-CCM 測試向量以MIF文件的方式載入到FPGA 中,然后通過邏輯分析儀抓取波形。圖10(b)所示的波形抓取結(jié)果與RFC 8998 中的結(jié)果完全一直,證明本文提出的硬件架構(gòu)的功能正確性。
圖10 本文設(shè)計的FPGA 原型驗證環(huán)境和抓取波形
面向物聯(lián)網(wǎng)終端數(shù)據(jù)安全保護需求,本文以SM4-CCM 認證加密算法為對象,借助于資源復用技術(shù),研究和設(shè)計了一款SM4-CCM 算法專用硬件架構(gòu)。在TSMC 90 nm 工藝下的實驗結(jié)果顯示,本文提出的硬件架構(gòu)設(shè)計的面積開銷、功耗、吞吐率分別為31428 門、1.338 mW、32.12 Mbps@ 100MHz。實驗結(jié)果表明,本文提出的架構(gòu)設(shè)計具有低開銷、低功耗、吞吐率適中的特點,能夠滿足物聯(lián)網(wǎng)終端對數(shù)據(jù)保護的應用需求。后續(xù)研究將面向物聯(lián)網(wǎng)數(shù)據(jù)安全,研究和設(shè)計更多的滿足物聯(lián)網(wǎng)應用需求的密碼算法IP。