盧新元 陳華軍 許 超 王 劍*
(*計算機體系結(jié)構(gòu)國家重點實驗室(中國科學(xué)院計算技術(shù)研究所) 北京 100190)(**中國科學(xué)院計算技術(shù)研究所 北京 100190)(***中國科學(xué)院大學(xué) 北京 100049)(****龍芯中科技術(shù)有限公司 北京 100190)
伴隨著現(xiàn)代通信以及網(wǎng)絡(luò)技術(shù)的快速發(fā)展,信息安全問題變得尤為重要,通過加密算法加密傳輸或存儲數(shù)據(jù)成為保證信息安全的重要手段。加密方式通常分為軟件加密和硬件加密2種,通常軟件加密的方式加密效率較低,因此基于硬件加密的芯片設(shè)計成為近些年信息安全領(lǐng)域研究和應(yīng)用的熱點。為有效地檢測加密芯片的可靠性,可測試性設(shè)計必不可少。掃描設(shè)計作為廣泛應(yīng)用的可測性設(shè)計方法之一,能夠有效提高電路的可控制性和可觀測性,保證測試覆蓋率。掃描設(shè)計能夠有效地提高加密芯片可測試能力,但也降低了其安全性。有研究表明,采用數(shù)據(jù)加密標(biāo)準(zhǔn)(data encryption standard,DES)或改進(jìn)加密標(biāo)準(zhǔn)(advanced encryption standard,AES)且?guī)в袙呙柙O(shè)計的加密芯片都可以被掃描旁路攻擊方式[1]獲取加密信息。
為保護密碼芯片免于掃描旁路攻擊,文獻(xiàn)[2]提出了基于模式切換復(fù)位的保護策略,但在文獻(xiàn)[3,4]中該策略被證明對只基于測試模式的攻擊方法無效。文獻(xiàn)[5]提出了基于線性反饋移位寄存器(linear feedback shift register, LFSR)結(jié)構(gòu)的內(nèi)建自測試方法,可以有效保障密碼芯片的安全,但該方案不利于故障診斷。文獻(xiàn)[6]提出了將保存密鑰信息的觸發(fā)器不放在掃描鏈上的部分掃描設(shè)計方法,能有效地防止密鑰信息泄露,但會降低加密電路部分的可測試性。文獻(xiàn)[7]提出了增加鏡像密鑰寄存器的方法,測試模式下可以用鏡像密鑰寄存器將密鑰同加密模塊隔離,但該方法需要在模式切換時進(jìn)行系統(tǒng)復(fù)位,無法支持在線測試。文獻(xiàn)[8]中的安全掃描測試結(jié)構(gòu)為保證測試模式下密鑰被屏蔽,只能有一拍捕獲時鐘,雖然可以支持在線測試,但無法支持延遲故障測試。文獻(xiàn)[9]中提出了可以支持延遲故障測試的結(jié)構(gòu)設(shè)計,但由于測試模式下密鑰會被屏蔽,依然存在測試模式下密鑰故障無法檢測的問題。
不同于上述屏蔽密鑰的方法,文獻(xiàn)[10-16]提出了另一種保障密碼芯片安全的方法,即混淆觀測數(shù)據(jù)。文獻(xiàn)[10]通過動態(tài)打亂子掃描鏈順序的方法實現(xiàn)觀測數(shù)據(jù)混淆,但已被證明可以用簽名攻擊破解。文獻(xiàn)[11,12]提出了在掃描鏈中添加反相器或異或門的方法,但也被證明可以通過復(fù)位攻擊等方法破解。文獻(xiàn)[13]選擇通過添加LFSR結(jié)構(gòu)動態(tài)改變異或門在掃描鏈上的位置,該方法可以抵抗現(xiàn)有的掃描旁路攻擊方法,但會帶來較大的面積開銷。文獻(xiàn)[14]提出掃描數(shù)據(jù)加解密的方法,未授權(quán)的使用者移出的掃描數(shù)據(jù)將會被加密,但該方法會增加測試時間。文獻(xiàn)[15]提出了靜態(tài)混淆觀測數(shù)據(jù)的方法,通過添加控制器和一組移位寄存器(shift register,SR)對掃描鏈上部分觸發(fā)器的掃描使能進(jìn)行控制,只有當(dāng)SR中移入正確的測試密鑰才能保證被控制的掃描觸發(fā)器進(jìn)行正確的移位操作,但該方法可以用測試模式下簽名攻擊破解。文獻(xiàn)[16]提出了動態(tài)混淆觀測數(shù)據(jù)的方法,動態(tài)改變被選擇的掃描觸發(fā)器,很大程度上增加了攻擊的難度,但也無法證明這種動態(tài)混淆觀測數(shù)據(jù)的方法是不可逆的。
針對以上方法存在的問題,本文提出一種基于授權(quán)機制的抗掃描旁路攻擊方法,使用者需要在功能模式下輸入預(yù)設(shè)的功能指令序列進(jìn)行安全測試權(quán)限認(rèn)證,在獲取安全測試授權(quán)后,才能在安全測試模式下進(jìn)行掃描測試。該方法不需要添加用來保存測試密鑰的觸發(fā)器,因此只需要很少量的面積開銷,并且不會帶來額外的測試時間開銷。本文所提出的基于授權(quán)機制的抗掃描旁路攻擊方法既能夠保證無法被現(xiàn)有攻擊方法所破解,又可以檢測到密鑰故障,在保證安全性的同時,不會損失故障覆蓋率。
基于掃描鏈的掃描測試是可測試性設(shè)計中的一種關(guān)鍵測試方法,能夠為芯片提供良好的可控制性和可觀測性。掃描鏈結(jié)構(gòu)如圖1所示,通過在普通觸發(fā)器前增加一個選擇器的方式,將其串聯(lián)成一條由多個觸發(fā)器組成的長鏈。選擇器的2個輸入,分別來自于掃描輸入(scan in,SI)和功能邏輯,并由測試控制(test control,TC)信號控制選擇器選擇數(shù)據(jù)輸入來源。在測試模式下,首先將TC置1,此時芯片處于移位模式,多拍時鐘后將掃描輸入值移入鏈上觸發(fā)器中。然后將TC置0,芯片從移位模式切換到捕獲模式,經(jīng)過一拍或多拍時鐘將功能邏輯值捕獲到觸發(fā)器中。最后再次將TC置1,將鏈上觸發(fā)器中的值移出觀測[17]。功能模式下,TC值保持為0,掃描鏈上觸發(fā)器的數(shù)據(jù)輸入來源于功能邏輯。
圖1 掃描鏈結(jié)構(gòu)圖
相比于DES加密算法,AES加密算法因安全性較高、迭代對稱而被廣泛應(yīng)用。以AES加密芯片為例,其加密模塊結(jié)構(gòu)如圖2所示。加密過程中,首先將初始密鑰和明文數(shù)據(jù)送入加密結(jié)構(gòu)中進(jìn)行第一次的異或操作,再將異或結(jié)果送入輪加密邏輯中。輪加密邏輯是AES加密結(jié)構(gòu)的核心部件,輪加密邏輯中主要包括3個順序完成的操作,分別是S盒、行移位和列混合。列混合完成的數(shù)據(jù)會同密鑰生成器中產(chǎn)生的密鑰再進(jìn)行一次異或操作,并將結(jié)果存放在輪觸發(fā)器中,這個過程稱之為一次完整的輪加密操作。之后輪加密邏輯會多次重復(fù)上述的輪操作,直至最終加密完成。每一輪的數(shù)據(jù)都來源于上一輪操作中輪觸發(fā)器保存的值,每一次輪加密操作中的密鑰都由密鑰生成器重新產(chǎn)生,并保存在密鑰觸發(fā)器中。根據(jù)密鑰的長度不同,輪加密的次數(shù)也會不同,一般128位的密鑰設(shè)計需要10次的輪加密操作,能夠抵抗已知所有的數(shù)學(xué)攻擊方法。
圖2 具有掃描鏈的AES加密模塊結(jié)構(gòu)
在AES加密芯片的可測試性設(shè)計中為了滿足覆蓋率的需求,通常需要將存放加密中間狀態(tài)值的密鑰觸發(fā)器和輪觸發(fā)器放在掃描鏈中,本文將密鑰觸發(fā)器和輪觸發(fā)器統(tǒng)稱為加密相關(guān)觸發(fā)器。在功能模式下,芯片可以進(jìn)行正常的加密操作,加密的中間狀態(tài)值保存在加密相關(guān)觸發(fā)器中。當(dāng)由功能模式切換到測試模式后,可以通過掃描鏈將加密相關(guān)觸發(fā)器的值移出觀測。攻擊者利用該特性,在功能模式下輸入一些特殊的明文,然后在第一次的輪操作完成后切換到測試模式下,將加密相關(guān)觸發(fā)器的中間狀態(tài)值移出觀測,這樣攻擊者可以很容易獲取密鑰。
傳統(tǒng)的無安全設(shè)計的芯片模式切換關(guān)系如圖3(a)所示。
當(dāng)系統(tǒng)復(fù)位完成后,由測試控制信號TC控制芯片的模式切換。TC為0時,芯片進(jìn)入功能模式,可以進(jìn)行正常的加密運算,但無法進(jìn)行掃描鏈移位操作。TC為1時,芯片由功能模式切換到測試模式,掃描鏈可以進(jìn)行正常的移位和捕獲操作,攻擊者可通過掃描鏈將加密相關(guān)觸發(fā)器值直接移出觀測,此時芯片處于一種容易被攻擊的狀態(tài),無法保障密碼芯片的安全。
本文提出的改進(jìn)方法如圖3(b)所示,將測試模式分為安全測試模式和非安全測試模式,并增加了一個模式切換信號Trigger。當(dāng)TC由0跳變到1時,芯片由功能模式切換到測試模式,此時如果Trigger信號為1,則進(jìn)入安全測試模式;如果Trigger信號為0,則進(jìn)入非安全測試模式。當(dāng)TC信號由1跳變?yōu)?時,芯片由測試模式回歸到正常的功能模式。
(a)無安全設(shè)計的模式切換
非安全測試模式下,密鑰以及加密相關(guān)觸發(fā)器值被屏蔽,測試者只能對其他觸發(fā)器所在的掃描鏈進(jìn)行正常的掃描測試。安全測試模式下,密鑰不被屏蔽,加密相關(guān)觸發(fā)器置在掃描鏈上可以進(jìn)行正常掃描測試。
本文的安全掃描結(jié)構(gòu)設(shè)計主要包括測試權(quán)限分析模塊、測試控制模塊以及屏蔽模塊,如圖4所示。
圖4 安全掃描設(shè)計結(jié)構(gòu)圖
測試權(quán)限分析模塊負(fù)責(zé)在功能模式下對測試權(quán)限進(jìn)行認(rèn)證,并產(chǎn)生Trigger信號送入測試控制模塊中。測試控制模塊接收測試控制信號TC以及來自于測試權(quán)限分析模塊的Trigger信號,控制和實現(xiàn)模式切換,并產(chǎn)生安全測試信號Secure_test送入屏蔽模塊中。最終屏蔽模塊根據(jù)Secure_test的值決定是否對密鑰和加密相關(guān)觸發(fā)器進(jìn)行屏蔽。
2.2.1 測試權(quán)限分析模塊
測試權(quán)限分析模塊主要包括控制器以及測試權(quán)限生成模塊,其結(jié)構(gòu)如圖5所示??刂破鹘邮詹⑻幚韥碜杂谥醒胩幚砥?central processing unit,CPU)[18]的譯碼信息,該譯碼信息為使用者輸入正確的功能指令序列后CPU譯碼產(chǎn)生特定的信息,隨后發(fā)出控制信號并送入測試權(quán)限生成模塊中。測試權(quán)限生成模塊包括一個有限狀態(tài)機和一個信號生成器,由控制信號驅(qū)動有限狀態(tài)機工作,當(dāng)有限狀態(tài)機到達(dá)特定的狀態(tài)后,觸發(fā)生成器負(fù)責(zé)將觸發(fā)信號Trigger置1,并送入測試控制模塊中。每次對系統(tǒng)進(jìn)行復(fù)位后,觸發(fā)信號Trigger會重新置0。
圖5 測試權(quán)限分析模塊
2.2.2 測試控制模塊
測試控制模塊在整個過程中起著核心樞紐作用,負(fù)責(zé)接收Trigger信號完成模式切換,并產(chǎn)生Secure_test信號實現(xiàn)對屏蔽模塊的控制。測試控制模塊由1個觸發(fā)器FF1、1個時鐘門控CG、1個異或門A1以及1個反相器I1組成,其結(jié)構(gòu)如圖6所示。觸發(fā)器FF1為異步觸發(fā)器,由復(fù)位信號reset進(jìn)行復(fù)位。觸發(fā)器的時鐘端連接時鐘門控CG的輸出,CG的使能端EN連接測試控制信號TC。TC和觸發(fā)信號Trigger連接異或門A1的兩輸入端,A1的輸出端同觸發(fā)器FF1的D端連接。觸發(fā)器FF1的Q端與反相器I1輸入相連,反相器輸出安全測試信號Secure_test。該測試控制模塊如何完成模式切換以及控制屏蔽模塊將在下文3.1和3.2節(jié)中進(jìn)行詳細(xì)說明。
圖6 測試控制模塊
2.2.3 屏蔽模塊
屏蔽模塊包括2個部分:密鑰屏蔽模塊和加密相關(guān)觸發(fā)器屏蔽模塊,其結(jié)構(gòu)如圖4中虛線框內(nèi)所示。密鑰屏蔽模塊中主要由二選一多路選擇器構(gòu)成。干擾數(shù)據(jù)(干擾數(shù)據(jù)位寬和密鑰位寬一致)和密鑰作為選擇器的2個輸入,安全測試信號Secure_test作為選擇器的選擇信號。當(dāng)攻擊者無法獲取安全測試權(quán)限時,干擾數(shù)據(jù)會被送入加密模塊中,密鑰被屏蔽。
加密相關(guān)觸發(fā)器屏蔽模塊主要由一個與門構(gòu)成,與門的其中一個輸入端同安全測試信號Secure_test相連,另一個輸入端則連接測試控制信號TC,并將輸出結(jié)果作為加密相關(guān)觸發(fā)器的掃描使能信號。該模塊可以根據(jù)Secure_test的值,選擇是否對加密相關(guān)觸發(fā)器掃描鏈移出值進(jìn)行屏蔽,因此當(dāng)使用者沒有通過測試權(quán)限分析模塊的測試權(quán)限認(rèn)證時,無法根據(jù)掃描鏈的觀測值恢復(fù)密鑰。
通過實現(xiàn)基于授權(quán)機制的安全掃描設(shè)計,得到安全掃描操作流程圖如圖7所示。
圖7 安全掃描操作流程圖
芯片完成上電操作進(jìn)入工作模式后,將TC信號置為0,芯片會進(jìn)入正常的功能模式。根據(jù)圖6中測試控制模塊結(jié)構(gòu)可知,此時測試控制模塊中時鐘門控CG使能EN無效,時鐘無法通過CG,觸發(fā)器FF1不能完成時鐘沿觸發(fā)而發(fā)生跳變,因此觸發(fā)器Q端輸出值保持復(fù)位后的值0,經(jīng)過反相器I1取反后,Secure_test值為1,測試控制模塊輸出安全測試信號。當(dāng)屏蔽模塊接收到為1的Secure_test信號后,密鑰屏蔽模塊選擇將密鑰輸出并送入到加密模塊中。加密相關(guān)觸發(fā)器屏蔽模塊輸出的掃描使能信號保持不變,加密相關(guān)觸發(fā)器的輸入來自于功能邏輯,加密模塊可以進(jìn)行正常的加密運算,并輸出密文。注意到當(dāng)TC為0時,Secure_test的值不受觸發(fā)信號Trigger影響,因此無論是否在功能模式下對安全測試權(quán)限認(rèn)證,功能操作都不受影響。
芯片上電后,如果不預(yù)先進(jìn)入功能模式下通過測試權(quán)限認(rèn)證,而將TC直接置為1,則芯片會進(jìn)入非安全測試模式?;蛘弋?dāng)芯片在功能模式下,使用者沒有進(jìn)行測試權(quán)限認(rèn)證或認(rèn)證未通過,則安全測試權(quán)限分析模塊輸出Trigger信號為0。此時,將TC信號由0置1,芯片同樣會切換到非安全測試模式。非安全測試模式下,TC為1,Trigger為0,測試控制模塊內(nèi)異或門A1輸出為1,并送到觸發(fā)器FF1的D端。由于TC為1,則時鐘信號可以通過CG傳遞到觸發(fā)器FF1上,當(dāng)時鐘上升沿到來時,觸發(fā)器FF1捕獲到值1,并由Q端輸出。經(jīng)過反相器I1后,測試控制模塊輸出安全測試信號Secure_test值為0。當(dāng)屏蔽模塊接收到為0的Secure_test信號,密鑰屏蔽模塊會將干擾數(shù)據(jù)作為密鑰送入加密模塊中。加密相關(guān)觸發(fā)器屏蔽模塊輸出的掃描使能信號為0,加密相關(guān)觸發(fā)器無法進(jìn)行正確的移位操作。因此,攻擊者無法通過掃描移出值恢復(fù)密鑰。
若想進(jìn)入安全測試模式,需要在功能模式下進(jìn)行測試權(quán)限認(rèn)證。使用者輸入正確的功能指令序列到CPU中,安全測試權(quán)限分析模塊接收到譯碼信息后,將觸發(fā)信號Trigger置為1。此時,將TC信號由0置1,芯片切換到安全測試模式。安全測試模式下,TC為1,Trigger也為1,異或門A1輸出0并送到觸發(fā)器FF1的D端。由時鐘上升沿觸發(fā),觸發(fā)器捕獲0值并由Q端送入反相器I1中,最終測試控制模塊輸出值為1的Secure_test信號。密鑰屏蔽模塊選擇密鑰直接送入加密模塊中。加密相關(guān)觸發(fā)器屏蔽模塊中輸出的掃描使能信號與TC保持一致。在掃描測試過程中,需要由移位模式切換到捕獲模式,TC信號由1置為0,此時Secure_test值會保持不變。因此,安全測試模式下可以支持正常的掃描測試過程,密鑰和加密模塊中的故障均可以被檢測到。
本文選取密鑰位寬為128位的AES電路[19]以及龍芯某款CPU核作為實驗對象進(jìn)行仿真認(rèn)證。實驗選取的仿真工具為VCS,綜合工具為設(shè)計編譯器(design compiler,DC)。上述的電子設(shè)計自動化(electronics design automation,EDA)工具都在Linux環(huán)境下運行,服務(wù)器的CPU主頻為2.2 GHz,內(nèi)存容量為64 GB。實驗選擇連續(xù)3條位寬為32位的移位指令作為正確的指令序列,輸入正確的指令序列后,仿真結(jié)果如圖8所示。圖中虛線處為TC信號跳變的時刻,跳變前電路處于功能模式,跳變后切換到測試模式。功能模式下,CPU根據(jù)指令valid信號接收并處理連續(xù)3條有效的移位指令,控制譯碼信號signa、signb以及signc的值連續(xù)發(fā)生跳變。信號state的值對應(yīng)測試權(quán)限分析模塊中狀態(tài)機的不同狀態(tài),其中“0”代表初始狀態(tài),“1”代表接收到第1條正確的指令,“2”代表接收到前2條連續(xù)正確的指令,“3”代表接收到完整的指令序列。當(dāng)狀態(tài)機達(dá)到狀態(tài)“3”后,在下一拍時鐘的上升沿Trigger信號跳變?yōu)?,電路由功能模式切換到安全測試模式,Secure_test信號保持為1不變。
圖8 輸入正確功能指令序列的仿真結(jié)果
若輸入錯誤的功能指令序列后,其仿真結(jié)果如圖9所示。指令序列中錯誤或無效的指令會導(dǎo)致譯碼信號signb和signc無法正確跳變。當(dāng)狀態(tài)機處于狀態(tài)“1”或狀態(tài)“2”時,接收到不正確的指令后均會重新跳轉(zhuǎn)到初始狀態(tài)“0”,信號Trigger保持為0,電路由功能模式只能切換到非安全測試模式,Secure_test信號由1跳變?yōu)?。
圖9 輸入錯誤功能指令序列的仿真結(jié)果
通常攻擊者無法得知在進(jìn)行密鑰獲取前,需要進(jìn)入安全測試模式或如何進(jìn)入安全測試模式。極端情況下,即便攻擊者知道需要在功能模式下輸入指令序列來觸發(fā)安全測試權(quán)限分析模塊生成Trigger信號,攻擊者輸入一段完全正確的功能指令序列的可能性也幾乎為0。當(dāng)安全測試權(quán)限分析模塊沒有將觸發(fā)信號Trigger信號置為1時,攻擊者永遠(yuǎn)只能由功能模式切換到非安全測試模式。此時,密鑰以及加密相關(guān)觸發(fā)器都被屏蔽,攻擊者無法根據(jù)掃描鏈移出觀測值恢復(fù)密鑰,因此所有的已知攻擊方式都無效。本文所提出的方法同引言中提到的幾種經(jīng)典安全掃描測試方法相比,安全性分析結(jié)果如表1所示。其中k和j分別表示添加反相器[9]方法中掃描觸發(fā)器以及反相器的個數(shù),L表示靜態(tài)混淆數(shù)據(jù)[12]方法中新增移位觸發(fā)器的個數(shù),m表示功能指令序列中指令的個數(shù),n表示指令的位寬。
表1 不同安全掃描設(shè)計的安全性和可測試性對比
當(dāng)測試工程師可以進(jìn)入安全測試模式下進(jìn)行掃描測試時,密鑰的值不會被屏蔽,加密相關(guān)觸發(fā)器所在掃描鏈也可以進(jìn)行正常移位和捕獲操作,密鑰以及加密模塊的故障均可以被檢測到,因此同未進(jìn)行安全掃描設(shè)計的初始芯片相比,并沒有故障覆蓋率的損失。
由移位模式切換捕獲狀態(tài)時,一拍或者多拍的捕獲時鐘都不會影響測試控制模塊輸出的Secure_test值,因此該安全掃描設(shè)計方法既支持固定性故障測試,又支持延遲故障測試,而且由于不需要修改掃描鏈的結(jié)構(gòu),傳統(tǒng)的掃描鏈設(shè)計以及自動測試向量生成流程完全適用,生成的測試向量也不需要進(jìn)行調(diào)整。本文采用的安全掃描設(shè)計同其他經(jīng)典的方法相比,可測試性分析結(jié)果如表1所示。除添加反相器[9]和LFSR混淆[13]的方法,其他安全掃描設(shè)計都需要增加額外的測試時鐘周期,但本文所提出的方法無需額外的測試時間開銷。
本文實驗使用DC工具基于130 nm工藝進(jìn)行綜合和DFT設(shè)計,生成最終的網(wǎng)表。面積開銷、組合單元以及時序單元個數(shù)統(tǒng)計如表2所示。其中初始設(shè)計是指未進(jìn)行安全設(shè)計的DFT后的電路。
表2 面積開銷統(tǒng)計
實驗結(jié)果表明,新增的安全掃描結(jié)構(gòu)面積僅約為初始設(shè)計面積的0.3%。同初始設(shè)計相比,組合單元和時序單元個數(shù)分別增加了333個和5個,占比僅為0.18%和0.9%。
本文提出的基于授權(quán)機制的抗掃描旁路攻擊方法,在功能模式下通過功能指令序列完成安全測試授權(quán),并根據(jù)授權(quán)認(rèn)證結(jié)果選擇進(jìn)入非安全測試模式或安全測試模式。非安全測試模式下,密鑰被屏蔽,同時加密相關(guān)觸發(fā)器所在掃描鏈的移出觀測值被混淆,因此攻擊者無法恢復(fù)密鑰,保證了密鑰的安全性。安全測試模式下,密鑰不被屏蔽,密鑰從存儲器讀出到送入加密模塊的路徑上故障都可以被掃描測試檢測到。同時加密模塊中的觸發(fā)器以及組合邏輯故障也均可以被檢測到,保證了加密相關(guān)模塊的故障覆蓋率。另外,通過功能指令序列觸發(fā)的安全測試權(quán)限認(rèn)證方式,安全性高且不失靈活性。一方面,攻擊者在不知道正確功能指令序列的前提下,幾乎不可能通過安全測試權(quán)限認(rèn)證。另一方面,設(shè)計者可以根據(jù)芯片的安全等級,改變指令序列中功能指令的種類以及個數(shù)。本方法結(jié)構(gòu)實現(xiàn)簡單,并且?guī)缀鯖]有面積開銷,可以適用于任何帶有掃描設(shè)計的密碼芯片中。