APP下载

商用密码模块接口统一调用技术研究

2021-12-22宣兆新

信息安全与通信保密 2021年10期
关键词:公私密钥容器

宣兆新,马 旭

(1.卫士通信息产业股份有限公司,四川 成都 610041;2.中国电子科技集团公司第二十九研究所,四川 成都 610036)

0 引 言

商用密码模块是相对独立的软件或硬件模块,它具有密码运算功能并提供调用接口,用于对不属于国家秘密的敏感信息进行加密保护或者安全认证[1]。常用的密码模块有密码机、密码卡、智能密码钥匙(USB-KEY)、TF卡、贴芯卡、软件密码模块等。因不同时期、不同厂商在设计和开发密码模块时所遵循的接口规范不同,导致了密码模块接口的多样化。

随着信息化进程的推进和网络技术的发展,信息安全问题越来越重要,已经得到各国的高度重视。在信息化建设中,安全应用系统通常要适配多种接口规范,调用不同厂商的不同密码模块,存在大量的适配、验证、集成、开发工作。屏蔽密码模块的差异,面向应用提供统一的密码运算接口,对降低密码应用门槛,减少适配验证工作,提高密码应用效率具有重要意义。

1 商用密码模块接口规范

目前,商用密码模块遵循的接口规范主要有国密智能密码钥匙密码应用接口规范(简称SKF接口规范)、国密密码设备密码应用接口规范(简称SDF接口规范)、基于加密令牌的国际公钥加密接口规范(简称PKCS#11接口规范),以及各安全厂商自定义的密码应用接口规范等。

1.1 国密SKF标准接口规范

国家密码管理局发布的密码行业标准GM/T 0016—2012《智能密码钥匙密码应用接口规范》,规定了在公钥密码基础设施应用技术体系下,智能密码钥匙密码应用接口标准(即SKF接口标准),描述了密码应用接口的函数、数据类型、参数的定义和设备的安全要求[2]。目前,国内很多密码模块厂商都为其产品提供了SKF接口的开发包,开发者可以通过统一的SKF接口开发密码应用,访问USB-KEY、TF卡、智能卡等不同形态的密码模块,无须和某一个设备供应商的专属设备或专属接口绑定。SKF接口的逻辑结构如图1所示。

图1 SKF接口的逻辑结构

在SKF接口的逻辑结构中,一个密码模块(如智能密码钥匙)中存在一个设备认证密钥和多个应用,应用之间相互独立。应用由管理员PIN、用户PIN、文件和容器组成,每个应用可以存在多个文件和多个容器。容器中存放加密密钥对、签名密钥对和会话密钥。其中,加密密钥对用于保护会话密钥,签名密钥对用于数字签名和验证,会话密钥用于数据加解密和MAC运算。容器中也可以存放与加密密钥对对应的加密证书和与签名密钥对对应的签名证书。其中,签名密钥对由内部产生,加密密钥对由外部产生并安全导入,会话密钥可由内部产生或者由外部产生并安全导入。

1.2 国密SDF标准接口规范

国家密码管理局发布的密码行业标准GM/T 0018—2012《密码设备应用接口规范》,规定了在公钥密码基础设施应用技术体系下,密码机、密码卡等服务类密码设备的应用接口标准,即SDF接口标准[3]。密码设备应用接口向通用密码服务层提供密钥生成、密码运算、文件管理等基础密码服务。SDF接口的逻辑结构如图2所示。

图2 SDF接口的逻辑结构

在SDF接口的逻辑结构中,一个密码设备内可以存在多个索引空间和多个文件。索引空间相互独立,在索引层面进行访问控制。每个索引空间存在一组加密密钥对和一组签名密钥对。其中加密密钥对用于保护会话密钥,签名密钥对用于数字签名和验证,会话密钥用于数据加解密和MAC运算。

1.3 PKCS#11标准接口规范

PKCS#11接口规范由RSA实验室发布,是公钥加密标准的一部分,它定义了一套基于加密令牌的编程接口,通过该套接口可以在设备中保存加密信息和执行加密操作。PKCS#11是一个较底层的编程接口,定义了令牌、会话、槽和对象的概念,用于抽象密码模块的使用过程。其中,令牌用来抽象TF卡等密码模块,会话用来抽象应用与密码模块之间的连接,槽用来抽象卡槽或读卡器,对象用来抽象加密公私钥对、签名公私钥对、会话密钥等。根据生命周期的长短,对象分为持久对象和会话对象。持久对象保存在设备的安全区域中,直到应用程序主动删除这些对象。会话对象只存在于运行时建立的特定会话中,一旦会话结束,与之相关的会话对象也被删除。按照访问权限,对象可以分为公开对象和私有对象。公开对象任何用户都可以访问,私有对象只有身份认证通过的用户才可以访问[4]。基于PKCS#11接口实现商用密码模块的逻辑结构如图3所示。

图3 PKCS#11接口实现商用密码模块的逻辑结构

PKCS#11遵循简单的基于对象的方法,把公钥技术的设备无关性和资源共享性作为设计的最终目标。它定义了数据对象(或文件对象)、证书对象、密钥对象三种基本对象类型,在设备层面进行访问控制。在PKCS#11标准中,文件、私钥、公钥、证书都是对象,彼此之间不存在特定关系。PKCS#11是一套国际化的标准接口,对商用密码算法标识没有明确定义,因此不同厂商提供的PKCS#11接口通常不具有通用性,即一个厂商提供的PKCS#11接口通常不能调用另一个厂商的商用密码模块。

2 基于SKF标准的设备抽象模型

在工程实践中,密码应用系统通常要调用一种或多种密码模块,进行加密保护或者安全认证。如何降低因密码模块和密码应用接口标准的多样化带来的适配验证工作是当前信息安全建设中普遍面临的问题。构建密码设备的抽象模型,对屏蔽密码设备的差异,统一密码调用接口,实现密码泛在化具有重要意义。

2.1 三种标准接口规范的对比分析

从接口规范来看,SKF、SDF和PKCS#11接口都支持设备管理、访问控制、密钥管理、密码运算、文件管理等功能接口。从逻辑结构来看,SKF、SDF和PKCS#11接口都包含文件、加密公私钥对、签名公私钥对、会话密钥(对称秘钥)。三种接口规范不同的是:

(1)SKF引入了应用和容器的概念,在应用层面进行访问控制,并在应用层面对文件进行管理,在容器层面对加密公私钥、签名公私钥、加密证书、签名证书进行管理。SDF和PKCS#11没有应用和容器的概念。

(2)SDF引入了索引的概念,在索引层面进行访问控制,并在索引层面对加密公私钥对和签名公私钥对进行管理。SDF在设备层面对文件进行管理,加密证书和签名证书均以文件形式存在,证书管理通过文件管理实现,没有特定的证书管理类接口。

(3)PKCS#11引入了对象的概念,文件、加密公私钥对、签名公私钥对、加密证书、签名证书皆是对象,在设备层面进行访问控制,PKCS#11在设备层面对文件、加密公私钥对、签名公私钥对、加密证书、签名证书进行管理。

2.2 基于SKF标准的设备抽象

随着我国商用密码体系建设的发展,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运算。虚拟容器中也可以存放与加密密钥对对应的加密证书和与签名密钥对对应的签名证书。其中,签名密钥对由内部产生,加密密钥对由外部产生并安全导入,会话密钥可由内部产生或者由外部产生并安全导入。

2.3 SDF到SKF的逻辑结构转换模型

通过对象虚拟化手段,在SDF逻辑模型中引入了虚拟应用和虚拟容器的概念,构建了从SDF到SKF的逻辑结构转换模型,如图5所示。

图5 从SDF到SKF的逻辑结构转换模型

在SDF到SKF的逻辑结构转换模型中,索引与虚拟应用之间建立了一一对应的关系,并在虚拟应用(即索引)层面进行访问控制。在逻辑上将文件划分到特定的虚拟应用中,建立文件对象与虚拟应用之间的对应关系。在虚拟应用中引入一个虚拟容器,建立虚拟容器与加密公私钥对、虚拟容器与签名公私钥对的逻辑包含关系,并在虚拟容器层面对加密公私钥对和签名公私钥对进行管理。在虚拟容器中引入一个加密证书和一个签名证书,建立虚拟容器与加密证书、虚拟容器与签名证书的逻辑包含关系,并在虚拟容器层面上,通过文件管理接口对加密证书和签名证书进行管理。

2.4 PKCS#11到SKF逻辑结构转换模型

通过对象虚拟化手段,在PKCS#11逻辑模型中引入一个虚拟应用对象和多个虚拟容器对象,构建了从PKCS#11到SKF的逻辑结构转换模型,如图6所示。

图6 从PKCS#11到SKF的逻辑结构转换模型

在PKCS#11到SKF的逻辑结构转换模型中,设备与虚拟应用对象之间建立了唯一的绑定关系,并在虚拟应用(即设备)层面进行访问控制。在逻辑上将文件对象划分到虚拟应用中,建立虚拟应用与文件对象的包含关系,并在虚拟应用层面对文件对象进行管理。在虚拟应用中引入虚拟容器概念,建立虚拟容器与加密公私钥对、虚拟容器与签名公私钥对、虚拟容器与加密证书、虚拟容器与签名证书的逻辑包含关系,在虚拟容器层面对加密公私钥对、签名公私钥对、加密证书、签名证书进行管理。

3 商用密码模块接口统一调用框架

基于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应用、服务端等多种密码应用需求。

4 结 语

在信息化建设中,安全应用系统通常要适配不同厂商的密码模块,因接口规范的不同,存在大量的适配验证工作。文中提出了一种基于SKF标准的设备抽象模型,并将其应用到商用密码模块接口统一调用框架中,屏蔽了密码设备的差异,面向应用提供简单易用的接口,实现了密码应用接口的统一。在工程实践中,密码模块接口统一调用框架降低了密码应用的门槛,减少了安全应用系统在对接不同厂商、不同标准的密码模块时的重复适配验证工作。

猜你喜欢

公私密钥容器
容器倒置后压力压强如何变
密码系统中密钥的状态与保护*
非公担当
难以置信的事情
公私之交 存亡之本
TPM 2.0密钥迁移协议研究
一种对称密钥的密钥管理方法及系统
取米
规范公私合作很紧迫
公私合作 不回避重规范