史興強(qiáng),劉夢(mèng)影,王芬芬
(1.中國(guó)電子科技集團(tuán)第五十八研究所,江蘇 無(wú)錫 214035;2.中科芯集成電路有限公司,江蘇 無(wú)錫 214072)
當(dāng)今世界隨著全球信息化和網(wǎng)絡(luò)化的高速發(fā)展,信息安全問(wèn)題也與日俱增,信息安全問(wèn)題在各個(gè)領(lǐng)域越來(lái)越受到重視[1],汽車(chē)行業(yè)尤其顯著。當(dāng)前社會(huì)對(duì)于汽車(chē)的需求往往更偏向于功能的提升,因此汽車(chē)電子系統(tǒng)日漸復(fù)雜且越來(lái)越數(shù)字化,汽車(chē)電子系統(tǒng)不僅需要具備運(yùn)算更強(qiáng)的控制單元,更高速的數(shù)據(jù)傳輸功能[2],更集成了無(wú)人駕駛、物聯(lián)網(wǎng)和5G 等新技術(shù),因此,安全、智能、可靠和低碳環(huán)保的網(wǎng)聯(lián)汽車(chē)必然是全球汽車(chē)行業(yè)共同的發(fā)展趨勢(shì)[3]。汽車(chē)電子系統(tǒng)復(fù)雜化和數(shù)字化導(dǎo)致車(chē)載電子系統(tǒng)的數(shù)量越來(lái)越多,從而使得車(chē)輛越來(lái)越易受到網(wǎng)絡(luò)安全攻擊。汽車(chē)系統(tǒng)不僅存儲(chǔ)大量的用戶(hù)數(shù)據(jù)(包括車(chē)輛行駛記錄、車(chē)主個(gè)人信息和導(dǎo)航數(shù)據(jù)等),而且具有眾多ECU,用戶(hù)數(shù)據(jù)的竊取和篡改或者ECU 非法替換等都會(huì)造成經(jīng)濟(jì)甚至生命的損失,因此對(duì)汽車(chē)系統(tǒng)進(jìn)行信息安全防御是非常必要的。
近年來(lái),針對(duì)如何加強(qiáng)汽車(chē)信息安全,許多研究提出相關(guān)方案。王玲[4]提出了一種基于AES 的RKE 單向認(rèn)證協(xié)議改進(jìn)的雙向通信認(rèn)證協(xié)議,采用一個(gè)固定密鑰和一個(gè)動(dòng)態(tài)密鑰的AES 加密來(lái)保證數(shù)據(jù)的安全性,并將該協(xié)議應(yīng)用于免鑰門(mén)禁技術(shù),但是該協(xié)議不存在對(duì)密鑰的管理機(jī)制,存在密鑰泄露的風(fēng)險(xiǎn)。劉鵬[5]提出了一種適用于短碼場(chǎng)景的車(chē)聯(lián)網(wǎng)安全通信方案,采用ECC 和AES 結(jié)合的混合加密方案,選用QR 碼完成數(shù)據(jù)檢錯(cuò)糾錯(cuò),實(shí)現(xiàn)安全、可靠、高吞吐的數(shù)據(jù)傳輸。孫怡琳[2]在XXTEA 異或加密算法和HMAC 認(rèn)證算法的技術(shù)基礎(chǔ)上,設(shè)計(jì)了一種動(dòng)態(tài)加密機(jī)制來(lái)實(shí)現(xiàn)車(chē)內(nèi)網(wǎng)絡(luò)CAN 總線的安全通信。王龍[3]設(shè)計(jì)了一個(gè)面向汽車(chē)的數(shù)字身份管理系統(tǒng),可以對(duì)車(chē)輛本身和主要電子零部件的數(shù)字身份進(jìn)行有效識(shí)別和管理。
本文基于AES 算法,設(shè)計(jì)了一個(gè)適用于SHE 規(guī)范的安全加密電路。該電路支持ECB 和CBC 模式下的AES-128 加密解 密、CMAC 生成和驗(yàn)證、Miyaguchi-Preneel 壓縮算法等。此外,該安全加密模塊符合SHE 規(guī)范標(biāo)準(zhǔn),支持密鑰管理、運(yùn)算隔離等保護(hù)措施,具有嚴(yán)格的訪問(wèn)權(quán)限,由硬件域控制加密密鑰的管理,保護(hù)密鑰免受軟件攻擊,提高設(shè)備信息安全性能,以獲得比軟件執(zhí)行更好的硬件性能和保護(hù)。
AES 算法是2001 年由NIST(美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究所)為替代數(shù)據(jù)加密標(biāo)準(zhǔn)(Data Encryption Standard,DES)而發(fā)布的新一代數(shù)據(jù)高級(jí)加密標(biāo)準(zhǔn)[6]。該算法是由比利時(shí)科學(xué)家Joan Daemen 和Vincent Rijmen 提出的,它是一種明文分組長(zhǎng)度和秘鑰長(zhǎng)度均可變的分組密碼算法,也是一個(gè)對(duì)稱(chēng)分組算法。其明文分組長(zhǎng)度和秘鑰長(zhǎng)度都可獨(dú)立地設(shè)定為128、192 或256 比特[7],與秘鑰相關(guān)的迭代輪數(shù)Nr 分別為10、12 或14 輪[8]。在AES高級(jí)加密標(biāo)準(zhǔn)規(guī)范中限定明文分組長(zhǎng)度只能是128 比特,秘鑰長(zhǎng)度可選擇三者中的任意一種。
AES 加密算法主要完成明文到密文的轉(zhuǎn)換,包含字節(jié)替換、行移位、列混淆和輪秘鑰加4 個(gè)步驟[9],其算法結(jié)構(gòu)如圖 1 所示,共計(jì)10 輪變換。
AES 算法以字節(jié)為單位進(jìn)行運(yùn)算,其中的明文是一個(gè)128 比特分組,即16 個(gè)字節(jié),被描述為一個(gè)4×4 的狀態(tài)矩陣,其中前4 個(gè)字節(jié)被復(fù)制到第1 列,緊接著的4 個(gè)字節(jié)被復(fù)制到第2 列,依次往下,最后4 個(gè)字節(jié)被復(fù)制到第4 列。例如一個(gè)128 比特?cái)?shù)據(jù)A,其表示為:A=a0,a1,a2,…,a15,則在進(jìn)行加密運(yùn)算時(shí),表示為矩陣S,形式如:
字節(jié)替換又叫做S 盒替換,用來(lái)完成明文分組的字節(jié)到字節(jié)的替換,它可通過(guò)S 盒把輸入或中間態(tài)s 中的每一個(gè)字節(jié){xsys}映射為另一個(gè)字節(jié),對(duì)每一個(gè)字節(jié)數(shù)據(jù)中的每一位都能起到混淆作用。AES 中,只有字節(jié)替換是非線性變換,因此在面對(duì)已知攻擊時(shí)字節(jié)替換具有極其重要的作用,在秘鑰擴(kuò)展過(guò)程中也使用了該運(yùn)算。S 盒替換運(yùn)用查找表的形式實(shí)現(xiàn),雖然該方法占用較大的硬件資源,但關(guān)鍵路徑短、速度快、結(jié)構(gòu)簡(jiǎn)單且設(shè)計(jì)實(shí)現(xiàn)難度小,綜合考慮硬件資源和速度兩個(gè)因素,該方法最為合適。
行移位是對(duì)狀態(tài)矩陣S的行進(jìn)行循環(huán)的移位操作,將某個(gè)字節(jié)從一列移動(dòng)到另一列,它的線性距離是4 字節(jié)的倍數(shù),這個(gè)轉(zhuǎn)換能夠確保每列中的任意一個(gè)字節(jié)都移到不同的列中。對(duì)于一個(gè)4×4 的狀態(tài)矩陣,秘鑰長(zhǎng)度為128 比特,第0、1、2、3 行根據(jù)密鑰長(zhǎng)度分別向左移動(dòng)0、1、2、3 個(gè)字節(jié)。
列混淆是對(duì)行移位后的狀態(tài)矩陣S進(jìn)行列的變換,將狀態(tài)矩陣的每一列看作系數(shù)取自有限域GF(28)且次數(shù)小于4 的多項(xiàng)式,然后與多項(xiàng)式c(x)相乘并模多項(xiàng)式x4+1。AES 算法給出c(x)={03}x3+{01}x2+{01}x+{02}[10]。
列混淆變換中每列的運(yùn)算可用如下矩陣表示:
輪密鑰加是將數(shù)據(jù)加密和密鑰結(jié)合的過(guò)程,通過(guò)列混淆后的矩陣S與輪密鑰矩陣W做相加運(yùn)算實(shí)現(xiàn),即進(jìn)行異或操作,配合相對(duì)復(fù)雜的密鑰擴(kuò)展流程可以保證該步驟的復(fù)雜度。其運(yùn)算過(guò)程如下所示:
密鑰矩陣W通過(guò)密鑰擴(kuò)展獲得,由圖 1 可知,整個(gè)AES 算法加密需要10 輪運(yùn)算共計(jì)11 次輪密鑰加,且每一輪相加的子密鑰均不同。秘鑰擴(kuò)展是加解密重要的組成部分,通過(guò)對(duì)初始的128、192、256 位秘鑰進(jìn)行擴(kuò)展,產(chǎn)生每輪輪變換中需要的秘鑰。
當(dāng)秘鑰長(zhǎng)度為128 比特時(shí),先將種子秘鑰劃分為4個(gè)字,再通過(guò)秘鑰擴(kuò)展運(yùn)算生成每輪迭代所需的4 個(gè)秘鑰字,最終完成44 個(gè)32 位字的構(gòu)造。
密鑰擴(kuò)展的基本原則如下[11]:
密鑰擴(kuò)展涉及的函數(shù)T是在簡(jiǎn)單的異或運(yùn)算中進(jìn)一步混淆密鑰生成過(guò)程[12],該計(jì)算過(guò)程如圖 2 所示。
圖2 中,Rcon[j]為輪常數(shù),其中j=i/4,Rcon[j]與j的關(guān)系在表 1 中列出。

表1 輪常數(shù)
NIST 于2000 年3 月為AES 散發(fā)公開(kāi)征集工作模式[13],并于2001 年公開(kāi)了5 種工作模式,分別為電子密碼本(Electronic Code Book,ECB)模式、密文分組鏈接(Cipher Block Chain,CBC)模 式、密文反 饋(Cipher Feedback,CFB)模式、輸出反饋(Output Feedback,OFB)模式、計(jì)算器(Counter,CTR)模式[14],SHE 規(guī)范涉及其中的ECB 和CBC 兩種工作模式。
ECB 模式是最早采用和最簡(jiǎn)單的模式,它將加密的數(shù)據(jù)分成若干組,每組的大小與加密密鑰長(zhǎng)度相同,每組使用相同的密鑰進(jìn)行加密。ECB 模式加密過(guò)程如圖3所示,該模式明文分組與密文分組是一一對(duì)應(yīng)的關(guān)系,且加密分塊之間不相互影響,可通過(guò)密文的規(guī)律推測(cè)出明文規(guī)律,存在一定的風(fēng)險(xiǎn)。
CBC 模式在加密當(dāng)前明文塊時(shí)需與前一個(gè)密文塊進(jìn)行異或計(jì)算后再進(jìn)行加密操作[15],第一塊需要初始向量進(jìn)行異或運(yùn)算,然后加密作為第一塊密文塊,隨后每一個(gè)明文分塊在加密前均需與前一個(gè)密文塊進(jìn)行異或運(yùn)算,隨后再進(jìn)行加密運(yùn)算。加密過(guò)程如圖4 所示。因此,每一次加密都需要前一次密文的參與,明文中微小的改變都會(huì)使后續(xù)所有的密文改變,該模式具有較高的安全性。
本文設(shè)計(jì)了一種安全加密電路,該電路基于AES 加密算法,支持ECB 和CBC 模式下的AES-128 加密解密、CMAC 生成和驗(yàn)證、Miyaguchi-Preneel 壓縮算法等。此外,該安全加密模塊符合SHE 規(guī)范標(biāo)準(zhǔn),支持密鑰管理、運(yùn)算隔離等保護(hù)措施,提高設(shè)備信息安全性能,以獲得比軟件執(zhí)行更好的硬件性能和保護(hù)。
SHE 在車(chē)聯(lián)網(wǎng)中,被應(yīng)用在車(chē)端ECU 中負(fù)責(zé)安全存儲(chǔ)和安全計(jì)算,是由HIS 制定的標(biāo)準(zhǔn)。它旨在將對(duì)加密密鑰的控制從軟件域移到硬件域,從而保護(hù)這些密鑰免受軟件攻擊,設(shè)備和數(shù)據(jù)的安全性?xún)H依賴(lài)于算法的強(qiáng)度和密鑰的機(jī)密性。
圖5 為SHE 邏輯結(jié)構(gòu)圖,有一塊單獨(dú)的安全區(qū)域,該區(qū)域中即為SHE 定義的模塊,該模塊包括控制邏輯、AES 算法、存儲(chǔ)單元、偽隨機(jī)數(shù)生產(chǎn)器,且該模塊僅與CPU 通信。同時(shí),SHE 必須被實(shí)現(xiàn)為微控制器的片上外圍設(shè)備,可通過(guò)多種方式連接到CPU,如:通過(guò)專(zhuān)用接口或內(nèi)部外圍總線,互連必須以其他外設(shè)或外部實(shí)體不能修改CPU 和SHE 之間傳輸數(shù)據(jù)的實(shí)現(xiàn)方式。
AES 算法即為AES-128 的加密和解密算法,通過(guò)控制邏輯模塊控制加載密鑰和數(shù)據(jù)信號(hào),輸入數(shù)據(jù)流等,調(diào)用AES 算法模塊以實(shí)現(xiàn)ECB 和CBC 模式下的AES 加解密、CMAC 生成、壓縮函數(shù)等算法;存儲(chǔ)單元存放密鑰數(shù)值、密鑰屬性等相關(guān)信息,密鑰相關(guān)信息僅允許控制邏輯訪問(wèn),且不能隨意讀取和修改;執(zhí)行命令的控制信號(hào)、輸入數(shù)據(jù)以及需要輸出的數(shù)據(jù)等,SHE 規(guī)范涉及的命令在表 2 中列出,每條命令實(shí)現(xiàn)不同的功能,且對(duì)應(yīng)一個(gè)FuncID,應(yīng)用程序?qū)⒁獔?zhí)行的命令、所需控制字段和輸入數(shù)據(jù)按照一定的格式通過(guò)總線寫(xiě)入存儲(chǔ)單元,控制邏輯從中讀取并解析,完成指令操作。
本文設(shè)計(jì)的安全加密電路支持AES-128 在ECB 和CBC 模式下的加密和解密、CMAC 的生成和校驗(yàn)、Miyaguchi-Preneel 壓縮算法,其中CMAC 的生成和Miyaguchi-Preneel 壓縮算法均基于AES 算法實(shí)現(xiàn)。
根據(jù)2.1 節(jié)介紹的AES 加密流程,設(shè)計(jì)了AES 算法模塊。輸入信號(hào)包括加載密鑰或數(shù)據(jù)控制信號(hào)Ld_cmd,128 比特的密鑰數(shù)值KEY,128 比特明文數(shù)據(jù)TextIn,輸出信號(hào)包括當(dāng)前明文加密完成信號(hào)AES_cipher_done,128 比特密文數(shù)據(jù)TextOut。圖6 所示為AES加密時(shí)序,T2 時(shí)鐘周期,Ld_cmd 有效,同時(shí)密鑰KEY 和密文TextIn 一并輸入;下個(gè)時(shí)鐘T3 周期密鑰擴(kuò)展開(kāi)始進(jìn)行計(jì)算得到第一輪擴(kuò)展密鑰wk[0:3],與明文進(jìn)行異或計(jì)算得到狀態(tài)矩陣Sa(T3);T4 周期,將狀態(tài)矩陣Sa(T3)通過(guò)S 盒替換,行移位和列混淆等計(jì)算,并與下一輪擴(kuò)展密鑰wk[4:7] 進(jìn)行異或計(jì)算得到第一輪狀態(tài)矩陣Sa(T3),以此類(lèi)推,在進(jìn)行最后一輪計(jì)算時(shí)即T14 時(shí)鐘周期,Sa(T13)通過(guò)S 盒替換和行移位計(jì)算后,與擴(kuò)展密鑰wk[40:43]進(jìn)行異或運(yùn)算得到最終的密文,此時(shí)加密完成信號(hào)AES_cipher_done 置為1,TextOut 輸出有效密文數(shù)據(jù)。
該設(shè)計(jì)采用迭代運(yùn)算過(guò)程和流水線結(jié)構(gòu),可以復(fù)用硬件邏輯循環(huán)迭代來(lái)進(jìn)行運(yùn)算,節(jié)約了邏輯資源,雖然需要消耗多個(gè)時(shí)鐘周期才能得到一個(gè)密文數(shù)據(jù),但其吞吐率能夠滿(mǎn)足SHE 規(guī)范規(guī)定的最大2 μs 的等待周期。
圖7 為CMAC 計(jì)算過(guò)程,將信息碼分為n個(gè)128 比特的信息塊,即M=M1||M2||…||Mn-1||Mn*,采用AES-128 CBC 模式,使用密鑰K對(duì)每塊信息碼進(jìn)行加密,對(duì)于最后一塊信息碼,不僅需要根據(jù)其位寬補(bǔ)全128 比特,還需根據(jù)密鑰K計(jì)算得到所需K1和K2,如果最后一塊信息碼Mn*為完整的信息碼,則Mn*與K1異或之后作為最后一個(gè)信息碼進(jìn)行AES-128 加密計(jì)算;如果Mn*為非完整的信息碼,則先補(bǔ)齊Mn*,再與K2異或之后作為最后一個(gè)信息碼進(jìn)行AES-128 加密計(jì)算。取最后一組密文的高有效位Tlen 作為MAC 值OUTn。
根據(jù)CMAC 計(jì)算過(guò)程,且為便于正確地處理密鑰載入和數(shù)據(jù)載入控制信號(hào),以及輸入數(shù)據(jù)流,本文在實(shí)現(xiàn)CMAC 算法硬件電路設(shè)計(jì)了一個(gè)有限狀態(tài)機(jī),其狀態(tài)和跳轉(zhuǎn)條件在圖 8 中詳細(xì)標(biāo)出。該狀態(tài)默認(rèn)處于空閑狀態(tài)(IDLE),當(dāng)密鑰載入控制信號(hào)有效,且密鑰數(shù)值K同時(shí)輸入,則狀態(tài)跳轉(zhuǎn)至K1、K2生成狀態(tài)(K1K2_GEN),此時(shí)調(diào)用AES-128 的CBC 模式加密算法,使用密鑰K對(duì)0128進(jìn)行加密;K1和K2計(jì)算完成之后,可載入待計(jì)算的數(shù)據(jù)Mi,如果Mi不為最后一個(gè)信息碼,狀態(tài)處于跳至計(jì)算前N個(gè)信息碼狀態(tài)(CAL_FRONT_NBLOCK),同樣調(diào)用AES-128 的CBC 模式加密算法,每次當(dāng)前信息碼加密完成之后,再載入新的數(shù)據(jù)進(jìn)行AES 加密;當(dāng)計(jì)算最后一個(gè)信息碼時(shí),狀態(tài)跳至CAL_LAST_BLOCK,該次加密得到的密文即為CMAC 結(jié)果。
Miyaguchi-Preneel 壓縮算法是一種單向密碼散列函數(shù),由Miyaguchi 和Preneel 于1992 年提出,主要用于數(shù)據(jù)完整性檢查、數(shù)字簽名等安全應(yīng)用場(chǎng)景。相較于SHA-1 和 MD5 等傳統(tǒng)的密碼散列函數(shù),MP 壓縮算法不僅可以提供相同的安全保障,而且具有運(yùn)算速度較快、安全性好、內(nèi)存占用小等優(yōu)勢(shì)。該壓縮算法的每一塊消息都會(huì)作為明文Mi,而前一塊明文的壓縮結(jié)果OUTi-1作為密鑰,對(duì)Mi進(jìn)行AES 加密計(jì)算,輸出之后的密文、Mi和OUTi-1三者進(jìn)行異或運(yùn)算,最終得到當(dāng)前明文的壓縮數(shù)據(jù)OUTi,該算法的表達(dá)式如下所示:
其中,OUT0=0128。
基于AES 算法,本文設(shè)計(jì)了一種適用于SHE 規(guī)范的安全加密模塊,設(shè)計(jì)框圖如圖9 所示。該電路主要包括4 個(gè) 模塊:AES 算 法模 塊、SHE_ctrl 模 塊、PRAM_ctrl 模塊以及Flexram_ctrl 模塊。AES 算法模塊主要實(shí)現(xiàn)AES-128 加密和解密功能。SHE_ctrl 模塊主要實(shí)現(xiàn)SHE 指令解析、控制算法輸入信號(hào)和指令輸入輸出數(shù)據(jù)流等。用戶(hù)程序可通過(guò)總線向CSEc_PRAM 中按照規(guī)定的格式和地址寫(xiě)入命令相關(guān)信息,包括包含F(xiàn)uncID 的命令頭、控制字段和輸入數(shù)據(jù)等,安全加密模塊則通過(guò)PRAM_ctrl模塊從CSEc_PRAM 獲取指令相關(guān)信息,待SHE_ctrl 模塊完成該指令,將需輸出的數(shù)據(jù)和狀態(tài)信息寫(xiě)入CSEc_PRAM 供用戶(hù)程序獲取。FlexRAM 中存放密鑰及其相關(guān)信息,規(guī)定每個(gè)密鑰存放在相應(yīng)的地址,SHE_ctrl模塊通過(guò)Flexram_ctrl 對(duì)相應(yīng)的密鑰區(qū)域進(jìn)行讀寫(xiě)操作。由此可知,該安全加密模塊嚴(yán)格控制了密鑰的訪問(wèn)權(quán)限,僅SHE_ctrl 模塊可以讀取密鑰數(shù)值等相關(guān)信息;且在命令執(zhí)行過(guò)程中,運(yùn)算過(guò)程和數(shù)據(jù)不被其他模塊和應(yīng)用程序影響和訪問(wèn)。
本文設(shè)計(jì)的安全加密模塊支持表2 列出的所有指令,由于同一時(shí)間僅能夠執(zhí)行一條指令,且不同的指令存在訪問(wèn)相同地址區(qū)域、調(diào)用相同算法等共性操作,因此為節(jié)約硬件資源,提高指令完成效率,設(shè)計(jì)了指令處理狀態(tài)機(jī)(如圖 10 所示),該狀態(tài)機(jī)共有17 個(gè)狀態(tài)。

表2 SHE 指令
表3 對(duì)于每個(gè)狀態(tài)進(jìn)行了簡(jiǎn)要的闡述,根據(jù)命令操作的具體流程,合并相同的步驟,整理得到表中列舉的狀態(tài)。例如,Rd_CSEc_Pram_ST1 狀態(tài),每條指令都需跳轉(zhuǎn)至該狀態(tài),讀取命令頭,并判斷相關(guān)信息是否有效,如果命令頭判定為無(wú)效則狀態(tài)跳轉(zhuǎn)至ERR_ST,向CSEc_PRAM 中寫(xiě)入該錯(cuò)誤對(duì)應(yīng)的ERROR_BIT(具體對(duì)應(yīng)關(guān)系在表 4 詳細(xì)列出),否則根據(jù)當(dāng)前命令跳轉(zhuǎn)至其他狀態(tài)進(jìn)行下一步操作。

表3 SHE 命令處狀態(tài)描述

表4 錯(cuò)誤情況狀態(tài)跳轉(zhuǎn)

表5 AES 數(shù)據(jù)測(cè)試
以執(zhí)行指令ENC 為例,該命令是對(duì)所有明文進(jìn)行ECB 模式的AES-128 加密,該指令的硬件流程如圖11 所示。當(dāng)應(yīng)用程序通過(guò)總線寫(xiě)入該指令執(zhí)行所需數(shù)據(jù)信息、控制信號(hào)和命令頭,則狀態(tài)機(jī)從WAIT_ST 跳轉(zhuǎn)至Rd_CSEc_Pram_ST1,并判斷密鑰標(biāo)志和FuncID 是否有效,如果無(wú)效則狀態(tài)跳轉(zhuǎn)至ERR_ST 以向CSEc_PRAM錯(cuò)誤狀態(tài)位寫(xiě)入相應(yīng)的ERROR_BIT;否則跳轉(zhuǎn)至Rd_Flexram_ST,根據(jù)密鑰標(biāo)志從對(duì)應(yīng)的FlexRAM 地址讀取該密鑰數(shù)據(jù)及其屬性參數(shù),并判斷密鑰是否為空且密鑰屬性是否允許該密鑰使用,如果密鑰為空或密鑰屬性與當(dāng)前不匹配,則狀態(tài)跳轉(zhuǎn)至ERR_ST,否則跳轉(zhuǎn)至Rd_CSEc_Pram_ST2 讀取控制參數(shù)待加密明文個(gè)數(shù);緊接著再?gòu)腃SEc_PRAM 中讀取一個(gè)128 比特待加密明文,進(jìn)入AES-128 加密進(jìn)程;當(dāng)加密完成,生成的密文則寫(xiě)入CSEc_PRAM 相應(yīng)的地址,并判斷是否還有待加密明文,如果有則硬件繼續(xù)從CSEc_PRAM 中讀取明文并進(jìn)行AES 加密計(jì)算,并將密文結(jié)果寫(xiě)入CSEc_PRAM,如此反復(fù)上述操作,直至所有明文信息都完成加密,并輸出每個(gè)密文結(jié)果,此時(shí),狀態(tài)機(jī)跳轉(zhuǎn)至NO_ERR_ST,硬件在CSEc_PRAM 錯(cuò)誤狀態(tài)位寫(xiě)入0x800。至此,ENC_ECB 指令執(zhí)行完成。

圖1 128-AES 算法結(jié)構(gòu)

圖2 函數(shù)T 的計(jì)算過(guò)程

圖3 ECB 模式加密過(guò)程

圖4 CBC 模式的加密過(guò)程

圖5 SHE 邏輯結(jié)構(gòu)圖

圖6 AES 加密時(shí)序圖

圖7 CMAC 計(jì)算過(guò)程

圖8 CMAC 計(jì)算狀態(tài)機(jī)

圖9 安全加密模塊設(shè)計(jì)框圖

圖10 SHE 指令處理狀態(tài)機(jī)

圖11 ENC 指令硬件處理流程
本文使用Verilog HDL 語(yǔ)言對(duì)所設(shè)計(jì)的安全加密電路進(jìn)行設(shè)計(jì)描述,在功能仿真中搭建測(cè)試設(shè)備模型,使用Cadence irun 和 Novas Verdi 聯(lián)合仿真環(huán)境。編寫(xiě)testcase 模擬應(yīng)用程序向系統(tǒng)發(fā)出SHE 指令。根據(jù)SHE協(xié)議提供的測(cè)試案例,將仿真結(jié)果和案例結(jié)果進(jìn)行對(duì)比,同時(shí)驗(yàn)證了該安全加密電路的設(shè)計(jì)是否合理可靠。
針對(duì)ENC_CBC 指令,采用密鑰KEY=128’h 2b7e151628aed2a6abf7158809cf4f3c,初始向量IV=128’h 000102030405060708090a0b0c0d0e0f,明文數(shù)據(jù)和密文在表 5 中列出,該結(jié)果與測(cè)試案例提供的結(jié)果一致。
圖12為加密模塊執(zhí)行該指令的仿真波形圖。cmd_cur_st為當(dāng)前狀態(tài)機(jī)狀態(tài)信號(hào),ld_cmd_aes為AES算法模塊加載明文控制信號(hào),AES_cipher_done 為AES 加密完成信號(hào),TextIn_aes 為輸入數(shù)據(jù),TextOut_aes 為輸出數(shù)據(jù)。從仿真圖可見(jiàn),狀態(tài)機(jī)跳轉(zhuǎn)符合圖 11 的設(shè)計(jì),每次加密完成則將密文信息寫(xiě)入CSEc_PRAM 相應(yīng)區(qū)域,csec_pram_wr_req連續(xù)置位4 次,完成1 個(gè)128 比特密文的寫(xiě)入。

圖12 ENC_CBC 仿真波形
在SHE 眾多指令中,執(zhí)行過(guò)程最為繁瑣的為L(zhǎng)OAD_KEY 指令,也是密鑰管理的主要指令,其涉及了AES 加密和解密算法、CMAC 計(jì)算、MP 壓縮算法等。該命令執(zhí)行流程可分為兩個(gè)子流程:密鑰加載/更新流程和校驗(yàn)信息生成流程,分別對(duì)應(yīng)圖13 和圖14。加密模塊通過(guò)壓縮函數(shù)算法和CMAC 函數(shù)計(jì)算得到M3,并與輸入?yún)?shù)M3′的值進(jìn)行對(duì)比,當(dāng)且僅當(dāng)兩參數(shù)相同(圖13 中黑色標(biāo)志處),狀態(tài)機(jī)進(jìn)入CMD_DECRYPT_PROC對(duì)相關(guān)參數(shù)解密得到密鑰更新值128′h0f0e0d0c0b0a090 80706050403020100、密鑰屬性以及計(jì)數(shù)器值,并將上述信息存入Flex_ram 中。

圖13 LOAD_KEY 命令計(jì)算M3

圖14 LOAD_KEY 命令輸出校驗(yàn)信息
加載完新的密鑰之后,加密模塊需要產(chǎn)生校驗(yàn)信息M4 和M5 并輸出,應(yīng)用程序通過(guò)比對(duì)該數(shù)值與后臺(tái)計(jì)算的結(jié)果即可證明密鑰更新成功。
本文基于AES 加密算法,設(shè)計(jì)了一款適用于SHE 規(guī)范的安全加密電路,其支持AES-128 加密解密、CMAC算法和Miyaguchi-Preneel 壓縮算法等。此外,其符合SHE 規(guī)范標(biāo)準(zhǔn),僅允許硬件管理密鑰,具有運(yùn)算隔離等保護(hù)措施。較之傳統(tǒng)的加密模塊,該安全加密電路具有嚴(yán)格的訪問(wèn)權(quán)限,由硬件域控制加密密鑰的獲取和加載更新,保護(hù)密鑰免受軟件攻擊,同時(shí),軟件不能夠干預(yù)數(shù)據(jù)流的加解密過(guò)程以及密鑰更新等操作,提高了設(shè)備和數(shù)據(jù)的安全性和機(jī)密性。