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