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