基于FPGA的稅控算法加密卡設計與實現
由于當前國稅、地稅、各省、各稅種發(fā)票不同,辨別難度較大,因此給造假者可乘之機。本文設計的基于FPGA的稅控算法加密卡可有效地解決上述問題,提供了高效的防偽措施。該加密卡通過PCI總線內置于稅控加密機中,將發(fā)票上的數據加密成一組防偽碼,打印在相應的區(qū)域上,由于采用國家密碼管理局的高安全性稅控密碼算法芯片,因此發(fā)票難以被篡改,從而可滿足稅務機關對發(fā)票管理和身份認證的要求。
本文引用地址:http://www.ex-cimer.com/article/201610/308359.htm1 系統(tǒng)總體架構設計
圖1是基于FPGA稅控算法加密卡的系統(tǒng)架構圖。其中包括FPGA芯片、8片稅控密碼算法芯片SSX12-B、FPGA配置芯片EPCS4、存儲器EEPROM和電源芯片。
FPGA是整個加密卡的控制核心,在其內部利用嵌入式PCI—IP核實現與物理32位PCI總線的通信;設計算法狀態(tài)機模塊實現了FPGA與8片稅控密碼算法芯片的數據交互;另外,設計了DMA控制器和雙端口RAM實現了數據的傳輸及存儲。PCI總線的時鐘信號33 MHz作為FPGA的主時鐘。此外,33 MHz時鐘也作為SSX12-B芯片的工作時鐘,整個系統(tǒng)采用了時鐘完全同步的設計方式。EPCS4芯片與FPGA相連,每次上電后FPGA需讀取EPCS4內的程序進行加密卡的配置與初始化。EEPROM用于存儲系統(tǒng)密鑰等關鍵參數。
數據運算的過程如下:
(1)通過上位機軟件設置好運算命令字和待運算的數據包,FPGA根據命令字可指定一片SSX12-B工作或多片SSX12-B同時工作。
(2)啟動數據傳輸,將數據包通過PCI總線傳入FPGA的雙端口RAM。RAM由8個1 kB的RAM單元構成,每個RAM單元對應一個SSX12-B的數據緩沖區(qū),RAM單元和SSX12-B的數據總線寬度均為8 bit,整個RAM的容量為8 kB,數據總線寬度為64 bit。
(3)待所有數據包傳輸到對應的RAM單元后,FPGA設置相關進程,啟動算法狀態(tài)機,將數據包并行傳送給RAM單元對應的SSX12-B芯片。
(4)各SSX12-B芯片同時開始工作,此時FPGA等待運算的完成。
(5)各SSX12-B芯片運算完成后在算法狀態(tài)機的控制下將數據包傳回到對應的RAM單元。待所有數據包傳完后狀態(tài)機產生中斷信號,之后FPGA通過PCI總線將數據包傳回到上位機,至此完成了一次數據運算過程。
2 主要芯片選型
(1)FPGA芯片。選用美國Altera公司CycloneⅢ系列的EP3C16F484C8器件,該芯片總引腳數為484,其中I/O引腳為346,RAM總量為63 kB,邏輯單元(LE)15 408個,可滿足加密卡的設計要求。FPGA的開發(fā)工具采用Altera公司的EDA軟件Quartus II9.1,其可實現綜合、仿真、布局布線、系統(tǒng)調試等功能。
(2)稅控密碼算法芯片。采用國家密碼管理局的稅控密碼算法芯片SSX12-B,該芯片專用于稅控等信息安全領域,功能主要有數據加密、解密、生成票據防偽碼等,有效保證了用戶進行交易時數據的安全性。
其主要特點為:每片算法芯片均有各自獨立的ID,所有加密運算均在片內完成,運算速度快且安全性高。
(3)FPGA配置芯片。采用Altera公司的EPCS4芯片,該芯片用以存儲加密卡的配置程序。加密卡每次上電后,FPGA首先從EPCS4里加載程序。
(4)EEPROM。采用Microchip公司的24LC512I2C串行總線EEPROM,容量為64×8 kbit,8腳SOIC封裝。100萬次的擦寫周期,數據保持時間>200年,最大5 ms的寫入周期。此芯片主要用于存儲加密卡的密鑰等關鍵數據。
3 數據傳輸模塊
設計了FPGA的DMA控制器和雙端口RAM作為數據傳輸模塊。DMA傳輸對于高效能嵌入式系統(tǒng)算法和網絡是關鍵,其允許不同速度的硬件裝置進行溝通,而無需依賴CPU的大量中斷負載。否則,CPU需要從來源將每一片段的資料復制到暫存器,再寫回到新的地方,在這段時間中CPU無法參與其他工作。DMA傳輸的重要作用是將一個內存區(qū)從一個裝置復制到另一個。當CPU初始化DMA傳輸后,傳輸動作本身由DMA控制器執(zhí)行。
如圖2所示,DMA控制器包括Master Read邏輯、Master Write邏輯、DMA控制邏輯和DMA寄存器。Master Read邏輯實現數據由上位機到加密卡的傳輸;Master Write邏輯實現數據由加密卡到上位機的傳輸;DMA控制邏輯實現傳輸的控制功能;DMA寄存器包括控制狀態(tài)寄存器CSR、地址計數寄存器ACR、字節(jié)計數寄存器BCR、中斷狀態(tài)寄存器ISR和本地地址計數寄存器LAR。在實現DMA傳輸時,由DMA控制器直接掌管總線。因此,存在一個總線控制權轉移的問題。即DMA傳輸前,CPU要將總線控制權交給DMA控制器,而在結束DMA傳輸后,DMA控制器應立即將總線控制權再交回給CPU。一個完整的DMA傳輸過程包括DMA請求、DMA響應、DMA傳輸和DMA結束4個步驟。
DMA控制器實現數據傳輸的具體步驟如下:
(1)上位機設置待傳輸的數據包,并依次設置CSR、LAR、BCR和ACR寄存器,并對DMA控制器初始化。
(2)上位機啟動DMA讀(Master Read)的過程,將數據包一次性傳入稅控加密卡的雙端口RAM。
(3)DMA控制器啟動算法狀態(tài)機模塊,控制密碼算法芯片SSX12-B同時工作。
(4)密碼算法芯片SSX12-B結束工作后,將運算完成的數據傳回到相應的雙端口RAM存儲單元。
(5)DMA控制器設置ISR和CSR寄存器,啟動DMA寫(Master Write)的過程,將運算完成的數據包傳回到上位機。
雙端口RAM的作用是緩存數據,其提供2組獨立的數據讀寫端口。因此,上位機和FPGA可對RAM進行獨立的訪問,使設計更加靈活。
4 密碼算法狀態(tài)機模塊
狀態(tài)機是數字時序邏輯中重要的設計內容,通過狀態(tài)轉移圖設計手段可將復雜的控制時序圖形化表示,分解為狀態(tài)之間的轉換關系,將問題簡化。算法狀態(tài)機模塊實現對SSX12-B芯片的時序控制。狀態(tài)機的狀態(tài)轉移圖如圖3所示,由上位機軟件通過設置CSR寄存器相應位的值啟動對應的密碼芯片工作,FPGA根據CSR寄存器可啟動多片SSX12-B同時并行工作。單個芯片的狀態(tài)轉移圖如圖4所示,由空閑狀態(tài)、啟動狀態(tài)、寫命令狀態(tài)、寫數據狀態(tài)、等待狀態(tài)、讀數據狀態(tài)及結束狀態(tài)組成。對各狀態(tài)的編碼采用格雷碼的方式,可有效地防止毛刺的產生,使系統(tǒng)穩(wěn)定。
算法狀態(tài)機的設計是通過FPGA的硬件描述語言VHDL完成的,單個芯片的狀態(tài)機具體工作過程如下:
(1)算法開始信號sf_start=‘0’時狀態(tài)機始終處于空閑狀態(tài)。(2)上位機設置CSR寄存器相應的位后,FPGA使sf_start=‘1’,狀態(tài)機進入啟動狀態(tài)。(3)當狀態(tài)機檢測到芯片處于不忙的狀態(tài)時,即SSX12-B芯片的Busy_nRdy引腳為低電平,狀態(tài)機進入寫命令狀態(tài)。(4)在寫命令狀態(tài),FPGA將相應的命令字寫入SSX12-B芯片,Busy_nRdy=‘0’時進入寫數據狀態(tài)。(5)在寫數據狀態(tài),FPGA將待運算的數據包依次寫入SSX12-B芯片。(6)狀態(tài)機進入等待狀態(tài),等待SSX12-B芯片的運算完成。(7)當檢測到Busy_nRdy引腳為低電平時,狀態(tài)機進入讀數據狀態(tài),并將運算完成的數據傳回到對應的RAM單元。(8)待本次運算的數據讀取完畢,狀態(tài)機進入結束狀態(tài),至此完成了一次數據運算過程。(9)之后狀態(tài)機返回空閑狀態(tài),等待下一次數據運算請求的到來。
5 系統(tǒng)工作過程
稅控加密卡的一次業(yè)務通常包括多次運算過程的組合。例如生成一次票據防偽碼的業(yè)務包括自檢、生成非對稱密鑰對、讀入簽名密鑰密文、讀入賬戶密鑰密文等運算過程。圖5是稅控加密卡的業(yè)務流程圖,具體工作過程如下:
(1)稅控加密卡上電、復位及初始化結束后,上位機對DMA控制器初始化,其中包括設置待傳送的數據包,設置DMA相關的寄存器,提供要傳送數據的起始位置和數據長度。
(2)DMA控制器對DMA請求判別優(yōu)先級及屏蔽,向總線裁決邏輯提出總線請求。當上位機CPU執(zhí)行完當前總線周期即可釋放總線控制權。此時,總線裁決邏輯輸出總線應答,表示DMA已響應,通過DMA控制器通知加密卡開始DMA傳輸。
(3)DMA控制器獲得總線控制權后,上位機CPU即刻掛起或只執(zhí)行內部操作,由DMA控制器輸出讀命令,直接控制內存區(qū)與加密卡的雙端口RAM進行DMA讀操作(Master Read)。此時,數據包通過PCI總線依次傳入到雙端口RAM的相應地址單元。
(4)Master Read完成后,DMA控制器向算法控制模塊產生中斷。算法控制模塊收到中斷后將其清除,之后啟動算法狀態(tài)機進程。狀態(tài)機進程讀取雙端口RAM中的數據,再將數據傳送到外部的算法芯片SSX12-B。
(5)SSX12-B芯片開始并行工作,此時FPGA等待運算完成。
(6)SSX12-B芯片將運算完成后的數據包傳回到相應的RAM地址單元,之后算法控制模塊產生結束信號,DMA控制器收到此信號后設置相應的進程,并啟動DMA寫操作(Master Wr ite),將數據包通過PCI總線傳回到上位機。
(7)當完成DMA寫操作后,DMA控制器釋放總線控制權,上位機CPU重新取得總線的控制權并執(zhí)行一段檢查本次DMA傳輸操作正確性的代碼,至此完成一次運算。
(8)根據上位機的命令依次處理多次運算,如生成非對稱密鑰對、讀入簽名密鑰密文、讀入賬戶密鑰密文等,直至完成生成票據防偽碼或數據加解密的業(yè)務。
6 實驗結果分析
整個設計在Quartus II 9.1軟件中先后完成綜合、功能仿真、布局布線后,通過邏輯分析儀SignalTap并結合上位機軟件進行了調試。除去SignalTap,FPGA的最終編譯結果是:占用存儲單元15.75 kB,邏輯單元4 950個。加入SignalTap編譯后占用FPGA的存儲單元為37.8 kB,占用率為60%,由于資源富余較大,所以加入SignalTap調試對系統(tǒng)的數據結果不會造成影響。FPGA各模塊的時鐘信號同步于33 MHz時鐘,采用了完全同步的方式進行設計,從理論上通過優(yōu)化FPGA的電路結構可滿足信號的建立、保持時間要求。
最終利用Quanus II的時序分析工具TimeQuest對系統(tǒng)的時序進行了分析,測得最高時鐘頻率>46.01 MHz,所有信號的建立、保持時間無違規(guī)路徑。
圖6是在SignalTap中調試通過的波形圖,圖中顯示了單芯片生成票據防偽碼及將數據寫到雙端口RAM的過程。Busy_nRdy信號是SSX12-B芯片的狀態(tài)引腳,高電平表示芯片正在運算中,低電平表示輸出數據有效;FPGA_i_nD[0]信號是SSX12-B的指令/數據引腳,高電平表示數據總線上是命令,低電平表示數據總線上是數據;FPGA_nLE[0]是SSX12-B的數據總線狀態(tài)引腳,低電平表示總線上的數據有效,高電平表示總線為三態(tài);Data_in信號是SSX12-B輸出的數據:73h是應答字,09h是返回的有效數據長度,00h表示無錯誤,44 h,E7h,33h,FEh……是生成的8 Byte防偽碼;ram_wr是雙端口RAM的寫信號,WR_addr是雙端口RAM的寫地址線,ram_in0是RAM的數據輸入端口,dma_write_len表示寫入的數據長度,圖中顯示了SSX12-B在輸出票據防偽碼數據的同時狀態(tài)機將數據寫入到了雙端口RAM,WR_addr地址依次遞增,state_port是狀態(tài)機的狀態(tài)變化信號。
表1是在不帶有SignalTap的加密卡上測得的8片SSX12-B芯片生成的防偽碼數據,其與帶有SignalTap的加密卡測得的數據相一致,且生成的防偽碼經核驗服務器核驗后均是正確的防偽碼數據。
加密卡的驅動程序基于Linux2.6內核開發(fā),API接口程序和上位機軟件是在RedHat Linux AS4.6環(huán)境下開發(fā)完成的的。最后對加密卡生成票據防偽碼的性能進行了測試,在程序中設置8片密碼算法芯片SSX12-B同時并行工作,通過10 000次循環(huán)測試,測得生成票據防偽碼的速度為827次/s。通過壓力測試加密卡工作穩(wěn)定,且生成數據正確。
7 結束語
設計了一種基于FPGA的稅控算法加密卡,介紹了各模塊的設計,通過FPGA實現了對稅控密碼算法芯片的高效控制。該加密卡具有加密速度快、效率高、功耗小的優(yōu)點,通過PCI總線內置于稅控加密機中,可保證發(fā)票數據的正確加解密及生成發(fā)票數據防偽碼,滿足了稅務部門對發(fā)票管理的要求。
評論