(北京中電華大電子設(shè)計有限責(zé)任公司 射頻識別芯片檢測技術(shù)北京市重點實驗室,北京 100102)
USBKey是一種基于硬件加密的安全設(shè)備,主要應(yīng)用于防止軟件盜版,近年來也逐漸應(yīng)用于網(wǎng)銀和安全支付等方面。由于USBKey內(nèi)嵌多種硬件安全加密(Encryption)算法,如果用戶需要使用軟件或者網(wǎng)銀支付,需要輸入密碼通過硬件加密認(rèn)證方可正常使用或支付,這種方式極大的保護(hù)了軟件版權(quán)和用戶財產(chǎn)安全。隨著人工智能理念的推廣,USBKey作為電子鎖能夠為家居安全提供有力保障,應(yīng)用在家居安全方面的前景也非常廣闊。
由于USBKey的廣泛使用且涉及軟件版權(quán)保護(hù)、文件資料加密傳輸[1-2]及網(wǎng)銀交易[3]等重要場合,這讓作為“安全保障”的USBKey的地位顯得十分重要,因此USBKey的安全性能如何評估就更加重要了。
評估USBKey的安全性能,主要方法就是對其施加安全攻擊(Security Attack)信號,同時使用設(shè)備采集其運算期間的功耗,通過分析USBKey的功耗規(guī)律來破解USBKey使用的加密(Encryption)算法、解密(Decryption)算法和密鑰(KEY)[4]。在安全攻擊的過程中最重要的一點就是告知攻擊設(shè)備和功耗采集設(shè)備何時開始工作。由于USBKey使用USB接口,遵循USB標(biāo)準(zhǔn)規(guī)范和相關(guān)協(xié)議,其工作的特殊性導(dǎo)致其安全性能的評估存在一定的難度。
評估USBKey安全性能主要過程分為以下三步:
1)首先,在USBKey開始安全運算前,PC告知設(shè)備準(zhǔn)備產(chǎn)生攻擊信號和采集功耗;
2)其次,PC機(jī)根據(jù)USBKey所遵循的協(xié)議發(fā)送加密(Encryption)或解密(Decryption)指令開始進(jìn)行安全運算;
3)最后,PC通過功耗采集設(shè)備獲取USB設(shè)備運算期間的功耗。
目前傳統(tǒng)的評估方法有以下三種:PC機(jī)產(chǎn)生觸發(fā)信號,外置MCU產(chǎn)生觸發(fā)信號,非USB接口通訊產(chǎn)生觸發(fā)信號。下面分別介紹以上三種方法工作的優(yōu)缺點。
PC機(jī)產(chǎn)生觸發(fā)信號的原理框圖如圖1所示。
圖1 PC機(jī)產(chǎn)生觸發(fā)信號
PC機(jī)具有豐富的軟硬件資源,并且能夠兼容各類USB協(xié)議和軟件,外部設(shè)備的控制程序開發(fā)相對簡單,因此該方法簡單易實施。但是USB接口采用廣播輪詢方式信息傳輸,該方法PC機(jī)外部設(shè)備又比較多(如鍵盤、鼠標(biāo)、示波器等)且大部分設(shè)備均采用USB接口,尤其部分攻擊設(shè)備和功耗采集設(shè)備也會采用USB接口。這就導(dǎo)致該方法中PC機(jī)發(fā)送給USBKey的指令在物理層數(shù)據(jù)傳輸時,傳輸時間不確定(時早時慢),進(jìn)而會出現(xiàn)攻擊設(shè)備和功耗采集設(shè)備開始工作的時候,USBKey尚未開始安全運算或者運算已結(jié)束的現(xiàn)象。因此,使用該方法會出現(xiàn)攻擊遲滯或者攻擊超前的情況,影響了安全評估的準(zhǔn)確性和成功率。該方法已在射頻識別芯片檢測技術(shù)北京市重點實驗室進(jìn)行了驗證,失敗率達(dá)到了85%以上。
采用外置MCU產(chǎn)生觸發(fā)信號的原理框圖如圖2所示。
圖2 外置MCU產(chǎn)生觸發(fā)信號
該方法主要是在PC機(jī)和USBKey之間外置一個具有USBHOST功能的MCU設(shè)備,該MCU對PC機(jī)是從設(shè)備,對USBKey是主設(shè)備。PC機(jī)將USBkey加解密所需要的相關(guān)指令發(fā)送給MCU設(shè)備,通過MCU傳遞給USBKey,MCU可以在最后一條指令(即啟動加解密運算)發(fā)送給USBKey之前產(chǎn)生觸發(fā)信號,啟動安全攻擊和功耗采集,而后再發(fā)送加解密指令給USBKey。由于MCU設(shè)備和USBKey之間沒有其他設(shè)備,因此該方法的準(zhǔn)確性比方法一要高。
該方法雖然能夠提高攻擊準(zhǔn)確性,但是存在以下缺點:
1)MCU設(shè)備的資源有限,在MCU設(shè)備上開發(fā)支持各類USB協(xié)議驅(qū)動的工作量很大;
2)由于USBKey種類繁多,采用MCU設(shè)備存在一定的兼容性局限;
3)不同USBKey的加解密指令不一樣導(dǎo)致MCU設(shè)備的底層驅(qū)動設(shè)計需要經(jīng)常升級;
4)由于MCU中斷程序的響應(yīng),觸發(fā)信號的產(chǎn)生時間也會稍微不準(zhǔn)確。
非USB接口通訊產(chǎn)生觸發(fā)信號原理框圖如圖3所示。
圖3 非USB接口通訊產(chǎn)生觸發(fā)信號
該方法在USBKey使用的安全芯片上預(yù)留一個外置接口(UART、SPI、7816[5]、I2C等接口),PC機(jī)通過該接口和USBKey通訊,這樣既避免了方法一和方法二存在的準(zhǔn)確性問題,又能繼續(xù)在PC機(jī)上進(jìn)行軟件和驅(qū)動開發(fā),大大節(jié)省軟件開發(fā)的工作量。
該方法雖然簡單方便且準(zhǔn)備性高,但是存在以下不足:
1)實際應(yīng)用場景使用USB通訊樹并不是使用其他接口,因此該方法不貼近應(yīng)用場景;
2)這種方法要求芯片在研發(fā)階段除USB接口外預(yù)留一個接口,額外增加設(shè)計時間和驗證成本;
3)不同廠家預(yù)留的接口不一致,針對各個接口都需要額外開發(fā)軟件,因此,該方法的通用性不足。
綜上所述,目前傳統(tǒng)的三種評估方法存在以下問題:
1)無法達(dá)到精準(zhǔn)的攻擊時間;
2)通用性和易用性較差;
3)驅(qū)動開發(fā)和增加接口導(dǎo)致研發(fā)成本增高;
4)有效攻擊效率降低,評估周期加長;
由此可見目前缺乏一種效率高、準(zhǔn)確性高、通用、易行的USBKey安全評估系統(tǒng)。所以開發(fā)一種通用、精確并貼近應(yīng)用場景的USBKey安全評估系統(tǒng)是十分必要的。
根據(jù)上章節(jié)分析可知,USBKey安全性能評估系統(tǒng)之所以存在精準(zhǔn)性、易用性和貼近應(yīng)用場景方面的問題,主要是因為攻擊設(shè)備和功耗采集設(shè)備啟動的時間(即觸發(fā)信號產(chǎn)生時間)和USB啟動安全運算的時間難以做到精確匹配,解決了這個關(guān)鍵問題,也就解決了上述三種方法存在的問題。
解決這個問題的難度主要在于控制USB加解密指令到達(dá)USBKey的時間。要解決這個問題首先要分析USB物理層數(shù)據(jù)的傳輸方式和規(guī)律。根據(jù)USB2.0規(guī)范可知,USB在物理層上傳輸數(shù)據(jù)是以數(shù)據(jù)包的形式傳送,數(shù)據(jù)包主要有SOF、SETUP、OUT、IN等。數(shù)據(jù)包的傳輸方向如表1所示。
表1 USB主要數(shù)據(jù)包傳輸方向
從數(shù)據(jù)包的傳輸方向可知:如果在USB數(shù)據(jù)線上解析到OUT包,可知這是一條由PC機(jī)傳送至設(shè)備的信息;SETUP雖然傳輸方向也是由PC機(jī)傳送至設(shè)備,但是SETUP包僅在設(shè)備枚舉階段,設(shè)備枚舉完成之后不會再產(chǎn)生SETUP包;SOF包是周期性的數(shù)據(jù)包,很容易通過包頭解碼識別出來。
方法一出現(xiàn)攻擊時間不確定的原因主要是PC機(jī)要面對多個USB設(shè)備,因此還需要分析PC機(jī)面對多個USB設(shè)備的傳輸方式和規(guī)律。根據(jù)USB2.0協(xié)議規(guī)范,USB2.0通訊是廣播通訊,即接在USB線上的所有設(shè)備都能接收到PC機(jī)發(fā)送過來的信息,如果該信息與接收設(shè)備無關(guān),則該設(shè)備不予響應(yīng)。另外,USBHUB規(guī)范表明HUB可以獨立與USB設(shè)備通訊,PC機(jī)發(fā)送給USB設(shè)備的信息經(jīng)過USBHUB時,USBHUB可以將PC機(jī)廣播過來的數(shù)據(jù)選擇性的發(fā)送給USBKey,即USBHUB可以屏蔽PC發(fā)送給非當(dāng)前USBKey的信息。
綜上可知,在PC機(jī)和USBKey之間加入一個USBHUB便可以隔離PC機(jī)傳送給其他USB設(shè)備的信息,這樣經(jīng)過USBHUB之后傳輸?shù)男畔H僅只是發(fā)送給USBKey的信息;其次從USB數(shù)據(jù)線上解析數(shù)OUT數(shù)據(jù)包,即可知道當(dāng)前這條信息是PC機(jī)發(fā)送給USBKey的加解密指令,此時便可以產(chǎn)生觸發(fā)信號告知攻擊設(shè)備開始攻擊和采集功耗,實現(xiàn)啟動攻擊設(shè)備和功耗采集設(shè)備時間和USB進(jìn)行安全運算的時間的精確匹配。
根據(jù)1.1小節(jié)分析搭建如圖4所示的安全評估系統(tǒng)。該系統(tǒng)的工作原理如下:使用HUB隔離待檢測USBKey與其他USB設(shè)備;在PC機(jī)向待檢測USBKey發(fā)送加解密指令之前先啟動可編程邏輯門陣列(FPGA)抓取USBKey上的數(shù)據(jù),再發(fā)送加解密指令;FPGA在啟動之后檢測到OUT包便產(chǎn)生觸發(fā)信號告知攻擊設(shè)備如和功耗采集設(shè)備,否則繼續(xù)解析數(shù)據(jù)包直至停止抓取[6-8]。
圖4 安全評估系統(tǒng)原理框圖
由于USB數(shù)據(jù)傳輸速度固定且數(shù)據(jù)長度可知,F(xiàn)PGA內(nèi)部可設(shè)置ns級別的延時,這樣可以產(chǎn)生精確的觸發(fā)信號,從而保證USBKey加解密時間和攻擊時間、功耗采集時間一致。
使用FPGA采集并解析USB數(shù)據(jù)去產(chǎn)生觸發(fā)信號的方法,無需關(guān)注USB使用的協(xié)議,無需PC機(jī)開發(fā)額外的軟件,也無需關(guān)注USBKey所使用的指令,易用性和通用性強(qiáng)。另外,該方法不破壞原有USBKey的工作場景,保持了與實際應(yīng)用場景的一致性。
在圖4原理框圖的基礎(chǔ)上完善USBKey的電源控制部分,在FPGA內(nèi)部實現(xiàn)USB數(shù)據(jù)采集和解析功能,連接USBHUB、攻擊設(shè)備和功耗采集設(shè)備。最后所搭建的USBKey安全評估系統(tǒng)功能框圖如圖5所示。
圖5 USBKey安全評估系統(tǒng)硬件功能框圖
安全評估系統(tǒng)模塊主要包括:中樞控制系統(tǒng)、主控計算機(jī)、程控電源、USBHUB、MCU、安全攻擊設(shè)備、功耗采集設(shè)備、USBKey,各個模塊及設(shè)備的功能如下:
中樞控制系統(tǒng):控制USBKey電源(MCU)、采集USBKey的物理數(shù)據(jù)信號(FPGA)和產(chǎn)生攻擊觸發(fā)信號。其中何時開始采集USB數(shù)據(jù),解析USB數(shù)據(jù)包之后,何時產(chǎn)生觸發(fā)信號是該方法需要實現(xiàn)且最重要的部分,也是實現(xiàn)該方法的難點。
主控計算機(jī)(PC):控制程控電源向USBKey提供所需的工作電壓并實時讀取USBKey的工作電流;通過向MCU發(fā)送命令控制FPGA的數(shù)據(jù)采集的啟動和關(guān)閉。
程控電源:受PC機(jī)控制,給USBKey提供不同的工作電源電壓,并測量USBKey的工作電流。
USBHUB:將PC發(fā)送給其他USB設(shè)備的信息隔離,保證FPGA采集到的USB數(shù)據(jù)僅為USBKey的數(shù)據(jù);
MCU:主要接收主控計算機(jī)的命令,啟動和關(guān)閉FPGA數(shù)據(jù)采集,同時控制USBKey的電源選擇。
安全攻擊設(shè)備:產(chǎn)生安全攻擊信號。
功耗采集設(shè)備:采集USBKey在加解密運算期間的功耗。
USBKey:過USBHUB連接主控計算機(jī),用于接收主控計算機(jī)的指令進(jìn)行加解密運算。
根據(jù)圖5所設(shè)計的安全評估系統(tǒng)功能框圖,對USBKey進(jìn)行安全功能評估,具體工作流程如下:
1)中樞控制系統(tǒng)復(fù)位:首先給中樞控制系統(tǒng)通電,使其上電復(fù)位進(jìn)入工作狀態(tài),連接主控計算機(jī),通過控制命令將USBUkey設(shè)備斷電。
2)USBKey電源選擇:主控計算機(jī)向MCU發(fā)送命令控制繼電器選擇USBKey工作電源,程控電源供電或者可編程電源模塊供電。
3)初始檢測:給USBKey上電,發(fā)送命令檢測USBKey是否正常工作,如果USBKey不正常工作,更換USBkey;
4)啟動檢測:給USBKey發(fā)送指令更新密鑰,初始化加解密數(shù)據(jù);
5)啟動FPGA數(shù)據(jù)處理模塊:PC發(fā)送命令告知MCU啟動FPGA采集并解析USB數(shù)據(jù)包;
6)發(fā)送加解密指令:PC機(jī)向USBKey發(fā)送加解密指令;
7)判斷是否FPGA解析數(shù)據(jù)包超時,若超時PC機(jī)記錄超時信息并跳至步驟4),否則跳至步驟8)FPGA繼續(xù)檢解析USB數(shù)據(jù)包;
8)FPGA解析數(shù)據(jù)包是否有OUT包產(chǎn)生,沒有跳至步驟7),有則跳至步驟9);
9)產(chǎn)生觸發(fā)信號,如果FPGA成功解析到OUT包,根據(jù)后續(xù)數(shù)據(jù)包長度延遲一定時間再產(chǎn)生觸發(fā)信號并跳至步驟(10);
10)攻擊設(shè)備和功耗采集設(shè)備接收到觸發(fā)信號后同時產(chǎn)生攻擊信號和功耗采集,并判斷是否攻擊成功,若攻擊成功則PC機(jī)保存攻擊記錄及功耗采集記錄,反饋并跳至步驟11),若失敗則PC保存失敗記錄,并跳至步驟4);
11)USBKey斷電,判斷是否結(jié)束攻擊,若結(jié)束則跳至步驟(12),否則上電并跳至步驟4);
12)結(jié)束實驗,分析功耗波形做性能評估。
系統(tǒng)工作流程如圖6所示,該流程圖詳細(xì)表述了該安全評估系統(tǒng)在USBKey工作過程中的整個軟件工作流程。
圖6 安全評估系統(tǒng)工作流程
選用XlinxFPGA和STM32的MCU實現(xiàn)中樞控制系統(tǒng)功能,在FPGA上完成USB數(shù)據(jù)包采集和解析功能,在MCU上完成FPGA控制部分功能。實現(xiàn)中樞控制系統(tǒng)后根據(jù)圖5所示搭建安全評估系統(tǒng),該系統(tǒng)已在射頻識別芯片檢測技術(shù)北京市重點實驗室進(jìn)行了系統(tǒng)級驗證并取得了良好的效果,實驗成功率90%以上,相比較于方法一(成功率<15%)成功率很高。圖7和圖8為實驗過程中捕獲到的算法功耗波形圖。
圖7 實驗室捕獲的RSA算法功耗圖
圖7為使用本方法在USBKey進(jìn)行RSA運算過程中抓取的功耗波形圖,其中觸發(fā)信號為FPGA采集到USBKey加解密指令之后解析和產(chǎn)生,波形密集且變化劇烈部分為芯片運行RSA算法時的功耗[9-10]。
圖8 實驗室捕獲的DES算法功耗圖
圖8為使用本方法在USBKey進(jìn)行DES運算過程中抓取的功耗波形圖,其中陰影部分功耗波形為芯片運行DES算法時的功耗[11-12]。
實驗結(jié)果表明測試人員可以通過觸發(fā)信號后的功耗波形圖分析出USBKey當(dāng)前使用的安全算法、密鑰等相關(guān)信息,通過這些信息確可以判斷USBKey產(chǎn)品的安全性。
該方法與傳統(tǒng)的三種方法的效果對比如表2所示。
表2 方法效果對比
綜上所述,本文設(shè)計的評估系統(tǒng)與現(xiàn)有技術(shù)相比有以下優(yōu)點:
1)易用性:無需關(guān)注USB協(xié)議,PC端無需開發(fā)額外軟件。
2)通用性:無需關(guān)注不同USBKey的加解密指令,解析出OUT數(shù)據(jù)包即可產(chǎn)生觸發(fā)信號。
3)精確性:能夠在芯片啟動安全運算之前控制觸發(fā)信號的產(chǎn)生時間,精度達(dá)到ns級別。
4)應(yīng)用性:貼近USBKey實際應(yīng)用場景。
該系統(tǒng)在實驗室驗證效果良好,成功率達(dá)到90%以上,但是仍未達(dá)到100%,主要原因是USB數(shù)據(jù)采集和解析部分代碼尚存在不完善的地方,未能夠100%正確解析出數(shù)據(jù)包,在后續(xù)的研發(fā)工作中還需要優(yōu)化該部分代碼。
本文利用FPGA采集USB數(shù)據(jù)的方法設(shè)計并實現(xiàn)了一套基于FPGA數(shù)據(jù)采集的USBkey設(shè)備安全評估系統(tǒng),可以在USBKey進(jìn)行交易時產(chǎn)生精確的攻擊和功耗采集,從而評估該USBKey的安全性能。該系統(tǒng)能夠精確控制產(chǎn)生攻擊USBKey信號的間,并支持USB各類協(xié)議,無需開發(fā)相關(guān)軟件,大大彌補(bǔ)了現(xiàn)有方法存在的不足,提高了USBkey安全評估的準(zhǔn)確性和工作效率。該系統(tǒng)經(jīng)過后續(xù)完善后,成功率能夠達(dá)到100%,應(yīng)用前景將非常廣闊。