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