摘 要:利用USB接口技术,结合PC机的结构特点,为基于PC平台的数据加密系统提出了一种使用USB连接的解决方案。并指出了该方案现存的一些缺陷及改进方法,以备今后系统的升级。
关键词:USB 数据加密
在目前的计算机环境中,利用一些运行在计算机内部的加密协议进行数据传输是较安全的。但是一旦微机连接到Internet上,在系统安全环节上就会形成一个脆弱的链接。在网络上传输未加密的信息,极有可能让黑客获得如用户密码和帐号这样的敏感信息。现有的软件加密方法远远不能满足目前的需要。加密专用硬件设备是目前国际上首选的替代软件加密的产品。使用加密硬件,就必须考虑计算机接口的问题。计算机的接口有许多种,如传统的串口和并口。串口的数据传输率在115K~230Kbps,一般用来连接鼠标和外置Modem。并口的数据传输率比串口快8倍,标准并口的数据传输率约为1Mbps,一般用来连接打印机、扫描仪等。早期的软件狗类加密硬件基本上都使用并口,不但极易与打印机冲突,而且容易被破解。要想设计出更可靠更完善的加密硬件,必须采用新的计算机接口。
由于USB的诸多优点,市场上已经出现了很多USB的加密产品,如带加密功能的USB闪存、USB加密卡等。但这些产品多是简单的使用软件进行加密,而没有结合FPGA技术形成完整的数据加密系统。为此,我们选择了开发USB接口加密系统。本文将详细阐述USB在数据加密系统中的应用。
1 系统的总体设计方案
整体硬件结构如图1所示。下面概要介绍本系统的三大部分。
1.1 USB接口子系统设计
对于实现较复杂的加密方法,外置的MPU处理起来更方便,故本系统的USB接口电路采用微处理器加USB专用接口芯片来实现。USB专用接口芯片是美国国家开云棋牌官网在线客服公司提供的样片USBN9603。微处理芯片采用飞利浦公司的可基于系统编程的单片机P89C51RD2,它负责控制USBN9603芯片的状态和读写USB节点的数据,以及负责控制外部存储器及其他功能设备。P89C51有3个加密位,用来保护固化的单片机软件不可读,从而保证系统不被仿制。本系统还使用了ATMEL公司的24C64作为存储芯片。24C64芯片包含有8KB可读写的Flash存储器,在掉电时可以保存软件开发商设置的初始口令以及用于存放关键数据及配置参数等信息,可以用于从硬件上对抗共享器共享,可以更加安全稳定地实现软件试用期和使用次数控制等功能。
1.2 软件子系统设计
根据USB系统的组成,可以将软件分成二大部分:主机端软件和设备端软件。主机端软件由设备驱动程序和应用程序组成。开发设备驱动程序有专门的开发工具包,在编写软件驱动程序时用到的主要工具有Windows98 DDK、DriverWorks和VC++6.0。Windows一般提供鼠标、键盘等HID设备完整的主机端驱动程序,但对于大部分用户自己设计的硬件设备,需要在通用的底层驱动程序的基础上开发相应的客户驱动程序。USB主机端软件开发的主要任务就是调用USB驱动程序接口、编写设备驱动程序和用户接口的应用程序软件,并在软件中加入反破解措施。
在各种反破解措施中,跟踪分析方法的威力最为强大,具体的跟踪分析方法有静态分析和动态跟踪破解法等。
(1)静态分析方法。用反编译工具软件对受保护软件进行逆向分析,以求找出访问外部加密硬件的代码并进行相应的修改。本文介绍的USB加密系统中采用了API函数调用与SHELL外壳加密相结合的技术,可以有效地对抗静态分析方法。即使使用脱壳工具软件后,外壳被破坏,内部的加密函数的调用仍然能保证保护的有效性。
(2)动态跟踪破解法。要求使用者具有丰富的破解经验。它使用调试分析工具软件,跟踪控制受保护软件的整个运行过程,找出它与加密接口间交互部分的判断代码并进行修改,使其跳过对加密硬件的检测或使检测结果无效。对付这种破解方法,本方案使用了数据交换随机噪声技术和迷宫技术,即在程序入口和出口之间包含大量无效判断跳转进行干扰,动态改变执行次序,提升抗跟踪能力。另外,USB加密系统内部设有时间闸,各种操作必须在规定的时间内完成。正常操作用时很短,而跟踪过程用时较长,超过规定时间将返回错误结果。
1.3 加密子系统设计
加密子系统的设计采用单片机加FPGA(Field Programmable Gate Array)模式,既可方便地用单片机完成对USB口的操作,又能利用FPGA速度快和保密性强等特点实现复杂的加密算法。
在加密系统的设计与实现中,主要是根据芯片的容量大小,选择一种合适的加解密算法,将其在FPGA芯片中实现,同时处理好与单片机的外部接口问题。根据FPGA的特性,在以后的使用中可以随着加密算法的进一步发展,采用动态可重构技术,将新的加密算法重新配置在硬件中,实现新的加密技术,故此加密装置有很高的灵活性。本系统开发的EDA工具软件采用XILINX公司的XILINX软件包FOUNDATION4.1集成环境,硬件采用XILINX公司的SPARTAN系列FPGA芯片。
2 USB接口电路的开发
2.1 USB接口电路
电路设计采用模块化的设计方法。本系统在电路一级有3个模块:USB接口模块、I2C总线模块和加密模块。这样不但可以提高开发效率,而且非常有利于系统的扩展和升级。本文重点介绍了3个模块的设计方法及电路的连接。在系统中,使用ATMEL的24C64作为存储芯片,采用P89C51RD2单片机的P1口模拟I2C总线来实现MCU与24C64的连接。系统USB接口平台的硬件电路设计框图如图2所示。
2.2 P89C51单片机与USBN9603的硬件连接设计
对USBN9603芯片的控制是通过向它的寄存器读写数据来实现的。它的每个寄存器都有相应的地址映射,其地址范围从0x00~0x3F,对应58个寄存器(有6个地址保留)。USBN9603芯片相对于P89C51单片机来说更像是一片外部存储器,当USBN9603被片选后,读写某个寄存器的地址,就可以被访问。P89C51单片机的P0口可以作为一个地址/数据复用的总线口,而USBN9603芯片的总线连接方式是可设定的。USBN9603的并行连接有2种工作模式:复用模式与非复用模式。本接口电路中只用到复用模式与P89C51单片机进行接口。在这种模式下,MODE0接高电平,MODE1接低电平。MPU可以直接访问寄存器DATAIN、DATAOUT和ADDR。图3是USBN9603复用模式读写时序图。根据图3就可以将USBN9603的8位地址/数据总线直接与P89C51单片机的P0口相连及各自的“读写”引脚分别相连。如图4所示。
在标准访问模方式下,USBN9603的序列是首先将地址写入ADDRESS寄存器,然后再读取DATAOUT的数据或者写入DATAIN数据。
3 设备驱动程序的编制
驱动程序的基本功能就是建立应用程序与USB接口之间的数据通信。Windows 98和Windows 2000操作系统为USB总线提供了全面的支持,并且用WDM(Windows Device Mode)设备驱动程序模型代替了VxD设备驱动程序。WDM模型主要采用分层的方法,模仿面向对象的技术。先进行逻辑上的“分层”,然后将标准的实现和低层细节“封装”起来,形成“基类”。客户程序通过“继承”的方式来扩展“基类”的功能,完成所需要的实现。WDM支持USBl.l协议,并为用户开发自己的用户驱动程序提供USB驱动程序接口USBDI。USB用户驱动程序通过USBDI访问USB设备类驱动程序。USB外设不占用端口或中断等硬件资源,所有低层I/O都由USB设备类驱动程序处理。客户驱动程序只关心数据传输类型、传输时序、传输管道以及如何处理数据等主要操作。USBDI就是为实现这一点而设计的软件接口。
如图5所示,Windows对构成一个USB主机的不同软件部分进行了十分清楚的划分。其中USB客户软件仅仅包含了用来控制不同USB外设的设备驱动程序。USB设备驱动程序会通过Windows所定义的一个软件接口来同根集线器驱动程序进行通信。而USB根集线器驱动程序则要通过USBDI来实现同通用串行总线驱动程序(USBD)的通信。然后,USBD会选择2种主控制器驱动程序之一来同其下方的主控制器进行通信。最后,主控制器驱动程序会直接实现对USB物理总线的访问。
在图5中,主控制器驱动程序处于USBD的下方,而根集线器却位于USBD上方。在一个支持USB系统的主机中,都会有一个根集线器来提供2个USB端口。一个USB系统中的所有USB设备,包括USB功能设备和USB集线器都必须以直接接入或星型接入方式接入一个USB根集线器。在Windows环境中,所有的客户驱动程序都可以通过指向一个根集线器驱动程序的接口来和所有接入的USB设备进行通信。另外一种方法就是通过USBDI而直接同USBD进行交互。
4 测 试
下面以前文介绍的整个USB接口平台为基础,给出USB加密系统原型版在Windows98操作系统中的测试。
测试分2步进行,首先对USB接口平台单独测试,然后对整体测试。
测试的主机平台为方正“文祥600”计算机,操作系统的版本为Windows98第二版。首先确保硬件设备连接到PC的USB接口上,并且操作系统为Windows98,按照提示正确安装驱动程序。当本设备接口连入PC机后,操作系统的系统USB总线驱动程序立刻检测到有新的USB设备加入。在与USB设备的0节点进行通信获得设备的基本信息后,操作系统将弹出窗口要求安装驱动程序。在驱动程序正确安装完成以后,在计算机的“系统属性”中就可以看到结果,此时表示USB加密系统已经被正确安装。下面用DriverStudio自动生成的DOS界面的应用程序进行测试。
当应用程序找到设备后,就可以执行读、写2种操作。首先执行写功能:写入6个字符,应用程序提示写入设备成功;然后执行读功能:将写功能写入的6个字符读出,应用程序提示从设备读出了6个字符,并且读出的字符与写入的一致,这说明了USB接口部分读、写功能正常。
接下来是对系统进行总体测试。打开以DOS应用程序为基础重新编制的Windows应用程序,程序界面如图6所示。左边设备信息报告栏第1行显示的“查找设备成功”,表示设备可以正常使用了。在“写数据”窗口中,可以写下任何文本内容,在测试中我们写下了“加密技术——让世界更安全!”的字样。然后点“写入设备”按钮,数据就被写到USB加密板中,左侧信息窗口出现对映的信息;再点击“读取数据”按钮,在“读数据”窗口中,显示了由USB加密系统返回的密文,同样左侧信息窗口也出现对映的信息,这样就完成了加密过程。
对信息进行解密的操作过程与加密的过程相同。首先将密文复制到写数据窗口中,点击“写入设备”按钮,再点击“读取数据”按钮,就可以看到明文“加密技术——让世界更安全!”出现在读数据窗口中(图略)。
以上过程证明了整个系统工作正常,可以完成向设备写入明文数据,USB设备接收到数据后再传递给加密接口进行加密,形成密文,再传送到USB设备,然后把数据读取出来。解密功能也正常,解密后的明文与原始明文一致。
USB是一种全新的通用串行总线接口,是非常复杂的系统,但了解这样一个系统,有助于了解当今接口体系结构的设计思想,对于理解其他的接口体系结构很有好处。
参考文献
1 Compaq,Hewlett-Packard,Intel et al.Universal Bus Specification Revision 2.0.2000
2 Axelson J著,陈逸译.USB大全.北京:中国电力出版社,2001
3 张念淮,江浩.USB总线接口开发指南.北京:国防工业出版社,2001
4 Anderson D著,精英科技译.USB系统体系.北京:中国电力出版社,2001
5 Cant C著,孙义译.Windows WDM设备驱动程序开发指南.北京:机械工业出版社,2001
6 武安河,周利莉.Windows设备驱动程序(VxD和WDM)开发实务.北京:电子工业出版社,2001