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