基于FPGA+USB接口的硬件加密系统

时间:2011-08-27

  引言


    随着Internet和电子商务的蓬勃发展,基于Internet的商务活动也日益频繁,对信息安全提出了刚搞的要求,保护信息的安全是信息时代迫切需要解决的问题。数据加密目前仍是计算机系统对信息进行保护的一种可靠的办法。它利用密码技术对信息进行加密,实现信息隐蔽,从而起到保护信息的安全的作用。利用USB接口技术,结合PC机(能独立运行、完成特定功能的个人计算机。个人计算机不需要共享其他计算机的处理、磁盘和打印机等资源也可以独立工作。今天,个人计算机一词则泛指所有的个人计算机、如桌上型计算机、笔记型计算机、或是兼容于IBM系统的个人计算机等)的结构特点,为基于PC平台的数据加密系统提出了一种使用USB连接的解决方案。并指出了该方案现存的一些缺陷及改进方法,以备今后系统的升级。

    硬件加密可以采用标准的网络管理协议,比如SNMP、CMIP等来进行管理,也可以采用统一的网络管理协议进行管理。硬件加密是通过专用加密芯片或独立的处理芯片等实现密码运算。将加密芯片、专有电子钥匙、硬盘一一对应到一起时,加密芯片将把加密芯片信息、专有钥匙信息、硬盘信息进行对应并做加密运算,同时写入硬盘的主分区表。这时加密芯片、专有电子钥匙、硬盘就绑定在一起,缺少任何一个都将无法使用。经过加密后硬盘如果脱离相应的加密芯片和电子钥匙,在计算机上就无法识别分区,更无法得到任何数据。对于嵌入式系统,可以通过挂载一个加密芯片(加密IC)来实现硬件加密,如加一个256位密钥的AT88SA102S,这样,在程序被复制的情况下,没有加密芯片AT88SA102S,程序没法运行。对于AT88SA102S的样片,可向广州双龙申请,然后在自己的样品中进行测试。

  在目前的计算机环境中,利用一些运行在计算机内部的加密协议进行数据传输是较安全的。但是一旦微机连接到Internet上,在系统安全环节上就会形成一个脆弱的链接。在网络上传输未加密的信息,极有可能让黑客获得如用户密码和帐号这样的敏感信息。现有的软件加密方法远远不能满足目前的需要。加密专用硬件设备是目前国际上的替代软件加密的产品。使用加密硬件,就必须考虑计算机接口的问题。计算机的接口有许多种,如传统的串口和并口。串口的数据传输率在115K~230Kbps,一般用来连接鼠标和外置Modem。并口的数据传输率比串口快8倍,标准并口的数据传输率约为1Mbps,一般用来连接打印机、扫描仪等。早期的软件狗(Software Dog,是一种计算机软件的加密方式,是“硬件加密锁”的俗称)类加密硬件基本上都使用并口,不但极易与打印机冲突,而且容易被破解。所有加密狗的基本工作原理都是类似的:当用户启动或者使用软件时,软件会联络软件狗,并且读取其中的数据。如果软件狗返回正确的数据的话,软件可以正常使用,否则软件将会停止工作,并且向用户显示出错的提示。从这种原理我们可以看出,如果软件狗要起到不错的加密效果,和被加密的软件的设计是紧密相关的。一般来说,软件读取加密狗的次数越频繁、传输的数据越复杂多样、读取数据的函数越多,破解加密狗的难度就会越大,保护效果也就越好。要想设计出更可靠更完善的加密硬件,必须采用新的计算机接口。

  由于USB的诸多优点,市场上已经出现了很多USB的加密产品,如带加密功能的USB闪存、USB加密卡等。但这些产品多是简单的使用软件进行加密,而没有结合FPGA技术形成完整的数据加密系统。为此,我们选择了开发USB接口加密系统。本文将详细阐述USB在数据加密系统中的应用。

    1 系统的总体设计方案

  整体硬件结构如图1所示。下面概要介绍本系统的三大部分。

 

    1.1 USB接口子系统设计

  对于实现较复杂的加密方法,外置的MPU(Microprocessor Unit,微处理器,微机中的中央处理器(CPU)称为微处理器,是构成微机的部件,也可以说是微机的心脏。它起到控制整个微型计算机工作的作用,产生控制信号对相应的部件进行控制,并执行相应的操作)处理起来更方便,故本系统的USB接口电路采用微处理器加USB专用接口芯片来实现。USB专用接口芯片是美国国家半导体公司提供的样片USBN9603。微处理芯片采用飞利浦公司的可基于系统编程的单片机P89C51RD2,它负责控制USBN9603芯片的状态和读写USB节点的数据,以及负责控制外部存储器及其他功能设备。P89C51有3个加密位,用来保护固化的单片机软件不可读,从而保证系统不被仿制。本系统还使用了ATMEL公司的24C64作为存储芯片。(注:爱特梅尔半导体成立于1984年,总部位于美国。是世界上半导体产品设计、制造和行销的者,产品包括了微处理器、可编程逻辑器件、非易失性存储器、安全芯片、混合信号及RF射频集成电路。通过这些技术的组合,ATMEL生产出了各种通用目的及特定应用的系统级芯片,以满足当今电子系统设计工程师不断增长和演进的需求,ATMEL在系统级集成方面所拥有的知识和丰富的经验使其产品可以在现有模块的基础上进行开发,保证的开发延期和风险。凭借业界广泛的知识产权(IP)组合,Atmel提供电子系统完整的系统解决方案的厂商。 这使客户能够带领他们与市场的电子产品的体积更小,更聪明,更符合成本效益比以往任何时候都通用的服务。 Atmel集成电路的主要集中在消费,工业,安全,通信,计算和汽车市场)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,即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物)模式,既可方便地用单片机完成对USB口的操作,又能利用FPGA速度快和保密性强等特点实现复杂的加密算法。FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。现场可编程门阵列(FPGA)是可编程器件。与传统逻辑电路和门阵列(如PAL,GAL及CPLD器件)相比,FPGA具有不同的结构,FPGA利用小型查找表(16×1RAM)来实现组合逻辑,每个查找表连接到一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此构成了即可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连接或连接到I/O模块。FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及个模块之间或模块与I/O间的连接方式,并终决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式,并终决定了FPGA所能实现的功能, FPGA允许无限次的编程。

  在加密系统的设计与实现中,主要是根据芯片的容量大小,选择一种合适的加解密算法,将其在FPGA芯片中实现,同时处理好与单片机的外部接口问题。根据FPGA的特性,在以后的使用中可以随着加密算法的进一步发展,采用动态可重构技术,将新的加密算法重新配置在硬件中,实现新的加密技术,故此加密装置有很高的灵活性。本系统开发的EDA工具软件采用XILINX公司的XILINX软件包FOUNDATION4.1集成环境,硬件采用XILINX公司的SPARTAN系列FPGA芯片。

    2  USB接口电路的开发

    2.1 USB接口电路

  电路设计采用模块化的设计方法。本系统在电路有3个模块:USB接口模块、I2C总线(Inter-Integrated Circuit,是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点)模块和加密模块。这样不但可以提高开发效率,而且非常有利于系统的扩展和升级。本文重点介绍了3个模块的设计方法及电路的连接。在系统中,使用ATMEL的24C64作为存储芯片,采用P89C51RD2单片机的P1口模拟I2C总线来实现MCU(Micro Control Unit,中文名称为微控制单元,又称单片微型计算机(Single Chip Microcomputer)或者单片机,是指随着大规模集成电路的出现及其发展,将计算机的CPU、RAM、ROM、定时计数器和多种I/O接口集成在一片芯片上,形成芯片级的计算机,为不同的应用场合做不同组合控制)与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是一种全新的通用串行总线接口,是非常复杂的系统,但了解这样一个系统,有助于了解当今接口体系结构的设计思想,对于理解其他的接口体系结构很有好处。

    本文提出的基于FPGA+USB接口的硬件加密系统,由FPGA芯片通过硬件来完成数据加密过程,由高速传输总线进行传输。具有处理速度快、实时性好、安全性高、灵活性强等优点,能够较好的实现主机的硬件加密,具有广泛的应用前景。


  

参考文献:

[1]. USBN9603 datasheet https://www.dzsc.com/datasheet/USBN9603_675540.html.
[2]. P89C51 datasheet https://www.dzsc.com/datasheet/P89C51_1077993.html.
[3]. 24C64 datasheet https://www.dzsc.com/datasheet/24C64_32293.html.
[4]. CPLD datasheet https://www.dzsc.com/datasheet/CPLD_1136600.html.
[5]. P89C51RD2 datasheet https://www.dzsc.com/datasheet/P89C51RD2_538905.html.
[6]. ROM datasheet https://www.dzsc.com/datasheet/ROM_1188413.html.


上一篇:分析功率集成电路中过热保护电路的设计方法
下一篇:简述预测便携式设备的电池剩余电量和运行时间

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料