商用密码模块接口统一调用技术研究
摘 要
随着信息技术的发展,密码技术应用得越来越广泛。商用密码模块应用接口的多样化,为密码应用带来了大量的适配验证工作。屏蔽密码设备差异、统一密码调用接口、降低密码应用门槛,对密码泛在化具有重要意义。分析了智能密码钥匙应用接口、密码设备应用接口、基于令牌的国际公钥加密接口的逻辑结构。在智能密码钥匙密码应用标准规范的基础上,提出了一种设备抽象模型,基于该模型设计了商用密码模块接口统一调用框架。密码应用系统引入该项技术成果后,在对接不同厂商的密码模块时,可以减少大量的重复适配和验证工作。
内容目录:
0 引 言
1 商用密码模块接口规范
1.1 国密SKF 标准接口规范
1.2 国密SDF 标准接口规范
1.3 PKCS#11 标准接口规范
2 基于 SKF 标准的设备抽象模型
2.1 三种标准接口规范的对比分析
2.2 基于SKF 标准的设备抽象
2.3 SDF 到 SKF 的逻辑结构转换模型
2.4 PKCS#11 到 SKF 逻辑结构转换模型
3 商用密码模块接口统一调用框架
商用密码模块是相对独立的软件或硬件模块,它具有密码运算功能并提供调用接口,用于对不属于国家秘密的敏感信息进行加密保护或者安全认证 。常用的密码模块有密码机、密码卡、智能密码钥匙(USB-KEY)、TF 卡、贴芯卡、软件密码模块等。因不同时期、不同厂商在设计和开发密码模块时所遵循的接口规范不同,导致了密码模块接口的多样化。
随着信息化进程的推进和网络技术的发展, 信息安全问题越来越重要,已经得到各国的高度重视。在信息化建设中,安全应用系统通常要适配多种接口规范,调用不同厂商的不同密码模块,存在大量的适配、验证、集成、开发工作。屏蔽密码模块的差异,面向应用提供统一的密码运算接口,对降低密码应用门槛,减少适配验证工作,提高密码应用效率具有重要意义。
商用密码模块接口规范
目前,商用密码模块遵循的接口规范主要有国密智能密码钥匙密码应用接口规范(简称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 接口标准 。密码设备应用接口向通用密码服务层提供密钥生成、密码运算、文件管理等基础密码服务。SDF 接口的逻辑结构如图 2 所示。
图 2 SDF 接口的逻辑结构
在 SDF 接口的逻辑结构中,一个密码设备内可以存在多个索引空间和多个文件。索引空间相互独立,在索引层面进行访问控制。每个索引空间存在一组加密密钥对和一组签名密钥对。其中加密密钥对用于保护会话密钥,签名密钥对用于数字签名和验证,会话密钥用于数据加解密和 MAC 运算。
1.3 PKCS#11 标准接口规范
PKCS#11 接口规范由 RSA 实验室发布,是公钥加密标准的一部分,它定义了一套基于加密令牌的编程接口,通过该套接口可以在设备中保存加密信息和执行加密操作。PKCS#11 是一个较底层的编程接口,定义了令牌、会话、槽和对象的概念,用于抽象密码模块的使用过程。其中,令牌用来抽象 TF 卡等密码模块,会话用来抽象应用与密码模块之间的连接,槽用来抽象卡槽或读卡器,对象用来抽象加密公私钥对、签名公私钥对、会话密钥等。根据生命周期的长短,对象分为持久对象和会话对象。持久对象保存在设备的安全区域中,直到应用程序主动删除这些对象。会话对象只存在于运行时建立的特定会话中,一旦会话结束,与之相关的会话对象也被删除。按照访问权限,对象可以分为公开对象和私有对象。公开对象任何用户都可以访问,私有对象只有身份认证通过的用户才可以访问 。基于 PKCS#11 接口实现商用密码模块的逻辑结构如图 3 所示。
图 3 PKCS#11 接口实现商用密码模块的逻辑结构
PKCS#11 遵循简单的基于对象的方法,把公钥技术的设备无关性和资源共享性作为设计的最终目标。它定义了数据对象(或文件对象)、证书对象、密钥对象三种基本对象类型,在设备层面进行访问控制。在PKCS#11 标准中,文件、私钥、公钥、证书都是对象,彼此之间不存在特定关系。PKCS#11 是一套国际化的标准接口, 对商用密码算法标识没有明确定义,因此不同厂商提供的 PKCS#11 接口通常不具有通用性, 即一个厂商提供的 PKCS#11 接口通常不能调用另一个厂商的商用密码模块。
基于 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 接口开发的商用密码模块,在通用性和易用性等方面已不再占有明显优势。
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 的逻辑结构转换模型中, 设备与虚拟应用对象之间建立了唯一的绑定关系,并在虚拟应用(即设备)层面进行访问控制。在逻辑上将文件对象划分到虚拟应用中,建立虚拟应用与文件对象的包含关系,并在虚拟应用层面对文件对象进行管理。在虚拟应用中引入虚拟容器概念,建立虚拟容器与加密公私钥对、虚拟容器与签名公私钥对、虚拟容器与加密证书、虚拟容器与签名证书的逻辑包含关系, 在虚拟容器层面对加密公私钥对、签名公私钥对、加密证书、签名证书进行管理。
商用密码模块接口统一调用框架
基于 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 标准的设备抽象模型,并将其应用到商用密码模块接口统一调用框架中,屏蔽了密码设备的差异,面向应用提供简单易用的接口, 实现了密码应用接口的统一。在工程实践中, 密码模块接口统一调用框架降低了密码应用的门槛,减少了安全应用系统在对接不同厂商、不同标准的密码模块时的重复适配验证工作。
