基于FPGA的稅控算法加密卡設計與實(shí)現
由于當前國稅、地稅、各省、各稅種發(fā)票不同,辨別難度較大,因此給造假者可乘之機。本文設計的基于FPGA的稅控算法加密卡可有效地解決上述問(wèn)題,提供了高效的防偽措施。該加密卡通過(guò)PCI總線(xiàn)內置于稅控加密機中,將發(fā)票上的數據加密成一組防偽碼,打印在相應的區域上,由于采用國家密碼管理局的高安全性稅控密碼算法芯片,因此發(fā)票難以被篡改,從而可滿(mǎn)足稅務(wù)機關(guān)對發(fā)票管理和身份認證的要求。
本文引用地址:http://dyxdggzs.com/article/201610/308359.htm1 系統總體架構設計
圖1是基于FPGA稅控算法加密卡的系統架構圖。其中包括FPGA芯片、8片稅控密碼算法芯片SSX12-B、FPGA配置芯片EPCS4、存儲器EEPROM和電源芯片。

FPGA是整個(gè)加密卡的控制核心,在其內部利用嵌入式PCI—IP核實(shí)現與物理32位PCI總線(xiàn)的通信;設計算法狀態(tài)機模塊實(shí)現了FPGA與8片稅控密碼算法芯片的數據交互;另外,設計了DMA控制器和雙端口RAM實(shí)現了數據的傳輸及存儲。PCI總線(xiàn)的時(shí)鐘信號33 MHz作為FPGA的主時(shí)鐘。此外,33 MHz時(shí)鐘也作為SSX12-B芯片的工作時(shí)鐘,整個(gè)系統采用了時(shí)鐘完全同步的設計方式。EPCS4芯片與FPGA相連,每次上電后FPGA需讀取EPCS4內的程序進(jìn)行加密卡的配置與初始化。EEPROM用于存儲系統密鑰等關(guān)鍵參數。
數據運算的過(guò)程如下:
(1)通過(guò)上位機軟件設置好運算命令字和待運算的數據包,FPGA根據命令字可指定一片SSX12-B工作或多片SSX12-B同時(shí)工作。
(2)啟動(dòng)數據傳輸,將數據包通過(guò)PCI總線(xiàn)傳入FPGA的雙端口RAM。RAM由8個(gè)1 kB的RAM單元構成,每個(gè)RAM單元對應一個(gè)SSX12-B的數據緩沖區,RAM單元和SSX12-B的數據總線(xiàn)寬度均為8 bit,整個(gè)RAM的容量為8 kB,數據總線(xiàn)寬度為64 bit。
(3)待所有數據包傳輸到對應的RAM單元后,FPGA設置相關(guān)進(jìn)程,啟動(dòng)算法狀態(tài)機,將數據包并行傳送給RAM單元對應的SSX12-B芯片。
(4)各SSX12-B芯片同時(shí)開(kāi)始工作,此時(shí)FPGA等待運算的完成。
(5)各SSX12-B芯片運算完成后在算法狀態(tài)機的控制下將數據包傳回到對應的RAM單元。待所有數據包傳完后狀態(tài)機產(chǎn)生中斷信號,之后FPGA通過(guò)PCI總線(xiàn)將數據包傳回到上位機,至此完成了一次數據運算過(guò)程。
2 主要芯片選型
(1)FPGA芯片。選用美國Altera公司CycloneⅢ系列的EP3C16F484C8器件,該芯片總引腳數為484,其中I/O引腳為346,RAM總量為63 kB,邏輯單元(LE)15 408個(gè),可滿(mǎn)足加密卡的設計要求。FPGA的開(kāi)發(fā)工具采用Altera公司的EDA軟件Quartus II9.1,其可實(shí)現綜合、仿真、布局布線(xiàn)、系統調試等功能。
(2)稅控密碼算法芯片。采用國家密碼管理局的稅控密碼算法芯片SSX12-B,該芯片專(zhuān)用于稅控等信息安全領(lǐng)域,功能主要有數據加密、解密、生成票據防偽碼等,有效保證了用戶(hù)進(jìn)行交易時(shí)數據的安全性。
其主要特點(diǎn)為:每片算法芯片均有各自獨立的ID,所有加密運算均在片內完成,運算速度快且安全性高。
(3)FPGA配置芯片。采用Altera公司的EPCS4芯片,該芯片用以存儲加密卡的配置程序。加密卡每次上電后,FPGA首先從EPCS4里加載程序。
(4)EEPROM。采用Microchip公司的24LC512I2C串行總線(xiàn)EEPROM,容量為64×8 kbit,8腳SOIC封裝。100萬(wàn)次的擦寫(xiě)周期,數據保持時(shí)間>200年,最大5 ms的寫(xiě)入周期。此芯片主要用于存儲加密卡的密鑰等關(guān)鍵數據。
3 數據傳輸模塊
設計了FPGA的DMA控制器和雙端口RAM作為數據傳輸模塊。DMA傳輸對于高效能嵌入式系統算法和網(wǎng)絡(luò )是關(guān)鍵,其允許不同速度的硬件裝置進(jìn)行溝通,而無(wú)需依賴(lài)CPU的大量中斷負載。否則,CPU需要從來(lái)源將每一片段的資料復制到暫存器,再寫(xiě)回到新的地方,在這段時(shí)間中CPU無(wú)法參與其他工作。DMA傳輸的重要作用是將一個(gè)內存區從一個(gè)裝置復制到另一個(gè)。當CPU初始化DMA傳輸后,傳輸動(dòng)作本身由DMA控制器執行。

如圖2所示,DMA控制器包括Master Read邏輯、Master Write邏輯、DMA控制邏輯和DMA寄存器。Master Read邏輯實(shí)現數據由上位機到加密卡的傳輸;Master Write邏輯實(shí)現數據由加密卡到上位機的傳輸;DMA控制邏輯實(shí)現傳輸的控制功能;DMA寄存器包括控制狀態(tài)寄存器CSR、地址計數寄存器ACR、字節計數寄存器BCR、中斷狀態(tài)寄存器ISR和本地地址計數寄存器LAR。在實(shí)現DMA傳輸時(shí),由DMA控制器直接掌管總線(xiàn)。因此,存在一個(gè)總線(xiàn)控制權轉移的問(wèn)題。即DMA傳輸前,CPU要將總線(xiàn)控制權交給DMA控制器,而在結束DMA傳輸后,DMA控制器應立即將總線(xiàn)控制權再交回給CPU。一個(gè)完整的DMA傳輸過(guò)程包括DMA請求、DMA響應、DMA傳輸和DMA結束4個(gè)步驟。
DMA控制器實(shí)現數據傳輸的具體步驟如下:
(1)上位機設置待傳輸的數據包,并依次設置CSR、LAR、BCR和ACR寄存器,并對DMA控制器初始化。
(2)上位機啟動(dòng)DMA讀(Master Read)的過(guò)程,將數據包一次性傳入稅控加密卡的雙端口RAM。
(3)DMA控制器啟動(dòng)算法狀態(tài)機模塊,控制密碼算法芯片SSX12-B同時(shí)工作。
(4)密碼算法芯片SSX12-B結束工作后,將運算完成的數據傳回到相應的雙端口RAM存儲單元。
(5)DMA控制器設置ISR和CSR寄存器,啟動(dòng)DMA寫(xiě)(Master Write)的過(guò)程,將運算完成的數據包傳回到上位機。
雙端口RAM的作用是緩存數據,其提供2組獨立的數據讀寫(xiě)端口。因此,上位機和FPGA可對RAM進(jìn)行獨立的訪(fǎng)問(wèn),使設計更加靈活。
4 密碼算法狀態(tài)機模塊
狀態(tài)機是數字時(shí)序邏輯中重要的設計內容,通過(guò)狀態(tài)轉移圖設計手段可將復雜的控制時(shí)序圖形化表示,分解為狀態(tài)之間的轉換關(guān)系,將問(wèn)題簡(jiǎn)化。算法狀態(tài)機模塊實(shí)現對SSX12-B芯片的時(shí)序控制。狀態(tài)機的狀態(tài)轉移圖如圖3所示,由上位機軟件通過(guò)設置CSR寄存器相應位的值啟動(dòng)對應的密碼芯片工作,FPGA根據CSR寄存器可啟動(dòng)多片SSX12-B同時(shí)并行工作。單個(gè)芯片的狀態(tài)轉移圖如圖4所示,由空閑狀態(tài)、啟動(dòng)狀態(tài)、寫(xiě)命令狀態(tài)、寫(xiě)數據狀態(tài)、等待狀態(tài)、讀數據狀態(tài)及結束狀態(tài)組成。對各狀態(tài)的編碼采用格雷碼的方式,可有效地防止毛刺的產(chǎn)生,使系統穩定。

算法狀態(tài)機的設計是通過(guò)FPGA的硬件描述語(yǔ)言VHDL完成的,單個(gè)芯片的狀態(tài)機具體工作過(guò)程如下:
(1)算法開(kāi)始信號sf_start=‘0’時(shí)狀態(tài)機始終處于空閑狀態(tài)。(2)上位機設置CSR寄存器相應的位后,FPGA使sf_start=‘1’,狀態(tài)機進(jìn)入啟動(dòng)狀態(tài)。(3)當狀態(tài)機檢測到芯片處于不忙的狀態(tài)時(shí),即SSX12-B芯片的Busy_nRdy引腳為低電平,狀態(tài)機進(jìn)入寫(xiě)命令狀態(tài)。(4)在寫(xiě)命令狀態(tài),FPGA將相應的命令字寫(xiě)入SSX12-B芯片,Busy_nRdy=‘0’時(shí)進(jìn)入寫(xiě)數據狀態(tài)。(5)在寫(xiě)數據狀態(tài),FPGA將待運算的數據包依次寫(xiě)入SSX12-B芯片。(6)狀態(tài)機進(jìn)入等待狀態(tài),等待SSX12-B芯片的運算完成。(7)當檢測到Busy_nRdy引腳為低電平時(shí),狀態(tài)機進(jìn)入讀數據狀態(tài),并將運算完成的數據傳回到對應的RAM單元。(8)待本次運算的數據讀取完畢,狀態(tài)機進(jìn)入結束狀態(tài),至此完成了一次數據運算過(guò)程。(9)之后狀態(tài)機返回空閑狀態(tài),等待下一次數據運算請求的到來(lái)。
5 系統工作過(guò)程
稅控加密卡的一次業(yè)務(wù)通常包括多次運算過(guò)程的組合。例如生成一次票據防偽碼的業(yè)務(wù)包括自檢、生成非對稱(chēng)密鑰對、讀入簽名密鑰密文、讀入賬戶(hù)密鑰密文等運算過(guò)程。圖5是稅控加密卡的業(yè)務(wù)流程圖,具體工作過(guò)程如下:

(1)稅控加密卡上電、復位及初始化結束后,上位機對DMA控制器初始化,其中包括設置待傳送的數據包,設置DMA相關(guān)的寄存器,提供要傳送數據的起始位置和數據長(cháng)度。
(2)DMA控制器對DMA請求判別優(yōu)先級及屏蔽,向總線(xiàn)裁決邏輯提出總線(xiàn)請求。當上位機CPU執行完當前總線(xiàn)周期即可釋放總線(xiàn)控制權。此時(shí),總線(xiàn)裁決邏輯輸出總線(xiàn)應答,表示DMA已響應,通過(guò)DMA控制器通知加密卡開(kāi)始DMA傳輸。
(3)DMA控制器獲得總線(xiàn)控制權后,上位機CPU即刻掛起或只執行內部操作,由DMA控制器輸出讀命令,直接控制內存區與加密卡的雙端口RAM進(jìn)行DMA讀操作(Master Read)。此時(shí),數據包通過(guò)PCI總線(xiàn)依次傳入到雙端口RAM的相應地址單元。
(4)Master Read完成后,DMA控制器向算法控制模塊產(chǎn)生中斷。算法控制模塊收到中斷后將其清除,之后啟動(dòng)算法狀態(tài)機進(jìn)程。狀態(tài)機進(jìn)程讀取雙端口RAM中的數據,再將數據傳送到外部的算法芯片SSX12-B。
(5)SSX12-B芯片開(kāi)始并行工作,此時(shí)FPGA等待運算完成。
(6)SSX12-B芯片將運算完成后的數據包傳回到相應的RAM地址單元,之后算法控制模塊產(chǎn)生結束信號,DMA控制器收到此信號后設置相應的進(jìn)程,并啟動(dòng)DMA寫(xiě)操作(Master Wr ite),將數據包通過(guò)PCI總線(xiàn)傳回到上位機。
(7)當完成DMA寫(xiě)操作后,DMA控制器釋放總線(xiàn)控制權,上位機CPU重新取得總線(xiàn)的控制權并執行一段檢查本次DMA傳輸操作正確性的代碼,至此完成一次運算。
(8)根據上位機的命令依次處理多次運算,如生成非對稱(chēng)密鑰對、讀入簽名密鑰密文、讀入賬戶(hù)密鑰密文等,直至完成生成票據防偽碼或數據加解密的業(yè)務(wù)。
6 實(shí)驗結果分析
整個(gè)設計在Quartus II 9.1軟件中先后完成綜合、功能仿真、布局布線(xiàn)后,通過(guò)邏輯分析儀SignalTap并結合上位機軟件進(jìn)行了調試。除去SignalTap,FPGA的最終編譯結果是:占用存儲單元15.75 kB,邏輯單元4 950個(gè)。加入SignalTap編譯后占用FPGA的存儲單元為37.8 kB,占用率為60%,由于資源富余較大,所以加入SignalTap調試對系統的數據結果不會(huì )造成影響。FPGA各模塊的時(shí)鐘信號同步于33 MHz時(shí)鐘,采用了完全同步的方式進(jìn)行設計,從理論上通過(guò)優(yōu)化FPGA的電路結構可滿(mǎn)足信號的建立、保持時(shí)間要求。
最終利用Quanus II的時(shí)序分析工具TimeQuest對系統的時(shí)序進(jìn)行了分析,測得最高時(shí)鐘頻率>46.01 MHz,所有信號的建立、保持時(shí)間無(wú)違規路徑。

圖6是在SignalTap中調試通過(guò)的波形圖,圖中顯示了單芯片生成票據防偽碼及將數據寫(xiě)到雙端口RAM的過(guò)程。Busy_nRdy信號是SSX12-B芯片的狀態(tài)引腳,高電平表示芯片正在運算中,低電平表示輸出數據有效;FPGA_i_nD[0]信號是SSX12-B的指令/數據引腳,高電平表示數據總線(xiàn)上是命令,低電平表示數據總線(xiàn)上是數據;FPGA_nLE[0]是SSX12-B的數據總線(xiàn)狀態(tài)引腳,低電平表示總線(xiàn)上的數據有效,高電平表示總線(xiàn)為三態(tài);Data_in信號是SSX12-B輸出的數據:73h是應答字,09h是返回的有效數據長(cháng)度,00h表示無(wú)錯誤,44 h,E7h,33h,FEh……是生成的8 Byte防偽碼;ram_wr是雙端口RAM的寫(xiě)信號,WR_addr是雙端口RAM的寫(xiě)地址線(xiàn),ram_in0是RAM的數據輸入端口,dma_write_len表示寫(xiě)入的數據長(cháng)度,圖中顯示了SSX12-B在輸出票據防偽碼數據的同時(shí)狀態(tài)機將數據寫(xiě)入到了雙端口RAM,WR_addr地址依次遞增,state_port是狀態(tài)機的狀態(tài)變化信號。

表1是在不帶有SignalTap的加密卡上測得的8片SSX12-B芯片生成的防偽碼數據,其與帶有SignalTap的加密卡測得的數據相一致,且生成的防偽碼經(jīng)核驗服務(wù)器核驗后均是正確的防偽碼數據。
加密卡的驅動(dòng)程序基于Linux2.6內核開(kāi)發(fā),API接口程序和上位機軟件是在RedHat Linux AS4.6環(huán)境下開(kāi)發(fā)完成的的。最后對加密卡生成票據防偽碼的性能進(jìn)行了測試,在程序中設置8片密碼算法芯片SSX12-B同時(shí)并行工作,通過(guò)10 000次循環(huán)測試,測得生成票據防偽碼的速度為827次/s。通過(guò)壓力測試加密卡工作穩定,且生成數據正確。
7 結束語(yǔ)
設計了一種基于FPGA的稅控算法加密卡,介紹了各模塊的設計,通過(guò)FPGA實(shí)現了對稅控密碼算法芯片的高效控制。該加密卡具有加密速度快、效率高、功耗小的優(yōu)點(diǎn),通過(guò)PCI總線(xiàn)內置于稅控加密機中,可保證發(fā)票數據的正確加解密及生成發(fā)票數據防偽碼,滿(mǎn)足了稅務(wù)部門(mén)對發(fā)票管理的要求。
評論