微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于PCI总线加密卡硬件设计

基于PCI总线加密卡硬件设计

时间:04-14 来源:互联网 点击:

3DES密码硬件模块为控制模块和数据路径设计两部分。控制模块产生数据通路需要的控制信号序列,保证数据处理单元正确有序地工作。数据路径用来实现信息传送和密码变换的数据处理单元。3DES算法设计采用迭代结构,由初始置换电路IP、多路选择电路L_MUX和R_MUX、32-bit L锁存器、32-bit R锁存器、扩展置换E处理电路、S盒数据代替电路、P盒置换电路及末置换IP-1电路构成。其运算电路如图3所示。

  3.2 3DES输入输出模块设计

  输入输出模块主要为密码运算模块提供密钥、数据以及命令信息的模块。控制信号主要包括:操作时钟CLK、系统初始化INIT、写使能WEN、读使能REN、运算完毕READY、DIN[31:0]、数据输入、数据输出DOUT[31:0]、端口选择A[2:0]。当INIT=1时,将3DES模块内部所有寄存器复位并清零;当A[2:0]=010, WEN=1时,在CLK时钟上升沿,将命令字由32位数据总线写入芯片内部命令寄存器;当A[2:0]=001,WEN=1时,在CLK时钟上升沿,将128位的密钥分四次由32-bit数据总线写入芯片内部密钥寄存器;当A[2:0]=000,WEN=1时,在CLK时钟上升沿将64位的数据分两次由32位数据总线写入芯片内部输入数据寄存器;每写够2个长字,3DES模块开始运算,运算完毕后,READY变为高电平,输出数据分为两组分别送入temporary_l和temporary_2两个寄存器。3DES Quartus仿真波形如图4所示。


  4 密码服务的PCI传输控制

  完成了密码算法模块后,还要设计一个接口控制模块,将其连接到PCI接口模块,以实现密码模块与PCI主机的通信连接。下面以3DES密码模块为例,介绍面向PCI传输的密码算法接口控制模块的设计。图5为该模块的设计框图,在PC机与加密卡的通信过程中,驱动程序先将数据按32bit分组送入PCI中指定的IO存储器地址中。一次加密服务流程如下:数据首先进入输入缓存模块,分别将3DES密钥Key1、Key2送入I/O地址70h,74h,78h,7ch;数据送入80h,84h;命令送入88h。待数据传输完毕,由驱动程序向密码算法模块发送启动信号,在计数器模块的控制下,命令、IV向量、密钥、数据由缓存模块依次进入密码运算模块;密码运算完毕后向PCI模块发送ready信号,并把数据处理结果放入输出缓存地址9ch和a0h中,驱动程序在检测的ready信号为高时从输出缓存地址取走数据。


  5 加密卡驱动程序设计及系统测试

  PCI加密卡为主机提供加/解密服务,并为应用软件提供相应的软件接口,主要包括用Visual C++开发的WDM驱动程序和应用程序编程接口函数库两个部分[4]。在Windows2000系统中可以使用多种驱动程序,如虚拟设备驱动程序(VDD)和内核模式驱动程序。其中,WDM驱动程序是一种PnP驱动程序,它遵循Windows2000即插即用协议的内核模式驱动程序,同时还遵循电源管理协议,并能在Windows98、Windows2000和Windows XP间实现源代码级兼容。

  应用程序与WDM通信时,应用程序先调用CreateFile函数打开设备,然后调用DeviceIoControl与WDM进行数据通信,最后用CloseHandle关闭设备。主机应用程序用Visual C++开发生成,主要包括系统的用户界面设计、用于输入用户数据、显示运算后的结果数据、调用驱动程序实现某种功能。驱动程序与应用程序之间的通信分为同步方式和异步方式。若采用同步方式,则应用程序调用DeviceIoControl函数时将被阻塞,等待PCI设备进行数据处理,完成相应操作,直到驱动程序给应用程序返回值后,应用程序才会接着运行。若采用异步方式,则应用程序调用DeviceIoControl函数将立刻返回,不等待驱动程序对数据的操作。这样,如果在应用程序退出之前,驱动程序还没完成I/O操作,就需要编写超时取消I/O操作的代码,确保在应用程序退出之后正常关闭设备。异步方式相对比较复杂,考虑到设计中算法对时序要求高,所以本设计选择同步方式实现计算机与PCI设备之间的通信。

  3DES加密算法和驱动程序全部完成后,为了对整个加密卡的功能进行验证,开发了一个文件加密服务程序对加密卡进行测试。测试过程如下:

  第一步,系统安装及初始化。首先将加密卡插入到PCI插槽中,将硬件设计下载到FPGA配置芯片后,重新上电,装载驱动程序,最后,启动应用程序开始整个加密卡的测试工作。
  第二步,加密功能测试。输入3DES的两个加密初始密钥Key1、Key2,选择一个事先编辑的文本文件Plain.txt为待加密的明文数据。模式选择为加密的情况下,所得密文数据输出到Cipher.txt文件中。
  第三步,解密功能测试。为了便于比较,仍然选用Key1、Key2为3DES的两个解密初始密钥。导入Cipher.txt作为待解密的密文数据,在模式选择为解密的情况下,所得明文数据导出在Plain1.txt文件中。经过比较,Plain.txt和Plain1.txt完全一致。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top