计算机数据加密卡PCIJMC2000采用DSP与FPGA实现数据加、解密。PCIJMC2000能提供达40Mbit/s的数据处理速度,采用硬件和软件相结合的加密方法,可方便升级算法,并使加密程序代码更加安全可靠。DSP具有高度的并行结构、专用硬件逻辑以及许多专用指令,可以实现快速加密算法,DSP的双访问RAM和主机并行接口可以实现数据PCI传送和DSP处理同时进行,采用深度缓冲技术使花在主机中断上的时间几乎可以忽略不计。
随着现代通信技术的发展,企业及个人越来越多地依赖于互联网进行信息交互。互联网是一个开放式系统,数据一旦上了互联网很容易受到各种有意或无意的入侵,这无论是对于越来越重视个人隐私保护的个人,还是对于越来越重视知识产权保护的公司企业都是无法容忍的,这就需要保密通信 。另外,保存在计算机中的数据也容易受到非法窃取,这就需要对长期保存的重要文件数据进行加密。因此,加密技术受到了越来越多的关注。
密码技术主要包括两部分:即基于数学的密码理论和技术(包括公钥密码、分组密码、密钥管理等)和非数学的密码理论和技术。目前厂商所采用的加密方法可主要分为两大类:软加密和硬加密。软加密即是用纯软件方法来实现数据加密,主要有密码方式、软件自校验方式、许可证管理方式、钥匙盘方式等。所谓硬加密就是通过硬件和软件结合的方式来实现对数据的加密。特别是采用了独特的噪声技术后,可以在发送端发出的网络数据里加入由物理硬件产生的噪声,接收端依据通信协议自动滤除噪声,或者由物理噪声硬件产生随机密钥。
加密卡是结合软件加密与硬件加密的特点与优势,能用来在互联网上实现保密通信,或对计算机文件数据加解密。目前国内加密卡的原理是将加密算法固化在加密卡上的FPGA中,而由主机承担加密运算工作如非平衡算法等。
这样做有几个不足:
1、主机因为运行复杂的加密算法程序而使主机系统性能下降;
2、加密算法程序在主机上运行使加密程序代码的保密性下降,易被破解;
3、主机每次处理的数据仅为32~128bit,造成中断频繁,大量时间花在了中断处理上,所以整个加密密过程速度仅达10Mbit/s[1]。为了改进这些不足,我们进行了加密卡的DSP实现研究,并成功开发了新一代加密卡——基于DSP的PCIJMC2000。
1 方案设计
DSP(Digital Signal Processor)是数字信号处理专用芯片,具有高度的并行结构,专用硬件逻辑以及许多专用指令,可以实现快速加密算法,DSP的片上双访问RAM(DARAM)和主机并行接口(HPI)可以实现数据PCI传送和DSP处理同时进行。PCIJMC2000方案设计如图1所示。
DSP的片上DARAM可以在一个机器周期内被访问两次(两次读操作,或一次读一次写操作),作为DSP的数据空间用作接收和发送缓冲区,片外RAM作为DSP的程序空间用于暂存运行的DSP加密程序代码。
由于采用了两对缓冲区,主机对缓冲区的读写和DSP对缓冲区数据的处理可以同时进行,理论上加密速度可以达到主机读写缓冲区速度(HPI传送速度)的一半和DSP处理速度(含DSP读写操作)二者中较慢的一个。DSP的主频为100MHZ,HPI的时钟为DSP主频的1/5,所以HPI的传送速度为 100M×8/5=160 Mbit/s,加密卡的最高处理速度为HPI传送速度的一半即80M bit/s。当DSP的片外RAM延时不大于7ns,且平均每个字的处理时间不超过20个DSP时钟周期时,则DSP的处理速度不低于HPI的传送速度的二分之一,因此加密卡可望获得接近于40Mbit/s的处理速度。
在这种方案中,加密算法(分组密码算法)固化在卡上的FPGA中,DSP运行软件加密算法(非平衡算法等),主机的工作仅仅是读写操作,不再参与复杂的加密运算,因此由加密卡与主机组成的整个加密系统能获得真正意义上的高速处理。
图1 PCIJMC2000设计方案
2 方案实现
实现该方案的原理框图如图2所示:
图2 PCIJMC2000原理框图
PCIJMC2000分为四个模块:PCI接口、DSP、加密硬件和CPLD。加密算法芯片承担硬件加密工作,加密算法程序代码放在访问延时较长的FPASH中,启动时由bootloader搬到访问延时很短的RAM上运行以实现软件加密,通过向FLASH灌入不同的加密算法程序,就可以实现不同的加密算法。物理噪声芯片提供密钥所需的噪声,CPLD实现组合逻辑电路和时序逻辑电路功能,担当控制器的角色。
芯片选择:
DSP:TI公司的TMS320VC5409,工作频率100MHz;
PCI接口:TI公司的PCI2040,工作频率33MHz[4];
CPLD:Xilinx公司的XC9572XL,延时7ns;
RAM:Cypress公司的CY7C1021V33,延时7ns;
加密算法芯片:SSF10B,反熔丝FPGA实现的SSF10密码算法芯片,分组模式为64位,支持分组密码算法的ECB、CBC、CBF和OFB工作模式。
DSP电源采用TI公司的DSP专用电源芯片TPS73HD318,输入5V,输出1.8V和3.3V。
由于现在PC机的PCI插以5V为主,所以我们设计的PCIJMC2000采用5V信号环境。PCI插槽提供3.3V和5V电源。电路中需要用到的电源有三个:
1.8V作DSP的核电压CVDD;
3.3V和5V作为电路中各芯片的工作电压。
为了合理分配电源,我们将PCI插槽提供的5V和3.3V电源全部加以利用,5V和3.3V直接提供给PCIJMC2000上各芯片使用,另外将5V电源送到DSP的电源芯片TPS73HD318上,其输出的1.8V电源供给DSP作核电压。PCI2040及DSP的所有未用的输入端都必须用上拉电阻接到有效逻辑电平上,以保证这些输入端处于稳定的高电平而不会因悬空而发生电平漂移。
3 系统调试
由于利用DSP实现加密卡是我们提出的新方法,现在还在开发阶段,我们只能进行硬件测试。硬件测试工作主要有两部分,一部分是DSP模块,另一部分是PCI驱动测试。
3.1 DSP模块调试
为了测试PCIJMC2000上的DSP模块,我们首先编写了一个DSP程序并在软件仿真器CCS1.2上调试通过。
给存储器分配置的地址如下[3][4]:
数据空间: 片上DARAM 0000H~7FFFH,片外FLASH 8000H~FFFFH;
程序空间:片外RAM0000H~7FFFH;
该测试程序只是执行读写操作,通过CCS的调试窗口观察被写的存储器单元的内容有无变化即可知道硬件电路是否完好。
测试程序经CCS在DSK板子上调试通过后,我们再将硬仿真器接到PCIJMC2000的JTAG接口上。硬仿真器能够正确识别PCIJMC2000上的DSP,运行测试程序,采用单步运行模式,CCS能够向PCIJMC2000的DSP或片外存储器写入数据或读取数据。
通过PCIJMC2000上的手动复位按钮能够复位DSP。
3.2 PCI驱动测试
为了测试DSP与主机之间的硬件电路,我们利用DriverWorks的向导程序Driver Wizard,编写了一个简单的Win98 PCI驱动程序。PCI2040提供两个地址空间资源:一个4K空间用于映射HPI的控制和状态寄存器组,一个32K空间用于映射DSP的片上存储器,这两个地址空间均可以映射到主机存储器空间或IO空间,我们将其全部映射到主机存储器空间。
在框架程序的PcitodspDevice.cpp文件中,查找有“TODO”提示的地方,这是程序员需要添加具体功能代码的位置。程序主要实现ReadFile()、WriteFile()这两个重要的IRP调用。我们编写的只是一个测试程序,目的是为了检测硬件电路是否完好,只有一些读写操作,读写操作的位置为32K空间中前8K空间的一个字。由于DSP片上存储器的前128个字为寄存器和Scratch-Pad RAM,所以读写操作应从128以后开始,我们选取0x200单元。
修改并设置好程序中的参数后,编译生成了.sys和inf文件。再对.inf文件进行修改,添加设备信息,如:设备名称”数据加密卡”,驱动程序编译完成。
由于windows98和windows2000支持即插即用,可以先关机,插入PCIJMC2002卡,然后开机。当计算机启动时,它会自动查找到PCI卡并提示装入驱动程序,指定.sys和.inf文件的位置后,驱动程序会自动装入,安装完成。
安装完成后,从加密卡的设备信息框中看到如下一些信息:
设备名称:数据加密卡 中断请求:09
内存空间0:df009000-df009fff 内存空间1:df000000-df007fff
设备名称是在.inf文件中手动加入的信息,中断请求和内存空间是计算机自动分配的。
主机将DSP的片上存储器映射到0xdf000000开始的连续的32K内存中(实际只能用前面8K,后面24K未用),将PCI2040的控制与状态寄存器组空间映射到0xdf009000开始的连续的4K内存中。
我们第一次读入DSP的0x200单元的内容为0。向该单元写入后,再读取该单元的内容变成了0xa0a0(在WriteFile()函数中输出的值)。
PCIJMC2000硬件系统调试全部通过。
4 结论
本文创新点:1、利用DSP的片上存储器设计了深度缓冲结构,实现了数据传输和处理并行进行,提高了加密流程处理速度;2、设计了加密算法代码运算与主机的脱离,不仅使主机仅承担数据传输任务,而且使加密软件代码对主机隐蔽,屏蔽了用户,有效防止了对加密算法代码的恶意窃取,使得加密程序代码保密性很高。3、通过对加密卡上FLASH芯片的写入可方便实现在线升级。