单芯片方案的USB加密狗设计

2015-06-24 10:57陈平平谭永明
东莞理工学院学报 2015年3期
关键词:描述符加密电阻

陈平平 谭永明

(东莞理工学院 电子工程学院,广东东莞 523808)

加密狗是接在微机端口上的一个软件保护装置,它包括主机检查程序和密钥 (也称加密盒)两部分,是属于软硬件结合的加密技术,具有加密强度大、可靠性高等特点,现已广泛应用于计算机软件保护[1]。加密狗技术已经发展到第4代,它以USB接口、微控制器和EEPROM为核心器件,又称微狗,在智能性、应用灵活性和抗破解能力等方面都得到了很大提高[2]。

USB加密狗的实现有三种方式:一是最简单的,不需加密只返回确认信息,即计算机发送数据给加密狗,加密狗接收到数据后验证是否正确,返回一个确认信息给计算机。二是对数据进行加密,即计算机发送数据给加密狗,加密狗按照某个算法处理接收到的数据,同时加密狗将处理后的数据返回给上位机,由上位机来验证加密后的数据[3-5]。以上两种方式,都只是简单地实现加密狗的功能,虽然也有加密处理,但是数据经过USB接口传输时是明码传输,很容易在计算机上被数据监控软件获取数据后破解。三是多重加密的方式,即数据传输过程再次进行加密[6]。

现在流行的USB加密狗设计方案是单片机+USB接口芯片+EEPROM存储器,此方案不但系统复杂,而且具有体积大、硬件成本高等缺点[7]。选择的设计方案是通过一款内带EEPROM的单片机,通过普通IO口来模拟USB时序,完成USB1.1协议的通信,利用DES算法来实现保密传输与数据加密,最终实现USB加密狗的功能,即通过单芯片就能解决问题。

1 USB加密狗的硬件设计

USB加密狗采用的硬件电路图如图1所示,全部功能由一个芯片完成,既降低了硬件成本同时也提高了系统可靠性。电路中选用的单片机是Atmel公司生产的ATtiny85,它是一款基于AVR RISC低功耗CMOS的8位单片机,工作电压为1.8~5.5 V,内嵌8K字节的Flash程序存储器,512字节的SRAM数据存储器和512字节的EEPROM,其Flash程序存储器支持ISP和debugWIR编程方式。采用SOP8的封装,有6个多功能复用的I/O引脚,都可配置为外部中断,有2个独立可设置预分频的8位定时/计数器。内部还集成了上电复位电路、看门狗、RC振荡器和片内温度传感器等[8]。如图1所示,从USB接口引入的5 V电压,经过两个二极管降压后变为3.6 V电压作为系统电源供给单片机使用。将单片机的第1引脚配置为IO口外接LED用于显示运行状态,第5、6引脚配置为IO口用于联接USB的数据线,第7脚配置为外中断引脚。为了满足低速USB设备的1.5 M速度时序的读写要求,单片机需要达到20MIPS的指令执行速度,故电路中将第2、3脚配置为晶振引脚并连接20 MHz的晶振。

图1 软件狗电路图

根据USB的协议规范,USB主机的下游端口D+与D-上都分别连接一个15 K的下拉电阻到地,当端口悬空 (即没设备插入)时,输入端就被两个下拉电阻拉回到低电平。而USB设备端在D+或者D-上接一个1.5 K的上拉电阻连到电源,1.5 K的上拉电阻是连接D+还是D-由USB设备的速度来决定。对于全速设备和高速设备的上拉电阻连接到D+上,而低速设备的上拉电阻则是连接到D-上的。当设备插入USB主机的下游端口时,接了上拉电阻的那条数据线的电压由1.5 K的上拉电阻和15 K的下拉电阻分压决定,产生高电平信号,USB主控制器就能检测到被拉高的数据线是D+还是D-来判断插入的是什么速度类型的设备。因为本方案所设计的加密狗为低速USB设备,故USB接口的差分数据线D-的上拉电阻R3为1.5 K。同时D-通过330 Ω的限流电阻R2联接到单片机ATtiny85的PB0引脚,PB1引脚通过电阻R1联接到D+和INT0,INT0为单片机的外中断口,当USB总线上有数据时采用中断方式触发。由于D-在总线处于恢复状态和复位信号状态时电平不会发生跳变,故而需用D+数据线连接至单片机的外部中断0(INT0),当有中断发生时,表示总线上有数据传输,此时再由软件来判断为何种数据传输。

2 USB接口的实现

用单片机IO口来模拟USB接口时序,即可完成USB接口芯片的功能,包括NRZI编解码、同步模式的识别、并行/串行转换、位填充/解除填充、CRC校验/产生、PID校验/产生、地址识别和握手评估与产生等功能[9]。其设计的核心是USB数据传输的NRZI编解码,USB数据包的分析和描述符。

USB发送数据的编码方式采用NRZI编码:当数据为0时,电平翻转;当数据为1时,电平不翻转,为了防止出现长时间电平不变化,所有在数据发送前进行串行化后加入了位填充处理,即当遇到连续6个数据1是时,就强制插入一个数据0,经过位填充后的数据,进行NRZI编码后发送到USB差分数据线上。USB接收数据的过程则是USB发送数据的相反过程:先进行NRZI解码,去掉位填充,最后是串行数据转并行数据。因为USB接受者只能通过USB数据包来获得同步时钟,所以在每个USB数据包的最开始都有个同步域 (SYNC),这个域固定值为0000 0001,这个域通过NRZI编码之后,就是一串方波,接受者可以通过SYNC域来同步之后的数据信号。由于通信过程对时序要求非常严格,所以本设计的软件部分全部使用汇编语言编写,同时在进行读写操作时选择合适的指令以满足时序的要求。

USB总线上传输的数据是以包为基本单位的。一个包被分成不同的域,根据不同类型的包所包含的域是不一样的。但是不同的包有共同的特点,就是都是要以SYNC开始紧跟着一个包标识符 (PID),最终以包结束符EOP来结束这个包。单片机在接收到EOP结束符后,就开始对USB数据包进行分析确定包的类型并调用相应的函数来处理。

标准的USB设备有5种USB描述符:设备描述符,配置描述符,字符串描述符,接口描述符和端点描述符[10]。一个USB设备只有一个设备描述符,设备描述符里面决定了该设备有多少种配置,每种配置有相对应的配置描述符;同时在配置描述符中又定义了该配置里面有多少个接口,每个接口有相对应的接口描述符;在接口描述符里面又定义了该接口有多少个端点,每个端点有相对应端点描述符;端点描述符定义了端点的大小和类型等等。在USB的协议规范中,没有USB加密狗这样的类型,所以在设备描述符中的类代码为0XFF,即厂商自定义的设备。考虑到加密狗的实际需求,本设计只提供一个普通的数据端口,数据端口只支持中断传输,支持包的长度为8字节。

用软件模拟USB时序,实现USB接口通信并成功枚举后,给上层加密狗的功能程序提供的接口函数是ReadSoftdogData和WriteSoftdogData,通过函数ReadSoftdogData采用软件中断的方式读出上位机软件发来的64位数,然后通过函数WriteSoftdogData把数据返回给上位机。

3 加密处理方法

设计中考虑到设备的安全性及单片机的性能,采用DES加密算法。目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现其他更有效的办法,因此DES算法具有极高的安全性。DES算法使用64位的密钥,其中只有56位有效,而56位长的密钥的穷举空间为256[11-13]。DES算法的加密流程图如图2所示。DES解密过程与加密过程类似,文中将不做介绍。

图2 DES算法的加密流程图

图3 软件狗加密过程图

本设计的加密狗加密具体过程如图3所示,上位机产生一个随机数D1,并将随机数进行加密处理成D2发送给USB加密狗,即实现传输的加密。加密狗收到数据D2后根据约定的密钥对数据进行解密成D1。接着将数据进行另一套加密变成数据成D3,然后进行传输加密成D4,最后将D4返回给计算机。计算机得到数据D4后,进行两次解密得到数据D1,完成了加密狗的确认功能。这样两级的加密方式,有效地防止了通过数据监控软件获取密码的行为。

4 功能的实现

本加密狗的功能是保护软件版权,当用户从软件供应商处购买软件时,供应商会把加密狗的相关信息写入到加密狗中,如初始密码、所支持的计算机数量、软件可使用的次数等等。这些信息都可通过加密算法存储在单片机片内的EEPROM中。用户在运行软件时,加密狗会根据使用情况更新存储在EEPROM中的信息。具体的功能流程如图4所示:1)插入USB后完成加密狗设备的枚举;2)枚举成功后上位机软件产生一组32位的随机数,并将这组随机通过USB发给加密狗;3)加密狗接收到上位机发过来的32位随机数后根据约定的加密算法,对这个随机数进行运算,并将结果返回上位机软件;4)上位机软件接收到数据后,也运行加密反运行算法,看是否能返回原来的随机数,如果成功反回原来的随机数则此加密狗是合法的,从而达到保护软件版权的目的。

图4 功能流程图

5 安全性能测试

主要使用USB协议分析软件USBlyzer、DES加解密软件IDES_Tool和笔者自行设计的一个应用软件来共同测试。USBlyzer是USB协议分析软件,该软件可实时监测USB接口数据,有抓包、解包和协议分析等功能,也可以来破解明文传输 (不加密)的USB加密狗的,同时通过这个软件可以看到加密狗的类型和设备名称。

图5 测试截图

在使用笔者设计的应用软件测试前必须检测到机器已经加载加密狗,因此进行测试前首先打开USBlyzer软件。打开USBlyzer软件如图5所示,在Davice Tree窗口中看到加密狗的类型和设备名称。假定密钥为0X8899AABBCCDDEEFF,这组数据是16进制数密钥,在设计加密狗时写入加密狗的代码中,检测软件看不到该组数据。笔者设计的应用软件产生的随机数为0X5E87D9837ADF2C77,这组随机数据是在USB接口中传输,一般情况下能被USB分析软件中看到,本设计的加密狗不是将这组报随机数据直接传输,而是加密为0X0000001887BECBB4进行传输,因此未能在检测软件中看到该组数据。加密后的数据为0X0000001887BECBB4,通过USBlyzer软件可以获取到这组数据,如图5中URB Details窗口中能够看到该组数据。如果该数据被他人非法获取时,使用与原密钥 (0X8899AABBCCDDEEFF)只错一位的密钥:0X0899AABBCCDDEEFF,那么非法获取者根据 DES算法解码得到的数据是:0XEDC955911CD1A8CD,可见此数据跟原数据没有任何相关性。即采用传统的拦截USB数据进行破解,或者拦截大量USB数据后进行反推密钥方式,都无法成功,证明了此设计加密狗的安全性能。

6 结语

本设计基于单芯片为解决方案,从软件着手简化设计。用软件来实现硬件的功能,通过DES加密算法实现保密传输,达到降低成本,提高系统可靠性、安全性的要求,为软件版权保护提供了一种理想的方式。因为内部有EEPROM,可以给软件提供商甚至用户进行二次开发。

[1]徐增祥.USB软件狗的设计及反破解技术[J].电子技术应用,2002(7):11-14.

[2]李志伟.基于硬件特征信息嵌入认证的软件保护[J].计算机工程与设计,2012,33(7):2550-2554.

[3]陈芳,李伦.基于USB软件狗的反解密研究[J].微型机与应用,2004(1):19-21.

[4]赵路华.基于USB Key的软件保护体系研究[J].计算机安全,2013(8):18-20.

[5]吴德会,王志毅.基于混沌保密的USB软件加密狗及其反解密研究[J].微计算机信息,2005,21(8):15-17.

[6]胡军,刘文江,胡怀中,等.基于PIC16C54单片机的智能软件狗设计[J].电子技术应用,2003(1):18-20.

[7]王玮.一种基于USB Key加解密技术的软件保护方案研究[J].信息网络安全,2012(5):52-58.

[8]于正林.AVR单片机原理及应用[M].北京:国防工业出版社,2009.

[9]薛园园.USB应用开发技术大全[M].北京:人民邮电出版社,2007.

[10]肖踞雄,宋中庆.USB技术及应用设计[M].北京:清华大学出版社,2003.

[11](美)罗伯特.算法[M].4版.谢路云,译.北京:人民邮电出版社,2012.

[12]于广威,何文才.基于HMAC的加密狗设计[J].信息安全与通信保密,2011(11):68-69.

[13]欧阳雪,周寰,邓锦洲,等.一种面向软件生命周期的授权保护系统设计与实现[J].计算机工程与科学,2013,35(4):59-64.

猜你喜欢
描述符加密电阻
一种新型离散忆阻混沌系统及其图像加密应用
基于结构信息的异源遥感图像局部特征描述符研究
电阻大小谁做主
基于AKAZE的BOLD掩码描述符的匹配算法的研究
一种基于熵的混沌加密小波变换水印算法
巧测电阻
Linux单线程并发服务器探索
电阻焊
利用CNN的无人机遥感影像特征描述符学习
基于multisim13.0负电阻在电源中作用的仿真