APP下载

基于FPGA的税控算法加密卡设计与实现

2014-12-18苏振宇

电子科技 2014年12期
关键词:状态机数据包总线

苏振宇

(浪潮集团有限公司信息安全事业部,山东济南 250101)

由于当前国税、地税、各省、各税种发票不同,辨别难度较大,因此给造假者可乘之机。本文设计的基于FPGA的税控算法加密卡可有效地解决上述问题,提供了高效的防伪措施。该加密卡通过PCI总线内置于税控加密机中,将发票上的数据加密成一组防伪码,打印在相应的区域上,由于采用国家密码管理局的高安全性税控密码算法芯片,因此发票难以被篡改,从而可满足税务机关对发票管理和身份认证的要求。

1 系统总体架构设计

图1是基于FPGA税控算法加密卡的系统架构图。其中包括FPGA芯片、8片税控密码算法芯片SSX12-B、FPGA配置芯片 EPCS4、存储器 EEPROM和电源芯片。

图1 基于FPGA的税控专用算法加密卡系统架构图

FPGA是整个加密卡的控制核心,在其内部利用嵌入式PCI-IP核实现与物理32位PCI总线的通信;设计算法状态机模块实现了FPGA与8片税控密码算法芯片的数据交互;另外,设计了DMA控制器和双端口RAM实现了数据的传输及存储。PCI总线的时钟信号33 MHz作为FPGA的主时钟。此外,33 MHz时钟也作为SSX12-B芯片的工作时钟,整个系统采用了时钟完全同步的设计方式。EPCS4芯片与FPGA相连,每次上电后FPGA需读取EPCS4内的程序进行加密卡的配置与初始化。EEPROM用于存储系统密钥等关键参数。

数据运算的过程如下:

(1)通过上位机软件设置好运算命令字和待运算的数据包,FPGA根据命令字可指定一片SSX12-B工作或多片SSX12-B同时工作。

(2)启动数据传输,将数据包通过PCI总线传入FPGA的双端口RAM。RAM由8个1 kB的RAM单元构成,每个RAM单元对应一个SSX12-B的数据缓冲区,RAM单元和SSX12-B的数据总线宽度均为8 bit,整个RAM的容量为8 kB,数据总线宽度为64 bit。

(3)待所有数据包传输到对应的RAM单元后,FPGA设置相关进程,启动算法状态机,将数据包并行传送给RAM单元对应的SSX12-B芯片。

(4)各SSX12-B芯片同时开始工作,此时FPGA等待运算的完成。

(5)各SSX12-B芯片运算完成后在算法状态机的控制下将数据包传回到对应的RAM单元。待所有数据包传完后状态机产生中断信号,之后FPGA通过PCI总线将数据包传回到上位机,至此完成了一次数据运算过程。

2 主要芯片选型

(1)FPGA芯片。选用美国Altera公司CycloneIII系列的EP3C16F484C8器件,该芯片总引脚数为484,其中I/O引脚为346,RAM总量为63 kB,逻辑单元(LE)15 408个[1],可满足加密卡的设计要求。FPGA的开发工具采用Altera公司的EDA软件Quartus II 9.1,其可实现综合、仿真、布局布线、系统调试等功能。

(2)税控密码算法芯片。采用国家密码管理局的税控密码算法芯片SSX12-B,该芯片专用于税控等信息安全领域,功能主要有数据加密、解密、生成票据防伪码等,有效保证了用户进行交易时数据的安全性。其主要特点为:每片算法芯片均有各自独立的ID,所有加密运算均在片内完成,运算速度快且安全性高[2]。

(3)FPGA配置芯片。采用Altera公司的EPCS4芯片,该芯片用以存储加密卡的配置程序。加密卡每次上电后,FPGA首先从EPCS4里加载程序。

(4)EEPROM。采用 Microchip公司的24LC512 I2C串行总线EEPROM,容量为64×8 kbit,8脚SOIC封装。100万次的擦写周期,数据保持时间>200年,最大5 ms的写入周期[3]。此芯片主要用于存储加密卡的密钥等关键数据。

3 数据传输模块

设计了FPGA的DMA控制器和双端口RAM作为数据传输模块。DMA传输对于高效能嵌入式系统算法和网络是关键,其允许不同速度的硬件装置进行沟通,而无需依赖 CPU的大量中断负载[4]。否则,CPU需要从来源将每一片段的资料复制到暂存器,再写回到新的地方,在这段时间中CPU无法参与其他工作。DMA传输的重要作用是将一个内存区从一个装置复制到另一个。当 CPU初始化DMA传输后,传输动作本身由DMA控制器执行。

如图2所示,DMA控制器包括Master Read逻辑、Master Write逻辑、DMA控制逻辑和 DMA寄存器。Master Read逻辑实现数据由上位机到加密卡的传输;Master Write逻辑实现数据由加密卡到上位机的传输;DMA控制逻辑实现传输的控制功能;DMA寄存器包括控制状态寄存器CSR、地址计数寄存器ACR、字节计数寄存器BCR、中断状态寄存器ISR和本地地址计数寄存器LAR[5]。在实现DMA传输时,由DMA控制器直接掌管总线。因此,存在一个总线控制权转移的问题。即 DMA传输前,CPU要将总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应立即将总线控制权再交回给CPU。一个完整的DMA传输过程包括 DMA请求、DMA响应、DMA传输和DMA结束4个步骤。

图2 DMA控制器逻辑结构

DMA控制器实现数据传输的具体步骤如下:

(1)上位机设置待传输的数据包,并依次设置CSR、LAR、BCR和ACR寄存器,并对DMA控制器初始化。

(2)上位机启动DMA读(Master Read)的过程,将数据包一次性传入税控加密卡的双端口RAM。

(3)DMA控制器启动算法状态机模块,控制密码算法芯片SSX12-B同时工作。

(4)密码算法芯片SSX12-B结束工作后,将运算完成的数据传回到相应的双端口RAM存储单元。

(5)DMA控制器设置ISR和CSR寄存器,启动DMA写(Master Write)的过程,将运算完成的数据包传回到上位机。

双端口RAM的作用是缓存数据,其提供2组独立的数据读写端口。因此,上位机和FPGA可对RAM进行独立的访问,使设计更加灵活。

4 密码算法状态机模块

状态机是数字时序逻辑中重要的设计内容,通过状态转移图设计手段可将复杂的控制时序图形化表示,分解为状态之间的转换关系,将问题简化[6]。算法状态机模块实现对SSX12-B芯片的时序控制。状态机的状态转移图如图3所示,由上位机软件通过设置CSR寄存器相应位的值启动对应的密码芯片工作,FPGA根据CSR寄存器可启动多片SSX12-B同时并行工作。单个芯片的状态转移图如图4所示,由空闲状态、启动状态、写命令状态、写数据状态、等待状态、读数据状态及结束状态组成。对各状态的编码采用格雷码的方式,可有效地防止毛刺的产生,使系统稳定[7-8]。

图3 状态机转移图

图4 单个芯片的状态转移图

算法状态机的设计是通过FPGA的硬件描述语言VHDL完成的,单个芯片的状态机具体工作过程如下:

(1)算法开始信号sf_start=‘0’时状态机始终处于空闲状态。(2)上位机设置CSR寄存器相应的位后,FPGA使sf_start=‘1’,状态机进入启动状态。(3)当状态机检测到芯片处于不忙的状态时,即SSX12-B芯片的Busy_nRdy引脚为低电平,状态机进入写命令状态。(4)在写命令状态,FPGA将相应的命令字写入SSX12-B芯片,Busy_nRdy=‘0’时进入写数据状态。(5)在写数据状态,FPGA将待运算的数据包依次写入SSX12-B芯片。(6)状态机进入等待状态,等待SSX12-B芯片的运算完成。(7)当检测到Busy_nRdy引脚为低电平时,状态机进入读数据状态,并将运算完成的数据传回到对应的RAM单元。(8)待本次运算的数据读取完毕,状态机进入结束状态,至此完成了一次数据运算过程。(9)之后状态机返回空闲状态,等待下一次数据运算请求的到来。

5 系统工作过程

税控加密卡的一次业务通常包括多次运算过程的组合。例如生成一次票据防伪码的业务包括自检、生成非对称密钥对、读入签名密钥密文、读入账户密钥密文等运算过程。图5是税控加密卡的业务流程图,具体工作过程如下:

图5 税控加密卡的工作流程图

(1)税控加密卡上电、复位及初始化结束后,上位机对DMA控制器初始化,其中包括设置待传送的数据包,设置DMA相关的寄存器,提供要传送数据的起始位置和数据长度。

(2)DMA控制器对DMA请求判别优先级及屏蔽,向总线裁决逻辑提出总线请求。当上位机CPU执行完当前总线周期即可释放总线控制权。此时,总线裁决逻辑输出总线应答,表示DMA已响应,通过DMA控制器通知加密卡开始DMA传输。

(3)DMA控制器获得总线控制权后,上位机CPU即刻挂起或只执行内部操作,由DMA控制器输出读命令,直接控制内存区与加密卡的双端口RAM进行DMA读操作(Master Read)。此时,数据包通过PCI总线依次传入到双端口RAM的相应地址单元。

(4)Master Read完成后,DMA控制器向算法控制模块产生中断。算法控制模块收到中断后将其清除,之后启动算法状态机进程。状态机进程读取双端口RAM中的数据,再将数据传送到外部的算法芯片SSX12-B。

(5)SSX12-B芯片开始并行工作,此时FPGA等待运算完成。

(6)SSX12-B芯片将运算完成后的数据包传回到相应的RAM地址单元,之后算法控制模块产生结束信号,DMA控制器收到此信号后设置相应的进程,并启动DMA写操作(Master Write),将数据包通过PCI总线传回到上位机。

(7)当完成DMA写操作后,DMA控制器释放总线控制权,上位机CPU重新取得总线的控制权并执行一段检查本次DMA传输操作正确性的代码,至此完成一次运算。

(8)根据上位机的命令依次处理多次运算,如生成非对称密钥对、读入签名密钥密文、读入账户密钥密文等,直至完成生成票据防伪码或数据加解密的业务。

6 实验结果分析

整个设计在Quartus II 9.1软件中先后完成综合、功能仿真、布局布线后,通过逻辑分析仪SignalTap并结合上位机软件进行了调试。除去SignalTap,FPGA的最终编译结果是:占用存储单元15.75 kB,逻辑单元4 950个。加入SignalTap编译后占用FPGA的存储单元为37.8 kB,占用率为60%,由于资源富余较大,所以加入SignalTap调试对系统的数据结果不会造成影响。FPGA各模块的时钟信号同步于33 MHz时钟,采用了完全同步的方式进行设计,从理论上通过优化FPGA的电路结构可满足信号的建立、保持时间要求。最终利用Quartus II的时序分析工具TimeQuest对系统的时序进行了分析,测得最高时钟频率>46.01 MHz,所有信号的建立、保持时间无违规路径。

图6是在SignalTap中调试通过的波形图,图中显示了单芯片生成票据防伪码及将数据写到双端口RAM的过程。Busy_nRdy信号是SSX12-B芯片的状态引脚,高电平表示芯片正在运算中,低电平表示输出数据有效;FPGA_i_nD[0]信号是SSX12-B的指令/数据引脚,高电平表示数据总线上是命令,低电平表示数据总线上是数据;FPGA_nLE[0]是SSX12-B的数据总线状态引脚,低电平表示总线上的数据有效,高电平表示总线为三态;Data_in信号是SSX12-B输出的数据:73h是应答字,09h是返回的有效数据长度,00h表示无错误,44h,E7h,33h,FEh……是生成的 8 Byte防伪码;ram_wr是双端口RAM的写信号,WR_addr是双端口RAM的写地址线,ram_in0是RAM的数据输入端口,dma_write_len表示写入的数据长度,图中显示了SSX12-B在输出票据防伪码数据的同时状态机将数据写入到了双端口RAM,WR_addr地址依次递增,state_port是状态机的状态变化信号。

图6 加密卡调试数据波形图

表1是在不带有SignalTap的加密卡上测得的8片SSX12-B芯片生成的防伪码数据,其与带有SignalTap的加密卡测得的数据相一致,且生成的防伪码经核验服务器核验后均是正确的防伪码数据。

表1 防伪码测试数据

加密卡的驱动程序基于Linux 2.6内核开发,API接口程序和上位机软件是在RedHat Linux AS4.6环境下开发完成的的。最后对加密卡生成票据防伪码的性能进行了测试,在程序中设置8片密码算法芯片SSX12-B同时并行工作,通过10 000次循环测试,测得生成票据防伪码的速度为827次/s。通过压力测试加密卡工作稳定,且生成数据正确。

7 结束语

设计了一种基于FPGA的税控算法加密卡,介绍了各模块的设计,通过FPGA实现了对税控密码算法芯片的高效控制。该加密卡具有加密速度快、效率高、功耗小的优点,通过PCI总线内置于税控加密机中,可保证发票数据的正确加解密及生成发票数据防伪码,满足了税务部门对发票管理的要求。

[1] Altera Corporation.Cyclone III device handbook[M].USA:Altera Corporation,2010.

[2] 北京兆日科技有限公司.SSX12-B算法芯片手册[M].北京:北京兆日科技有限公司,2012.

[3] Microchip Technology Inc.24LC512 512 kB I2CTMCMOS serial EEPROM[M].USA:Microchip Technology Inc,2004.

[4] Altera Corporation.PCI_mt32 megacore function reference design[M].USA:Altera Corporation,2009.

[5] Altera Corporation.PCI compiler user guide[M].USA:Altera Corporation,2009.

[6] 吴继华,王诚.Altera FPGA/CPLD 设计:高级篇[M].北京:人民邮电出版社,2005.

[7] 夏宇闻.Verilog数字系统设计教程[M].2版.北京:北京航空航天大学出版社,2008.

[8] 傅喆,栗青霞,王换换.一种改进的双向认证的动态密码[J].电子科技,2014,27(1):150 -152.

猜你喜欢

状态机数据包总线
二维隐蔽时间信道构建的研究*
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
基于有限状态机的交会对接飞行任务规划方法
机载飞控1553B总线转以太网总线设计
SmartSniff
一种基于CAN总线的误码测试方法
CAN总线并发通信时下位机应用软件设计
双口RAM读写正确性自动测试的有限状态机控制器设计方法
宝马F02车总线系统
基于反熔丝FPGA的有限状态机加固设计