3 智能卡软件结构
身份认证智能卡的软件结构主要包括顶层身份认证系统应用程序、PCI接口驱动程序和FPGA内部加密算法模块三部份。其结构如图2所示:
3.1 认证系统顶层应用程序
系统顶层的应用程序主要是提供给用户一个GUI界面接口,以便用户直接通过GUI接口进行身份认证相关操作,避免用户直接调用底层驱动函数,方便用户使用智能卡。顶层应用程序调用相应的智能卡驱动程序接口,发送相应的指令并从底层硬件获得加密后数据,同时按照通信协议规定的数据格式和发送顺序通过网络传送到远程计算机系统。
3.2 PCI接口驱动程序
在windows操作系统下,执行于用户态的应用程序不能直接访问硬件,而必须通过调用执行于核心态的设备驱动程序提供的各种服务间接地对硬件资源进行访问,从而确保系统的安全。设备驱动程序是提供给硬件设备连接到计算机系统的软件接口,它使用户应用程序可以用一种规范的方式访问硬件,而不必考虑如何控制硬件。WDM设备驱动程序模型就是windows环境下设备驱动程序模型。
目前常见的驱动开发软件如NuMega公司的DriverStudio提供了封装各种通用操作的驱动程序类库以及大量参考代码,方便用户进行WDM驱动程序的设计,有效缩短了驱动程序开发周期。
3.3 FPGA加密模块
FPGA是身份认证智能卡的核心部件,身份认证系统的数据加密、用户身份信息码验证以及数据接口控制逻辑均在FPGA中完成。FPGA内部模块结构如图3所示:
认证方提供的128 bit随机数N经过State矩阵产生模块分解为一个4×4的矩阵。当数据读写模块从FLASH存储器中读出128 bit的共享加密密钥K和S盒变换矩阵后,密钥扩展模块首先将128 bit的加密密钥K按密钥扩展算法产生一个扩展密钥,再从扩展密钥中选择每轮运算的轮密钥。在迭代控制模块管理下,128 bit随机数N经过ByteSub模块、ShiftRow模块、MixColumn模块、AddRoundKey模块多轮迭代运算,并在最后一轮运算结束后从AddRoundKey模块输出加密后的密文数据。PCI 9054接口模块主要实现FPGA芯片和PCI9054本地总线之间的数据交换。FLASH接口模块将用户读写操作转换为FLASH存储器的读写操作时序。数据读写模块负责向FLASH接口模块发送数据读写和擦除信息。命令解释模块和其他所有模块相连,完成用户命令译码工作。所有模块均在Verilog HDL语言设计的有限状态机(FSM)控制下运行。
4 总结
基于FPGA的智能卡提供了一种新的身份认证方式,本文作者创新点如下:
(1) 设计了一种基于FPGA的身份认证智能卡。身份信息加密运算均在智能卡内部完成,除加密结果外其他所有运算的中间状态值均不会出现在计算机系统中,有效地提高了认证系统的安全性。
(2) 利用Verilog HDL语言设计有限状态机在FPGA中实现128 bit Rijndael算法。在系统时钟频率为50 MHz时测得智能卡加密速度达962.03 Mbits/s,在效率和速度上均优于软件加密方式,并且可以方便地扩展到192 bit或256 bit密钥,使用灵活。
(3) 利用PCI 9054 实现FPGA与PCI总线之间的高速数据传输,降低了PCI接口设计的复杂性,保证大量并发认证请求服务下系统的性能。
在基于智能卡的身份认证系统中,认证方和被认证方均采用同样硬件结构的身份认证智能卡[6],FLASH内部存放相同的一组密钥,可以根据需要灵活地选择密钥。在需要多方进行身份认证的系统中,可以在FLASH内部同时存放多组密钥,对于不同的认证操作选择与之对应的加密密钥,利用一块智能卡完成多方身份认证,具有广阔的应用前景。基于FPGA的身份认证智能卡已在物流防伪系统中得到了应用,测试结果表明,该身份认证智能卡安全、可靠、高效。