秦 放
(四川衛(wèi)士通信息安全平臺(tái)技術(shù)有限公司,四川 成都 610000)
商用加密卡作為基礎(chǔ)密碼設(shè)備,在金融、電力、社保等行業(yè)中為各種類型的上層安全應(yīng)用提供了底層的算法加速、身份認(rèn)證、密鑰管理和敏感數(shù)據(jù)保護(hù)等服務(wù)。目前市面上的千兆商用密碼卡在設(shè)計(jì)上大都采用集成度高的進(jìn)口器件,在算法實(shí)現(xiàn)上也過分依賴進(jìn)口邏輯器件,所用算法也大都是國際公開算法,如:AES(Advanced Encryption Standard)、DES(Data Encryption Standard)、RSA(Rivest Shamir Adleman)、ECDSA(Elliptic Curve Digital Signature Algorithm)等等,且對(duì)于敏感資源和密鑰的管理、保護(hù)都沒有滿足國家相關(guān)的密碼行業(yè)標(biāo)準(zhǔn)。本文通過分析加密卡的設(shè)計(jì)要素,描述該千兆密碼卡的設(shè)計(jì)實(shí)現(xiàn)思路及國產(chǎn)化的實(shí)現(xiàn)途徑,最終呈現(xiàn)出這款產(chǎn)品化的密碼卡的接口特性和實(shí)測性能。實(shí)測結(jié)果表明,該千兆密碼卡的對(duì)稱運(yùn)算性能逼近 1 Gbps,非對(duì)稱運(yùn)算簽名性能超過50 000 tps。
密碼卡的硬件部分主要由主控單元、總線接口單元以及密碼運(yùn)算單元組成。
密碼卡采用國產(chǎn)正向設(shè)計(jì)的PH5系列FPGA實(shí)現(xiàn)高速PCI-E(Peripheral Component Interconnect Express)總線協(xié)議[1],使得密碼卡可以通過該總線單元實(shí)現(xiàn)與主機(jī)的互聯(lián)。上層軟件安全服務(wù)接口調(diào)用的命令均通過該總線單元發(fā)送給密碼卡的主控單元。
密碼卡的主控單元采用的是國產(chǎn)的X1000E作為主控芯片,接受應(yīng)用層軟件的接口調(diào)用,負(fù)責(zé)密碼卡上各部分硬件資源的管理和調(diào)度,完成具體的密碼業(yè)務(wù)。
密碼卡提供多種算法的密碼運(yùn)算服務(wù),其中:對(duì)稱密碼算法提供SM1、SM4[2];非對(duì)稱密碼算法提供SM2[3];雜湊算法提供SM3[4]。密碼卡通過密碼算法提供數(shù)據(jù)加密/解密、簽名/驗(yàn)證及雜湊運(yùn)算等基礎(chǔ)密碼運(yùn)算服務(wù)。密碼卡的密碼運(yùn)算由專用算法引擎(SSX30-D實(shí)現(xiàn)SM1;SSX1510實(shí)現(xiàn)SM2/3/4)共同構(gòu)成,如圖1所示。
圖1 硬件組成框
密碼卡的嵌入式軟件是為應(yīng)用提供安全服務(wù)的關(guān)鍵所在,它的主要功能是向應(yīng)用提供硬件資源的管理和調(diào)度,因此在設(shè)計(jì)上主要考慮各種安全服務(wù)的實(shí)現(xiàn)以及設(shè)備自身的安全防護(hù),嵌入式軟件架構(gòu)圖如圖2所示。
密碼卡的嵌入式軟件運(yùn)行在X1000E處理器上,嵌入式軟件由5個(gè)部分組成:硬件驅(qū)動(dòng)程序、接口命令處理、存儲(chǔ)資源管理、任務(wù)管理和狀態(tài) 管理。
圖2 嵌入式軟件架構(gòu)
(1)硬件驅(qū)動(dòng)程序
從整個(gè)軟件架構(gòu)考慮,將直接訪問硬件資源的程序抽象出來,形成一層軟件模塊,即硬件驅(qū)動(dòng)程序。這樣,密碼卡的其他嵌入式軟件模塊就不用考慮如何訪問硬件,全部交給硬件驅(qū)動(dòng)程序來處理。
硬件驅(qū)動(dòng)程序在內(nèi)部實(shí)現(xiàn)對(duì)板卡上各類硬件資源的正確、快速和穩(wěn)定的訪問,提供抽象后的訪問硬件的調(diào)用接口,將密碼卡嵌入式軟件與硬件資源在邏輯上隔離開。
(2)接口命令處理
接口命令處理模塊從處理器角度來看就是一個(gè)中斷處理程序,處理主機(jī)的請(qǐng)求。主機(jī)向密碼卡發(fā)出請(qǐng)求后,X1000E會(huì)收到來自主機(jī)的中斷信號(hào),然后進(jìn)入中斷處理程序,同時(shí)請(qǐng)求的命令數(shù)據(jù)會(huì)進(jìn)入X1000E可訪問的PH5接口芯片例化出的一塊雙口存儲(chǔ)區(qū)中。在中斷處理程序中,X1000E將命令數(shù)據(jù)讀出進(jìn)行解析后交由任務(wù)管理模塊處理,將處理結(jié)果回寫到PH5接口芯片對(duì)應(yīng)的存儲(chǔ)區(qū)中,然后觸發(fā)接口芯片向主機(jī)發(fā)送中斷,這樣主機(jī)側(cè)的驅(qū)動(dòng)程序就會(huì)將處理結(jié)果從接口芯片讀出。
(3)存儲(chǔ)資源管理
整個(gè)硬件板卡的存儲(chǔ)資源分為兩部分:SPI Flash和eMMC。Flash上主要存儲(chǔ)X1000E的Boot程序、系統(tǒng)文件和一些管理信息。eMMC則主要用于存儲(chǔ)密碼卡在正常工作狀態(tài)下需要存儲(chǔ)的一些配置信息、密鑰文件及部分對(duì)外開放的存儲(chǔ)文件。
(4)任務(wù)管理
任務(wù)管理模塊是密碼卡嵌入式軟件的關(guān)鍵部分,它是密碼卡提供安全密碼服務(wù)的具體執(zhí)行部件。
任務(wù)管理模塊的“命令”來源于接口命令處理模塊,它的處理結(jié)果也送往接口命令處理模塊,在程序代碼上表現(xiàn)為一個(gè)函數(shù)向量表。根據(jù)接口命令處理模塊對(duì)主機(jī)命令的解析結(jié)果,任務(wù)管理模塊執(zhí)行具體的命令操作,比如:加解密、雜湊運(yùn)算、采集隨機(jī)數(shù)、登錄認(rèn)證等等。任務(wù)執(zhí)行結(jié)束后,不管成功與否都將結(jié)果交予接口命令處理模塊。
(5)密碼資源管理
密碼資源管理模塊用于對(duì)密碼算法及其參數(shù)和對(duì)應(yīng)密鑰的管理。
針對(duì)算法及其參數(shù)的管理,主要的工作體現(xiàn)在對(duì)算法的配置、算法的安全處理。
針對(duì)密鑰的管理,表現(xiàn)在密鑰的產(chǎn)生、存儲(chǔ)、輸入輸出、密鑰的保護(hù)及銷毀等多個(gè)環(huán)節(jié)的安全性、正確性的保障。
密碼卡嵌入式軟件的主要流程圖如圖3所示。
圖3 嵌入式軟件流程圖
設(shè)備驅(qū)動(dòng)程序[5]是上層應(yīng)用與密碼卡之間通信的橋梁,它支持多進(jìn)程、多線程并發(fā)處理。設(shè)備驅(qū)動(dòng)程序是整個(gè)主機(jī)軟件工作的基礎(chǔ)部分,驅(qū)動(dòng)程序的實(shí)現(xiàn)是否正確高效,直接關(guān)系到密碼卡能否在相應(yīng)的操作系統(tǒng)中運(yùn)行的穩(wěn)定性與高效性。
密碼卡的設(shè)備驅(qū)動(dòng)程序主要由下面幾個(gè)模塊組成:
(1)驅(qū)動(dòng)程序入口處理。
(2)設(shè)備對(duì)象的創(chuàng)建。
(3)驅(qū)動(dòng)程序的卸載。
(4)即插即用處理。
(5)電源管理。
(6)數(shù)據(jù)傳輸。
(7)中斷處理。
由于大部分模塊在Windows內(nèi)核下都是標(biāo)準(zhǔn)的處理流程,因此下面只描述與密碼卡硬件設(shè)計(jì)密切相關(guān)的“數(shù)據(jù)處理”和“中斷處理”兩個(gè)模塊的實(shí)現(xiàn)原理。
(1)數(shù)據(jù)處理
數(shù)據(jù)傳輸模塊[6]是驅(qū)動(dòng)程序中最重要的部分,我們采用標(biāo)準(zhǔn)的StartIO例程來處理請(qǐng)求數(shù)據(jù)包, 圖4是驅(qū)動(dòng)程序中數(shù)據(jù)處理邏輯圖。
當(dāng)應(yīng)用程序調(diào)用DeviceIOControl時(shí),I/O管理函數(shù)就會(huì)創(chuàng)建一個(gè)IRP,并把這個(gè)IRP派發(fā)給對(duì)應(yīng)驅(qū)動(dòng)程序的派發(fā)例程。當(dāng)大量讀寫請(qǐng)求進(jìn)入設(shè)備,我們把這些請(qǐng)求放入一個(gè)隊(duì)列中以便使硬件串行化處理。每個(gè)設(shè)備對(duì)象都自帶一個(gè)請(qǐng)求隊(duì)列對(duì)象,接著進(jìn)入StartIO例程。
圖4 數(shù)據(jù)處理流程
當(dāng)派發(fā)例程調(diào)用IoStartPacket()處理一個(gè)IRP時(shí),I/O管理器就調(diào)用一次StartIO例程,StartIO例程的工作就是處理IRP,這就需要訪問密碼卡接口單元的內(nèi)部寄存器,把應(yīng)用層的數(shù)據(jù)拷貝到內(nèi)核緩存中,然后啟動(dòng)主機(jī)向密碼卡的DMA傳輸[7]。當(dāng)密碼卡處理完當(dāng)前的數(shù)據(jù)并將處理結(jié)果傳向主機(jī)時(shí),主機(jī)就會(huì)收到相應(yīng)的中斷。
(2)中斷處理
密碼卡使用異步方式的中斷來告知主機(jī)CPU其I/O操作的完成,當(dāng)密碼卡處理完當(dāng)前的數(shù)據(jù)并將處理結(jié)果傳向主機(jī)時(shí),主機(jī)就會(huì)收到相應(yīng)的中斷。設(shè)備的驅(qū)動(dòng)程序收到這個(gè)中斷后進(jìn)行相應(yīng)的處理,并完成一次數(shù)據(jù)從設(shè)備向主機(jī)的傳輸。
密碼卡支撐著PCIE總線上大量數(shù)據(jù)的傳輸處理,數(shù)據(jù)處理性能越高,對(duì)主機(jī)性能的影響就越小。因此提升密碼卡的整體性能,從而減少主機(jī)上由于增加密碼功能而帶來的額外負(fù)擔(dān)具有十分重要的意義。在硬件設(shè)計(jì)上從以下幾個(gè)方面提升了性能:
(1)高效地實(shí)現(xiàn)密碼算法
密碼卡采用高性能的SSX30-D芯片和SSX1510芯片來分別實(shí)現(xiàn)SM1和SM2/3/4算法,以滿足高速數(shù)據(jù)處理的需要。如圖5所示。
圖5 運(yùn)算單元邏輯圖
圖6 總線接口單元邏輯圖
在調(diào)度單元的控制下,運(yùn)算單元分別針對(duì)每種密碼運(yùn)算業(yè)務(wù)實(shí)現(xiàn)運(yùn)算引擎的管理和并發(fā)調(diào)度。密碼卡的主控制器X1000E通過SRAM總線來操作密碼運(yùn)算引擎接口邏輯部分的配置寄存器,對(duì)密鑰、初始向量和工作模式等參數(shù)進(jìn)行預(yù)置和管理。運(yùn)算單元引擎接口的另外一個(gè)數(shù)據(jù)通道直接與PCIE總線相連,直通主機(jī),使主機(jī)上的業(yè)務(wù)數(shù)據(jù)可以在不通過主控制器而直接進(jìn)入運(yùn)算單元,在調(diào)度模塊的管理下執(zhí)行算法運(yùn)算。在各算法業(yè)務(wù)的流程中,由于減少了數(shù)據(jù)傳輸需要主控制器參與和數(shù)據(jù)搬移的中間環(huán)節(jié),從而極大提升了整體的密碼運(yùn)算 性能。
(2)高效實(shí)現(xiàn)PCIE總線接口單元
基于PH5芯片自帶的PCIE core,DMA控制器[8]以及在邏輯中例化出的主控制器接口通道和運(yùn)算單元接口通道共同完成了接口單元的設(shè)計(jì)。如圖6所示。
當(dāng)密碼運(yùn)算的速率越接近總線傳輸速率時(shí),總線的數(shù)據(jù)傳輸開銷對(duì)整個(gè)性能的影響就變得越明顯。如果總線數(shù)據(jù)傳輸和密碼運(yùn)算串行執(zhí)行,密碼運(yùn)算芯片就無法滿負(fù)荷工作,必然會(huì)極大地影響密碼卡的整體數(shù)據(jù)吞吐率,因此我們?cè)诳偩€接口單元上采用了DMA和多緩沖流水線調(diào)度技術(shù)[9],使總線數(shù)據(jù)傳輸和密碼運(yùn)算并發(fā)執(zhí)行,從而使密碼卡的密碼整體運(yùn)算性能逼近密碼運(yùn)算芯片的輸出 性能。
(3)安全機(jī)制
為了增強(qiáng)密碼卡的安全性和穩(wěn)定性,針對(duì)可能受到的各類攻擊、風(fēng)險(xiǎn),密碼卡采取了多種安全防護(hù)措施,主要功能如下:
采用國家密碼局批準(zhǔn)使用的SM1/2/3/4算法,且算法實(shí)現(xiàn)采用具有國密型號(hào)的芯片;
通過嵌入式軟件的設(shè)計(jì),實(shí)現(xiàn)了完善的上電自檢、周期性自檢措施;
采用具有國密型號(hào)的USBKey作為分離式身份認(rèn)證介質(zhì),防止非法用戶操作密碼卡;
采用三層密鑰結(jié)構(gòu)體制,實(shí)現(xiàn)密鑰的逐層保護(hù),保證密鑰在生成、安裝、導(dǎo)入、存儲(chǔ)、備份、恢復(fù)及銷毀整個(gè)生命周期的安全;
物理性安全措施的加持,例如:密碼卡具有帶散熱功能的屏蔽防護(hù)蓋、結(jié)構(gòu)件由防撬螺釘固定、主要器件電源均使用電容對(duì)地做平滑處理以降低能量分析攻擊風(fēng)險(xiǎn)等;
主要元器件全國產(chǎn),真正實(shí)現(xiàn)了自主可控。
基于龍芯3A2000平臺(tái)對(duì)密碼卡進(jìn)行了各項(xiàng)算法指標(biāo)的測試,平臺(tái)信息如圖7所示。
圖7 主機(jī)配置
各項(xiàng)性能測試指標(biāo)詳情如表1所示。
表1 性能測試(包長2048字節(jié))
國產(chǎn)化商用密碼卡主要元器件均采用國產(chǎn)化芯片,可同時(shí)支持國家標(biāo)準(zhǔn)算法SM1/2/3/4,在x86平臺(tái)上能夠達(dá)到千兆性能,在國產(chǎn)化龍芯3A2000平臺(tái)上也能達(dá)到準(zhǔn)千兆的性能。該密碼卡滿足GM/T 0028[10]、 GM/T 0039[11]標(biāo)準(zhǔn)的安全技術(shù)要求中二級(jí)模塊的各項(xiàng)指標(biāo),安全服務(wù)接口嚴(yán)格遵循GM/T 0018規(guī)范[12],能夠?qū)崿F(xiàn)各安全應(yīng)用與密碼卡的無縫銜接與調(diào)用,具有很好的應(yīng)用價(jià)值和市場推廣價(jià)值。