宣兆新,馬 旭
(1.衛(wèi)士通信息產(chǎn)業(yè)股份有限公司,四川 成都 610041;2.中國電子科技集團公司第二十九研究所,四川 成都 610036)
商用密碼模塊是相對獨立的軟件或硬件模塊,它具有密碼運算功能并提供調(diào)用接口,用于對不屬于國家秘密的敏感信息進行加密保護或者安全認證[1]。常用的密碼模塊有密碼機、密碼卡、智能密碼鑰匙(USB-KEY)、TF卡、貼芯卡、軟件密碼模塊等。因不同時期、不同廠商在設(shè)計和開發(fā)密碼模塊時所遵循的接口規(guī)范不同,導(dǎo)致了密碼模塊接口的多樣化。
隨著信息化進程的推進和網(wǎng)絡(luò)技術(shù)的發(fā)展,信息安全問題越來越重要,已經(jīng)得到各國的高度重視。在信息化建設(shè)中,安全應(yīng)用系統(tǒng)通常要適配多種接口規(guī)范,調(diào)用不同廠商的不同密碼模塊,存在大量的適配、驗證、集成、開發(fā)工作。屏蔽密碼模塊的差異,面向應(yīng)用提供統(tǒng)一的密碼運算接口,對降低密碼應(yīng)用門檻,減少適配驗證工作,提高密碼應(yīng)用效率具有重要意義。
目前,商用密碼模塊遵循的接口規(guī)范主要有國密智能密碼鑰匙密碼應(yīng)用接口規(guī)范(簡稱SKF接口規(guī)范)、國密密碼設(shè)備密碼應(yīng)用接口規(guī)范(簡稱SDF接口規(guī)范)、基于加密令牌的國際公鑰加密接口規(guī)范(簡稱PKCS#11接口規(guī)范),以及各安全廠商自定義的密碼應(yīng)用接口規(guī)范等。
國家密碼管理局發(fā)布的密碼行業(yè)標(biāo)準(zhǔn)GM/T 0016—2012《智能密碼鑰匙密碼應(yīng)用接口規(guī)范》,規(guī)定了在公鑰密碼基礎(chǔ)設(shè)施應(yīng)用技術(shù)體系下,智能密碼鑰匙密碼應(yīng)用接口標(biāo)準(zhǔn)(即SKF接口標(biāo)準(zhǔn)),描述了密碼應(yīng)用接口的函數(shù)、數(shù)據(jù)類型、參數(shù)的定義和設(shè)備的安全要求[2]。目前,國內(nèi)很多密碼模塊廠商都為其產(chǎn)品提供了SKF接口的開發(fā)包,開發(fā)者可以通過統(tǒng)一的SKF接口開發(fā)密碼應(yīng)用,訪問USB-KEY、TF卡、智能卡等不同形態(tài)的密碼模塊,無須和某一個設(shè)備供應(yīng)商的專屬設(shè)備或?qū)俳涌诮壎?。SKF接口的邏輯結(jié)構(gòu)如圖1所示。
圖1 SKF接口的邏輯結(jié)構(gòu)
在SKF接口的邏輯結(jié)構(gòu)中,一個密碼模塊(如智能密碼鑰匙)中存在一個設(shè)備認證密鑰和多個應(yīng)用,應(yīng)用之間相互獨立。應(yīng)用由管理員PIN、用戶PIN、文件和容器組成,每個應(yīng)用可以存在多個文件和多個容器。容器中存放加密密鑰對、簽名密鑰對和會話密鑰。其中,加密密鑰對用于保護會話密鑰,簽名密鑰對用于數(shù)字簽名和驗證,會話密鑰用于數(shù)據(jù)加解密和MAC運算。容器中也可以存放與加密密鑰對對應(yīng)的加密證書和與簽名密鑰對對應(yīng)的簽名證書。其中,簽名密鑰對由內(nèi)部產(chǎn)生,加密密鑰對由外部產(chǎn)生并安全導(dǎo)入,會話密鑰可由內(nèi)部產(chǎn)生或者由外部產(chǎn)生并安全導(dǎo)入。
國家密碼管理局發(fā)布的密碼行業(yè)標(biāo)準(zhǔn)GM/T 0018—2012《密碼設(shè)備應(yīng)用接口規(guī)范》,規(guī)定了在公鑰密碼基礎(chǔ)設(shè)施應(yīng)用技術(shù)體系下,密碼機、密碼卡等服務(wù)類密碼設(shè)備的應(yīng)用接口標(biāo)準(zhǔn),即SDF接口標(biāo)準(zhǔn)[3]。密碼設(shè)備應(yīng)用接口向通用密碼服務(wù)層提供密鑰生成、密碼運算、文件管理等基礎(chǔ)密碼服務(wù)。SDF接口的邏輯結(jié)構(gòu)如圖2所示。
圖2 SDF接口的邏輯結(jié)構(gòu)
在SDF接口的邏輯結(jié)構(gòu)中,一個密碼設(shè)備內(nèi)可以存在多個索引空間和多個文件。索引空間相互獨立,在索引層面進行訪問控制。每個索引空間存在一組加密密鑰對和一組簽名密鑰對。其中加密密鑰對用于保護會話密鑰,簽名密鑰對用于數(shù)字簽名和驗證,會話密鑰用于數(shù)據(jù)加解密和MAC運算。
PKCS#11接口規(guī)范由RSA實驗室發(fā)布,是公鑰加密標(biāo)準(zhǔn)的一部分,它定義了一套基于加密令牌的編程接口,通過該套接口可以在設(shè)備中保存加密信息和執(zhí)行加密操作。PKCS#11是一個較底層的編程接口,定義了令牌、會話、槽和對象的概念,用于抽象密碼模塊的使用過程。其中,令牌用來抽象TF卡等密碼模塊,會話用來抽象應(yīng)用與密碼模塊之間的連接,槽用來抽象卡槽或讀卡器,對象用來抽象加密公私鑰對、簽名公私鑰對、會話密鑰等。根據(jù)生命周期的長短,對象分為持久對象和會話對象。持久對象保存在設(shè)備的安全區(qū)域中,直到應(yīng)用程序主動刪除這些對象。會話對象只存在于運行時建立的特定會話中,一旦會話結(jié)束,與之相關(guān)的會話對象也被刪除。按照訪問權(quán)限,對象可以分為公開對象和私有對象。公開對象任何用戶都可以訪問,私有對象只有身份認證通過的用戶才可以訪問[4]?;赑KCS#11接口實現(xiàn)商用密碼模塊的邏輯結(jié)構(gòu)如圖3所示。
圖3 PKCS#11接口實現(xiàn)商用密碼模塊的邏輯結(jié)構(gòu)
PKCS#11遵循簡單的基于對象的方法,把公鑰技術(shù)的設(shè)備無關(guān)性和資源共享性作為設(shè)計的最終目標(biāo)。它定義了數(shù)據(jù)對象(或文件對象)、證書對象、密鑰對象三種基本對象類型,在設(shè)備層面進行訪問控制。在PKCS#11標(biāo)準(zhǔn)中,文件、私鑰、公鑰、證書都是對象,彼此之間不存在特定關(guān)系。PKCS#11是一套國際化的標(biāo)準(zhǔn)接口,對商用密碼算法標(biāo)識沒有明確定義,因此不同廠商提供的PKCS#11接口通常不具有通用性,即一個廠商提供的PKCS#11接口通常不能調(diào)用另一個廠商的商用密碼模塊。
在工程實踐中,密碼應(yīng)用系統(tǒng)通常要調(diào)用一種或多種密碼模塊,進行加密保護或者安全認證。如何降低因密碼模塊和密碼應(yīng)用接口標(biāo)準(zhǔn)的多樣化帶來的適配驗證工作是當(dāng)前信息安全建設(shè)中普遍面臨的問題。構(gòu)建密碼設(shè)備的抽象模型,對屏蔽密碼設(shè)備的差異,統(tǒng)一密碼調(diào)用接口,實現(xiàn)密碼泛在化具有重要意義。
從接口規(guī)范來看,SKF、SDF和PKCS#11接口都支持設(shè)備管理、訪問控制、密鑰管理、密碼運算、文件管理等功能接口。從邏輯結(jié)構(gòu)來看,SKF、SDF和PKCS#11接口都包含文件、加密公私鑰對、簽名公私鑰對、會話密鑰(對稱秘鑰)。三種接口規(guī)范不同的是:
(1)SKF引入了應(yīng)用和容器的概念,在應(yīng)用層面進行訪問控制,并在應(yīng)用層面對文件進行管理,在容器層面對加密公私鑰、簽名公私鑰、加密證書、簽名證書進行管理。SDF和PKCS#11沒有應(yīng)用和容器的概念。
(2)SDF引入了索引的概念,在索引層面進行訪問控制,并在索引層面對加密公私鑰對和簽名公私鑰對進行管理。SDF在設(shè)備層面對文件進行管理,加密證書和簽名證書均以文件形式存在,證書管理通過文件管理實現(xiàn),沒有特定的證書管理類接口。
(3)PKCS#11引入了對象的概念,文件、加密公私鑰對、簽名公私鑰對、加密證書、簽名證書皆是對象,在設(shè)備層面進行訪問控制,PKCS#11在設(shè)備層面對文件、加密公私鑰對、簽名公私鑰對、加密證書、簽名證書進行管理。
隨著我國商用密碼體系建設(shè)的發(fā)展,SKF和SDF行業(yè)標(biāo)準(zhǔn)接口得到國內(nèi)密碼廠商的高度認可和廣泛使用,利用PKCS#11接口開發(fā)的商用密碼模塊,在通用性和易用性等方面已不再占有明顯優(yōu)勢。
運用式(8)融合8位專家的證據(jù),計算得出8位專家對于風(fēng)險因素e11所所隸屬風(fēng)險等級的BPA:me11=(0.544 4,0.455 6,0,0,0)。同理算得其他風(fēng)險因素所隸屬風(fēng)險等級的BPA,組成矩陣M。
SDF接口主要應(yīng)用于密碼機、密碼卡等服務(wù)類的密碼設(shè)備。與SKF相比,SDF接口功能還不完備。例如,SDF沒有明確定義證書管理類接口。SKF則具有相對完備的接口體系,其覆蓋了設(shè)備管理、訪問控制、文件管理、密鑰管理、證書管理、密碼運算等六類功能接口。另外,與SDF和PKCS#11相比,SKF接口在邏輯結(jié)構(gòu)上做了更細粒度的劃分,SDF和PKCS#11兩種邏輯結(jié)構(gòu)均可以通過“對象虛擬化”手段,映射成SKF的邏輯結(jié)構(gòu),從而實現(xiàn)三種接口在邏輯結(jié)構(gòu)上的統(tǒng)一。
綜上所述,建立了基于SKF標(biāo)準(zhǔn)規(guī)范的商用密碼設(shè)備抽象模型,如圖4所示。
圖4 基于SKF標(biāo)準(zhǔn)的設(shè)備抽象模型
在一個設(shè)備抽象模型中,存在一個設(shè)備認證密鑰和多個虛擬應(yīng)用,虛擬應(yīng)用之間相互獨立。虛擬應(yīng)用由管理員PIN、用戶PIN、文件和虛擬容器組成,每個虛擬應(yīng)用可以存在多個文件和多個虛擬容器。虛擬容器中存放加密密鑰對、簽名密鑰對和會話密鑰。其中加密密鑰對用于保護會話密鑰,簽名密鑰對用于數(shù)字簽名和驗證,會話密鑰用于數(shù)據(jù)加解密和MAC運算。虛擬容器中也可以存放與加密密鑰對對應(yīng)的加密證書和與簽名密鑰對對應(yīng)的簽名證書。其中,簽名密鑰對由內(nèi)部產(chǎn)生,加密密鑰對由外部產(chǎn)生并安全導(dǎo)入,會話密鑰可由內(nèi)部產(chǎn)生或者由外部產(chǎn)生并安全導(dǎo)入。
通過對象虛擬化手段,在SDF邏輯模型中引入了虛擬應(yīng)用和虛擬容器的概念,構(gòu)建了從SDF到SKF的邏輯結(jié)構(gòu)轉(zhuǎn)換模型,如圖5所示。
圖5 從SDF到SKF的邏輯結(jié)構(gòu)轉(zhuǎn)換模型
在SDF到SKF的邏輯結(jié)構(gòu)轉(zhuǎn)換模型中,索引與虛擬應(yīng)用之間建立了一一對應(yīng)的關(guān)系,并在虛擬應(yīng)用(即索引)層面進行訪問控制。在邏輯上將文件劃分到特定的虛擬應(yīng)用中,建立文件對象與虛擬應(yīng)用之間的對應(yīng)關(guān)系。在虛擬應(yīng)用中引入一個虛擬容器,建立虛擬容器與加密公私鑰對、虛擬容器與簽名公私鑰對的邏輯包含關(guān)系,并在虛擬容器層面對加密公私鑰對和簽名公私鑰對進行管理。在虛擬容器中引入一個加密證書和一個簽名證書,建立虛擬容器與加密證書、虛擬容器與簽名證書的邏輯包含關(guān)系,并在虛擬容器層面上,通過文件管理接口對加密證書和簽名證書進行管理。
通過對象虛擬化手段,在PKCS#11邏輯模型中引入一個虛擬應(yīng)用對象和多個虛擬容器對象,構(gòu)建了從PKCS#11到SKF的邏輯結(jié)構(gòu)轉(zhuǎn)換模型,如圖6所示。
圖6 從PKCS#11到SKF的邏輯結(jié)構(gòu)轉(zhuǎn)換模型
在PKCS#11到SKF的邏輯結(jié)構(gòu)轉(zhuǎn)換模型中,設(shè)備與虛擬應(yīng)用對象之間建立了唯一的綁定關(guān)系,并在虛擬應(yīng)用(即設(shè)備)層面進行訪問控制。在邏輯上將文件對象劃分到虛擬應(yīng)用中,建立虛擬應(yīng)用與文件對象的包含關(guān)系,并在虛擬應(yīng)用層面對文件對象進行管理。在虛擬應(yīng)用中引入虛擬容器概念,建立虛擬容器與加密公私鑰對、虛擬容器與簽名公私鑰對、虛擬容器與加密證書、虛擬容器與簽名證書的邏輯包含關(guān)系,在虛擬容器層面對加密公私鑰對、簽名公私鑰對、加密證書、簽名證書進行管理。
基于SKF標(biāo)準(zhǔn)的設(shè)備抽象模型,設(shè)計了商用密碼模塊接口統(tǒng)一調(diào)用框架,如圖7所示??蚣苡擅艽a設(shè)備層、設(shè)備接入層、密碼應(yīng)用層三部分組成。
圖7 商用密碼模塊接口統(tǒng)一調(diào)用框架
密碼設(shè)備層是基礎(chǔ)層,包括軟件密碼模塊、TF卡、USB-KEY、密碼機、密碼卡等商用密碼設(shè)備,對外提供SM1/SM2/SM3/SM4的密碼運算能力。
設(shè)備接入層是核心層,它基于SKF標(biāo)準(zhǔn)的設(shè)備抽象模型而設(shè)計。設(shè)備接入層負責(zé)屏蔽底層密碼設(shè)備的差異,為密碼應(yīng)用層提供統(tǒng)一調(diào)用的接口。設(shè)備接入層向下支持SKF、SDF、PKCS#11三種標(biāo)準(zhǔn)接口規(guī)范,實現(xiàn)了從SKF到SKF的接口透傳、從SDF接口到SKF接口的邏輯轉(zhuǎn)換、從PKCS#11接口到SKF接口的邏輯轉(zhuǎn)換。設(shè)備接入層向上提供了設(shè)備管理、訪問控制、密鑰管理、證書管理、密碼運算、文件管理等六類設(shè)備抽象接口。
密碼應(yīng)用層是關(guān)鍵層,它基于設(shè)備抽象模型,為上層應(yīng)用提供了簡單易用接口。按照使用場景又分為桌面客戶端、Web客戶端、Android客戶端、iOS客戶端、服務(wù)端等五類密碼應(yīng)用系統(tǒng)。密碼應(yīng)用層面向應(yīng)用提供文件管理、對稱加解密、非對稱加解密、簽名驗簽、摘要計算、數(shù)字信封、簽章驗章、大文件加解密、文件流加解密等“傻瓜式”易用接口。
密碼應(yīng)用層對外提供C/C++、JavaScript、Java、ObjectiveC等四種形態(tài)的接口,滿足桌面應(yīng)用、Web應(yīng)用、Android應(yīng)用、iOS應(yīng)用、服務(wù)端等多種密碼應(yīng)用需求。
在信息化建設(shè)中,安全應(yīng)用系統(tǒng)通常要適配不同廠商的密碼模塊,因接口規(guī)范的不同,存在大量的適配驗證工作。文中提出了一種基于SKF標(biāo)準(zhǔn)的設(shè)備抽象模型,并將其應(yīng)用到商用密碼模塊接口統(tǒng)一調(diào)用框架中,屏蔽了密碼設(shè)備的差異,面向應(yīng)用提供簡單易用的接口,實現(xiàn)了密碼應(yīng)用接口的統(tǒng)一。在工程實踐中,密碼模塊接口統(tǒng)一調(diào)用框架降低了密碼應(yīng)用的門檻,減少了安全應(yīng)用系統(tǒng)在對接不同廠商、不同標(biāo)準(zhǔn)的密碼模塊時的重復(fù)適配驗證工作。