宣兆新,馬 旭
(1.衛士通信息產業股份有限公司,四川 成都 610041;2.中國電子科技集團公司第二十九研究所,四川 成都 610036)
商用密碼模塊是相對獨立的軟件或硬件模塊,它具有密碼運算功能并提供調用接口,用于對不屬于國家秘密的敏感信息進行加密保護或者安全認證[1]。常用的密碼模塊有密碼機、密碼卡、智能密碼鑰匙(USB-KEY)、TF卡、貼芯卡、軟件密碼模塊等。因不同時期、不同廠商在設計和開發密碼模塊時所遵循的接口規范不同,導致了密碼模塊接口的多樣化。
隨著信息化進程的推進和網絡技術的發展,信息安全問題越來越重要,已經得到各國的高度重視。在信息化建設中,安全應用系統通常要適配多種接口規范,調用不同廠商的不同密碼模塊,存在大量的適配、驗證、集成、開發工作。屏蔽密碼模塊的差異,面向應用提供統一的密碼運算接口,對降低密碼應用門檻,減少適配驗證工作,提高密碼應用效率具有重要意義。
目前,商用密碼模塊遵循的接口規范主要有國密智能密碼鑰匙密碼應用接口規范(簡稱SKF接口規范)、國密密碼設備密碼應用接口規范(簡稱SDF接口規范)、基于加密令牌的國際公鑰加密接口規范(簡稱PKCS#11接口規范),以及各安全廠商自定義的密碼應用接口規范等。
國家密碼管理局發布的密碼行業標準GM/T 0016—2012《智能密碼鑰匙密碼應用接口規范》,規定了在公鑰密碼基礎設施應用技術體系下,智能密碼鑰匙密碼應用接口標準(即SKF接口標準),描述了密碼應用接口的函數、數據類型、參數的定義和設備的安全要求[2]。目前,國內很多密碼模塊廠商都為其產品提供了SKF接口的開發包,開發者可以通過統一的SKF接口開發密碼應用,訪問USB-KEY、TF卡、智能卡等不同形態的密碼模塊,無須和某一個設備供應商的專屬設備或專屬接口綁定。SKF接口的邏輯結構如圖1所示。

圖1 SKF接口的邏輯結構
在SKF接口的邏輯結構中,一個密碼模塊(如智能密碼鑰匙)中存在一個設備認證密鑰和多個應用,應用之間相互獨立。應用由管理員PIN、用戶PIN、文件和容器組成,每個應用可以存在多個文件和多個容器。容器中存放加密密鑰對、簽名密鑰對和會話密鑰。其中,加密密鑰對用于保護會話密鑰,簽名密鑰對用于數字簽名和驗證,會話密鑰用于數據加解密和MAC運算。容器中也可以存放與加密密鑰對對應的加密證書和與簽名密鑰對對應的簽名證書。其中,簽名密鑰對由內部產生,加密密鑰對由外部產生并安全導入,會話密鑰可由內部產生或者由外部產生并安全導入。
國家密碼管理局發布的密碼行業標準GM/T 0018—2012《密碼設備應用接口規范》,規定了在公鑰密碼基礎設施應用技術體系下,密碼機、密碼卡等服務類密碼設備的應用接口標準,即SDF接口標準[3]。密碼設備應用接口向通用密碼服務層提供密鑰生成、密碼運算、文件管理等基礎密碼服務。SDF接口的邏輯結構如圖2所示。

圖2 SDF接口的邏輯結構
在SDF接口的邏輯結構中,一個密碼設備內可以存在多個索引空間和多個文件。索引空間相互獨立,在索引層面進行訪問控制。每個索引空間存在一組加密密鑰對和一組簽名密鑰對。其中加密密鑰對用于保護會話密鑰,簽名密鑰對用于數字簽名和驗證,會話密鑰用于數據加解密和MAC運算。
PKCS#11接口規范由RSA實驗室發布,是公鑰加密標準的一部分,它定義了一套基于加密令牌的編程接口,通過該套接口可以在設備中保存加密信息和執行加密操作。PKCS#11是一個較底層的編程接口,定義了令牌、會話、槽和對象的概念,用于抽象密碼模塊的使用過程。其中,令牌用來抽象TF卡等密碼模塊,會話用來抽象應用與密碼模塊之間的連接,槽用來抽象卡槽或讀卡器,對象用來抽象加密公私鑰對、簽名公私鑰對、會話密鑰等。根據生命周期的長短,對象分為持久對象和會話對象。持久對象保存在設備的安全區域中,直到應用程序主動刪除這些對象。會話對象只存在于運行時建立的特定會話中,一旦會話結束,與之相關的會話對象也被刪除。按照訪問權限,對象可以分為公開對象和私有對象。公開對象任何用戶都可以訪問,私有對象只有身份認證通過的用戶才可以訪問[4]。基于PKCS#11接口實現商用密碼模塊的邏輯結構如圖3所示。

圖3 PKCS#11接口實現商用密碼模塊的邏輯結構
PKCS#11遵循簡單的基于對象的方法,把公鑰技術的設備無關性和資源共享性作為設計的最終目標。它定義了數據對象(或文件對象)、證書對象、密鑰對象三種基本對象類型,在設備層面進行訪問控制。在PKCS#11標準中,文件、私鑰、公鑰、證書都是對象,彼此之間不存在特定關系。PKCS#11是一套國際化的標準接口,對商用密碼算法標識沒有明確定義,因此不同廠商提供的PKCS#11接口通常不具有通用性,即一個廠商提供的PKCS#11接口通常不能調用另一個廠商的商用密碼模塊。
在工程實踐中,密碼應用系統通常要調用一種或多種密碼模塊,進行加密保護或者安全認證。如何降低因密碼模塊和密碼應用接口標準的多樣化帶來的適配驗證工作是當前信息安全建設中普遍面臨的問題。構建密碼設備的抽象模型,對屏蔽密碼設備的差異,統一密碼調用接口,實現密碼泛在化具有重要意義。
從接口規范來看,SKF、SDF和PKCS#11接口都支持設備管理、訪問控制、密鑰管理、密碼運算、文件管理等功能接口。從邏輯結構來看,SKF、SDF和PKCS#11接口都包含文件、加密公私鑰對、簽名公私鑰對、會話密鑰(對稱秘鑰)。三種接口規范不同的是:
(1)SKF引入了應用和容器的概念,在應用層面進行訪問控制,并在應用層面對文件進行管理,在容器層面對加密公私鑰、簽名公私鑰、加密證書、簽名證書進行管理。SDF和PKCS#11沒有應用和容器的概念。
(2)SDF引入了索引的概念,在索引層面進行訪問控制,并在索引層面對加密公私鑰對和簽名公私鑰對進行管理。SDF在設備層面對文件進行管理,加密證書和簽名證書均以文件形式存在,證書管理通過文件管理實現,沒有特定的證書管理類接口。
(3)PKCS#11引入了對象的概念,文件、加密公私鑰對、簽名公私鑰對、加密證書、簽名證書皆是對象,在設備層面進行訪問控制,PKCS#11在設備層面對文件、加密公私鑰對、簽名公私鑰對、加密證書、簽名證書進行管理。
隨著我國商用密碼體系建設的發展,SKF和SDF行業標準接口得到國內密碼廠商的高度認可和廣泛使用,利用PKCS#11接口開發的商用密碼模塊,在通用性和易用性等方面已不再占有明顯優勢。
運用式(8)融合8位專家的證據,計算得出8位專家對于風險因素e11所所隸屬風險等級的BPA:me11=(0.544 4,0.455 6,0,0,0)。同理算得其他風險因素所隸屬風險等級的BPA,組成矩陣M。
SDF接口主要應用于密碼機、密碼卡等服務類的密碼設備。與SKF相比,SDF接口功能還不完備。例如,SDF沒有明確定義證書管理類接口。SKF則具有相對完備的接口體系,其覆蓋了設備管理、訪問控制、文件管理、密鑰管理、證書管理、密碼運算等六類功能接口。另外,與SDF和PKCS#11相比,SKF接口在邏輯結構上做了更細粒度的劃分,SDF和PKCS#11兩種邏輯結構均可以通過“對象虛擬化”手段,映射成SKF的邏輯結構,從而實現三種接口在邏輯結構上的統一。
綜上所述,建立了基于SKF標準規范的商用密碼設備抽象模型,如圖4所示。

圖4 基于SKF標準的設備抽象模型
在一個設備抽象模型中,存在一個設備認證密鑰和多個虛擬應用,虛擬應用之間相互獨立。虛擬應用由管理員PIN、用戶PIN、文件和虛擬容器組成,每個虛擬應用可以存在多個文件和多個虛擬容器。虛擬容器中存放加密密鑰對、簽名密鑰對和會話密鑰。其中加密密鑰對用于保護會話密鑰,簽名密鑰對用于數字簽名和驗證,會話密鑰用于數據加解密和MAC運算。虛擬容器中也可以存放與加密密鑰對對應的加密證書和與簽名密鑰對對應的簽名證書。其中,簽名密鑰對由內部產生,加密密鑰對由外部產生并安全導入,會話密鑰可由內部產生或者由外部產生并安全導入。
通過對象虛擬化手段,在SDF邏輯模型中引入了虛擬應用和虛擬容器的概念,構建了從SDF到SKF的邏輯結構轉換模型,如圖5所示。

圖5 從SDF到SKF的邏輯結構轉換模型
在SDF到SKF的邏輯結構轉換模型中,索引與虛擬應用之間建立了一一對應的關系,并在虛擬應用(即索引)層面進行訪問控制。在邏輯上將文件劃分到特定的虛擬應用中,建立文件對象與虛擬應用之間的對應關系。在虛擬應用中引入一個虛擬容器,建立虛擬容器與加密公私鑰對、虛擬容器與簽名公私鑰對的邏輯包含關系,并在虛擬容器層面對加密公私鑰對和簽名公私鑰對進行管理。在虛擬容器中引入一個加密證書和一個簽名證書,建立虛擬容器與加密證書、虛擬容器與簽名證書的邏輯包含關系,并在虛擬容器層面上,通過文件管理接口對加密證書和簽名證書進行管理。
通過對象虛擬化手段,在PKCS#11邏輯模型中引入一個虛擬應用對象和多個虛擬容器對象,構建了從PKCS#11到SKF的邏輯結構轉換模型,如圖6所示。

圖6 從PKCS#11到SKF的邏輯結構轉換模型
在PKCS#11到SKF的邏輯結構轉換模型中,設備與虛擬應用對象之間建立了唯一的綁定關系,并在虛擬應用(即設備)層面進行訪問控制。在邏輯上將文件對象劃分到虛擬應用中,建立虛擬應用與文件對象的包含關系,并在虛擬應用層面對文件對象進行管理。在虛擬應用中引入虛擬容器概念,建立虛擬容器與加密公私鑰對、虛擬容器與簽名公私鑰對、虛擬容器與加密證書、虛擬容器與簽名證書的邏輯包含關系,在虛擬容器層面對加密公私鑰對、簽名公私鑰對、加密證書、簽名證書進行管理。
基于SKF標準的設備抽象模型,設計了商用密碼模塊接口統一調用框架,如圖7所示。框架由密碼設備層、設備接入層、密碼應用層三部分組成。

圖7 商用密碼模塊接口統一調用框架
密碼設備層是基礎層,包括軟件密碼模塊、TF卡、USB-KEY、密碼機、密碼卡等商用密碼設備,對外提供SM1/SM2/SM3/SM4的密碼運算能力。
設備接入層是核心層,它基于SKF標準的設備抽象模型而設計。設備接入層負責屏蔽底層密碼設備的差異,為密碼應用層提供統一調用的接口。設備接入層向下支持SKF、SDF、PKCS#11三種標準接口規范,實現了從SKF到SKF的接口透傳、從SDF接口到SKF接口的邏輯轉換、從PKCS#11接口到SKF接口的邏輯轉換。設備接入層向上提供了設備管理、訪問控制、密鑰管理、證書管理、密碼運算、文件管理等六類設備抽象接口。
密碼應用層是關鍵層,它基于設備抽象模型,為上層應用提供了簡單易用接口。按照使用場景又分為桌面客戶端、Web客戶端、Android客戶端、iOS客戶端、服務端等五類密碼應用系統。密碼應用層面向應用提供文件管理、對稱加解密、非對稱加解密、簽名驗簽、摘要計算、數字信封、簽章驗章、大文件加解密、文件流加解密等“傻瓜式”易用接口。
密碼應用層對外提供C/C++、JavaScript、Java、ObjectiveC等四種形態的接口,滿足桌面應用、Web應用、Android應用、iOS應用、服務端等多種密碼應用需求。
在信息化建設中,安全應用系統通常要適配不同廠商的密碼模塊,因接口規范的不同,存在大量的適配驗證工作。文中提出了一種基于SKF標準的設備抽象模型,并將其應用到商用密碼模塊接口統一調用框架中,屏蔽了密碼設備的差異,面向應用提供簡單易用的接口,實現了密碼應用接口的統一。在工程實踐中,密碼模塊接口統一調用框架降低了密碼應用的門檻,減少了安全應用系統在對接不同廠商、不同標準的密碼模塊時的重復適配驗證工作。