基于FPGA数据采集的USBKey安全评估系统设计与实现
2019-05-27
(北京中电华大电子设计有限责任公司 射频识别芯片检测技术北京市重点实验室,北京 100102)
0 引言
USBKey是一种基于硬件加密的安全设备,主要应用于防止软件盗版,近年来也逐渐应用于网银和安全支付等方面。由于USBKey内嵌多种硬件安全加密(Encryption)算法,如果用户需要使用软件或者网银支付,需要输入密码通过硬件加密认证方可正常使用或支付,这种方式极大的保护了软件版权和用户财产安全。随着人工智能理念的推广,USBKey作为电子锁能够为家居安全提供有力保障,应用在家居安全方面的前景也非常广阔。
由于USBKey的广泛使用且涉及软件版权保护、文件资料加密传输[1-2]及网银交易[3]等重要场合,这让作为“安全保障”的USBKey的地位显得十分重要,因此USBKey的安全性能如何评估就更加重要了。
评估USBKey的安全性能,主要方法就是对其施加安全攻击(Security Attack)信号,同时使用设备采集其运算期间的功耗,通过分析USBKey的功耗规律来破解USBKey使用的加密(Encryption)算法、解密(Decryption)算法和密钥(KEY)[4]。在安全攻击的过程中最重要的一点就是告知攻击设备和功耗采集设备何时开始工作。由于USBKey使用USB接口,遵循USB标准规范和相关协议,其工作的特殊性导致其安全性能的评估存在一定的难度。
评估USBKey安全性能主要过程分为以下三步:
1)首先,在USBKey开始安全运算前,PC告知设备准备产生攻击信号和采集功耗;
2)其次,PC机根据USBKey所遵循的协议发送加密(Encryption)或解密(Decryption)指令开始进行安全运算;
3)最后,PC通过功耗采集设备获取USB设备运算期间的功耗。
目前传统的评估方法有以下三种:PC机产生触发信号,外置MCU产生触发信号,非USB接口通讯产生触发信号。下面分别介绍以上三种方法工作的优缺点。
PC机产生触发信号的原理框图如图1所示。
图1 PC机产生触发信号
PC机具有丰富的软硬件资源,并且能够兼容各类USB协议和软件,外部设备的控制程序开发相对简单,因此该方法简单易实施。但是USB接口采用广播轮询方式信息传输,该方法PC机外部设备又比较多(如键盘、鼠标、示波器等)且大部分设备均采用USB接口,尤其部分攻击设备和功耗采集设备也会采用USB接口。这就导致该方法中PC机发送给USBKey的指令在物理层数据传输时,传输时间不确定(时早时慢),进而会出现攻击设备和功耗采集设备开始工作的时候,USBKey尚未开始安全运算或者运算已结束的现象。因此,使用该方法会出现攻击迟滞或者攻击超前的情况,影响了安全评估的准确性和成功率。该方法已在射频识别芯片检测技术北京市重点实验室进行了验证,失败率达到了85%以上。
采用外置MCU产生触发信号的原理框图如图2所示。
图2 外置MCU产生触发信号
该方法主要是在PC机和USBKey之间外置一个具有USBHOST功能的MCU设备,该MCU对PC机是从设备,对USBKey是主设备。PC机将USBkey加解密所需要的相关指令发送给MCU设备,通过MCU传递给USBKey,MCU可以在最后一条指令(即启动加解密运算)发送给USBKey之前产生触发信号,启动安全攻击和功耗采集,而后再发送加解密指令给USBKey。由于MCU设备和USBKey之间没有其他设备,因此该方法的准确性比方法一要高。
该方法虽然能够提高攻击准确性,但是存在以下缺点:
1)MCU设备的资源有限,在MCU设备上开发支持各类USB协议驱动的工作量很大;
2)由于USBKey种类繁多,采用MCU设备存在一定的兼容性局限;
3)不同USBKey的加解密指令不一样导致MCU设备的底层驱动设计需要经常升级;
4)由于MCU中断程序的响应,触发信号的产生时间也会稍微不准确。
非USB接口通讯产生触发信号原理框图如图3所示。
图3 非USB接口通讯产生触发信号
该方法在USBKey使用的安全芯片上预留一个外置接口(UART、SPI、7816[5]、I2C等接口),PC机通过该接口和USBKey通讯,这样既避免了方法一和方法二存在的准确性问题,又能继续在PC机上进行软件和驱动开发,大大节省软件开发的工作量。
该方法虽然简单方便且准备性高,但是存在以下不足:
1)实际应用场景使用USB通讯树并不是使用其他接口,因此该方法不贴近应用场景;
2)这种方法要求芯片在研发阶段除USB接口外预留一个接口,额外增加设计时间和验证成本;
3)不同厂家预留的接口不一致,针对各个接口都需要额外开发软件,因此,该方法的通用性不足。
综上所述,目前传统的三种评估方法存在以下问题:
1)无法达到精准的攻击时间;
2)通用性和易用性较差;
3)驱动开发和增加接口导致研发成本增高;
4)有效攻击效率降低,评估周期加长;
由此可见目前缺乏一种效率高、准确性高、通用、易行的USBKey安全评估系统。所以开发一种通用、精确并贴近应用场景的USBKey安全评估系统是十分必要的。
1 安全评估系统方案设计
1.1 USB数据传输分析
根据上章节分析可知,USBKey安全性能评估系统之所以存在精准性、易用性和贴近应用场景方面的问题,主要是因为攻击设备和功耗采集设备启动的时间(即触发信号产生时间)和USB启动安全运算的时间难以做到精确匹配,解决了这个关键问题,也就解决了上述三种方法存在的问题。
解决这个问题的难度主要在于控制USB加解密指令到达USBKey的时间。要解决这个问题首先要分析USB物理层数据的传输方式和规律。根据USB2.0规范可知,USB在物理层上传输数据是以数据包的形式传送,数据包主要有SOF、SETUP、OUT、IN等。数据包的传输方向如表1所示。
表1 USB主要数据包传输方向
从数据包的传输方向可知:如果在USB数据线上解析到OUT包,可知这是一条由PC机传送至设备的信息;SETUP虽然传输方向也是由PC机传送至设备,但是SETUP包仅在设备枚举阶段,设备枚举完成之后不会再产生SETUP包;SOF包是周期性的数据包,很容易通过包头解码识别出来。
方法一出现攻击时间不确定的原因主要是PC机要面对多个USB设备,因此还需要分析PC机面对多个USB设备的传输方式和规律。根据USB2.0协议规范,USB2.0通讯是广播通讯,即接在USB线上的所有设备都能接收到PC机发送过来的信息,如果该信息与接收设备无关,则该设备不予响应。另外,USBHUB规范表明HUB可以独立与USB设备通讯,PC机发送给USB设备的信息经过USBHUB时,USBHUB可以将PC机广播过来的数据选择性的发送给USBKey,即USBHUB可以屏蔽PC发送给非当前USBKey的信息。
综上可知,在PC机和USBKey之间加入一个USBHUB便可以隔离PC机传送给其他USB设备的信息,这样经过USBHUB之后传输的信息仅仅只是发送给USBKey的信息;其次从USB数据线上解析数OUT数据包,即可知道当前这条信息是PC机发送给USBKey的加解密指令,此时便可以产生触发信号告知攻击设备开始攻击和采集功耗,实现启动攻击设备和功耗采集设备时间和USB进行安全运算的时间的精确匹配。
1.2 安全评估系统原理设计
根据1.1小节分析搭建如图4所示的安全评估系统。该系统的工作原理如下:使用HUB隔离待检测USBKey与其他USB设备;在PC机向待检测USBKey发送加解密指令之前先启动可编程逻辑门阵列(FPGA)抓取USBKey上的数据,再发送加解密指令;FPGA在启动之后检测到OUT包便产生触发信号告知攻击设备如和功耗采集设备,否则继续解析数据包直至停止抓取[6-8]。
图4 安全评估系统原理框图
由于USB数据传输速度固定且数据长度可知,FPGA内部可设置ns级别的延时,这样可以产生精确的触发信号,从而保证USBKey加解密时间和攻击时间、功耗采集时间一致。
使用FPGA采集并解析USB数据去产生触发信号的方法,无需关注USB使用的协议,无需PC机开发额外的软件,也无需关注USBKey所使用的指令,易用性和通用性强。另外,该方法不破坏原有USBKey的工作场景,保持了与实际应用场景的一致性。
2 安全评估系统硬件设计
在图4原理框图的基础上完善USBKey的电源控制部分,在FPGA内部实现USB数据采集和解析功能,连接USBHUB、攻击设备和功耗采集设备。最后所搭建的USBKey安全评估系统功能框图如图5所示。
图5 USBKey安全评估系统硬件功能框图
安全评估系统模块主要包括:中枢控制系统、主控计算机、程控电源、USBHUB、MCU、安全攻击设备、功耗采集设备、USBKey,各个模块及设备的功能如下:
中枢控制系统:控制USBKey电源(MCU)、采集USBKey的物理数据信号(FPGA)和产生攻击触发信号。其中何时开始采集USB数据,解析USB数据包之后,何时产生触发信号是该方法需要实现且最重要的部分,也是实现该方法的难点。
主控计算机(PC):控制程控电源向USBKey提供所需的工作电压并实时读取USBKey的工作电流;通过向MCU发送命令控制FPGA的数据采集的启动和关闭。
程控电源:受PC机控制,给USBKey提供不同的工作电源电压,并测量USBKey的工作电流。
USBHUB:将PC发送给其他USB设备的信息隔离,保证FPGA采集到的USB数据仅为USBKey的数据;
MCU:主要接收主控计算机的命令,启动和关闭FPGA数据采集,同时控制USBKey的电源选择。
安全攻击设备:产生安全攻击信号。
功耗采集设备:采集USBKey在加解密运算期间的功耗。
USBKey:过USBHUB连接主控计算机,用于接收主控计算机的指令进行加解密运算。
3 系统软件流程设计
3.1 安全评估工作流程
根据图5所设计的安全评估系统功能框图,对USBKey进行安全功能评估,具体工作流程如下:
1)中枢控制系统复位:首先给中枢控制系统通电,使其上电复位进入工作状态,连接主控计算机,通过控制命令将USBUkey设备断电。
2)USBKey电源选择:主控计算机向MCU发送命令控制继电器选择USBKey工作电源,程控电源供电或者可编程电源模块供电。
3)初始检测:给USBKey上电,发送命令检测USBKey是否正常工作,如果USBKey不正常工作,更换USBkey;
4)启动检测:给USBKey发送指令更新密钥,初始化加解密数据;
5)启动FPGA数据处理模块:PC发送命令告知MCU启动FPGA采集并解析USB数据包;
6)发送加解密指令:PC机向USBKey发送加解密指令;
7)判断是否FPGA解析数据包超时,若超时PC机记录超时信息并跳至步骤4),否则跳至步骤8)FPGA继续检解析USB数据包;
8)FPGA解析数据包是否有OUT包产生,没有跳至步骤7),有则跳至步骤9);
9)产生触发信号,如果FPGA成功解析到OUT包,根据后续数据包长度延迟一定时间再产生触发信号并跳至步骤(10);
10)攻击设备和功耗采集设备接收到触发信号后同时产生攻击信号和功耗采集,并判断是否攻击成功,若攻击成功则PC机保存攻击记录及功耗采集记录,反馈并跳至步骤11),若失败则PC保存失败记录,并跳至步骤4);
11)USBKey断电,判断是否结束攻击,若结束则跳至步骤(12),否则上电并跳至步骤4);
12)结束实验,分析功耗波形做性能评估。
3.2 软件工作流程图
系统工作流程如图6所示,该流程图详细表述了该安全评估系统在USBKey工作过程中的整个软件工作流程。
图6 安全评估系统工作流程
4 实验结果与分析
4.1 实验结对比
选用XlinxFPGA和STM32的MCU实现中枢控制系统功能,在FPGA上完成USB数据包采集和解析功能,在MCU上完成FPGA控制部分功能。实现中枢控制系统后根据图5所示搭建安全评估系统,该系统已在射频识别芯片检测技术北京市重点实验室进行了系统级验证并取得了良好的效果,实验成功率90%以上,相比较于方法一(成功率<15%)成功率很高。图7和图8为实验过程中捕获到的算法功耗波形图。
图7 实验室捕获的RSA算法功耗图
图7为使用本方法在USBKey进行RSA运算过程中抓取的功耗波形图,其中触发信号为FPGA采集到USBKey加解密指令之后解析和产生,波形密集且变化剧烈部分为芯片运行RSA算法时的功耗[9-10]。
图8 实验室捕获的DES算法功耗图
图8为使用本方法在USBKey进行DES运算过程中抓取的功耗波形图,其中阴影部分功耗波形为芯片运行DES算法时的功耗[11-12]。
实验结果表明测试人员可以通过触发信号后的功耗波形图分析出USBKey当前使用的安全算法、密钥等相关信息,通过这些信息确可以判断USBKey产品的安全性。
该方法与传统的三种方法的效果对比如表2所示。
表2 方法效果对比
综上所述,本文设计的评估系统与现有技术相比有以下优点:
1)易用性:无需关注USB协议,PC端无需开发额外软件。
2)通用性:无需关注不同USBKey的加解密指令,解析出OUT数据包即可产生触发信号。
3)精确性:能够在芯片启动安全运算之前控制触发信号的产生时间,精度达到ns级别。
4)应用性:贴近USBKey实际应用场景。
4.2 实验结果分析
该系统在实验室验证效果良好,成功率达到90%以上,但是仍未达到100%,主要原因是USB数据采集和解析部分代码尚存在不完善的地方,未能够100%正确解析出数据包,在后续的研发工作中还需要优化该部分代码。
5 结束语
本文利用FPGA采集USB数据的方法设计并实现了一套基于FPGA数据采集的USBkey设备安全评估系统,可以在USBKey进行交易时产生精确的攻击和功耗采集,从而评估该USBKey的安全性能。该系统能够精确控制产生攻击USBKey信号的间,并支持USB各类协议,无需开发相关软件,大大弥补了现有方法存在的不足,提高了USBkey安全评估的准确性和工作效率。该系统经过后续完善后,成功率能够达到100%,应用前景将非常广阔。