SKF密码设备研究

1、 概述

          SKF接口是国密标准中智能密码钥匙的C语言应用开发接口标准,目前不少国内密码密码设备厂商都为其产品提供了SKF接口的开发包。开发者能够经过统一的SKF接口开发密码应用,访问来自不一样设备供应商的USB-Key、TF卡、智能卡等不一样形态的密码设备,而无需和某一个设备供应商的专属设备或专属接口绑定。编程

    然而目前应用开发者开发SKF应用仍然存在一些困难和挑战。首先,SKF是一个底层的密码设备应用开发接口,这个接口不支持数字证书和SSL通讯等面向高层密码应用的功能,对于应用开发者来讲直接使用SKF接口开发密码应用,工做量较大。其次,因为SKF的标准草案和正式公布标准在内容上有一些差别,致使不一样设备厂商的SKF实现存在一些关键性的差别,这些差别致使应用开发者难以从一个设备供应商迁移至另外一个设备供应商,更难以在同一个应用中同时支持来自两个厂商的设备,没法知足典型应用场景的需求。安全

    针对上述问题,GmSSL项目从2.0版本开始,以Engine的方式增长了对SKF设备的完善支持。GmSSL经过在libcrypto密码库中引入SKF框架,实现了对不一样厂商SKF设备的支持。经过将SKF接口封装为SKF Engine,使得上层应用和SSL库能够直接经过EVP接口动态调用不一样SKF设备。GmSSL项目还修改了gmssl命令行工具中全部相关功能,使得enc、dgst、pkeyutl、sm2utl等命令均可以支持SKF引擎,gmssl命令行工具还新增长了skf命令提供SKF设备的管理功能。应用开发者在经过命令行工具完成对SKF设备的初始化以后,能够直接经过SKF引擎为现有的密码应用提供SKF设备的支持,只须要提供一个SKF引擎的配置文件,而几乎无需进行任何代码开发,能够大大节省密码设备开发的工做量。除了SKF引擎以外,GmSSL项目还提供针对PCI-E密码卡和服务器密码机的SDF引擎,应用能够随意选择低成本的SKF密码设备或者高性能、高安全等级的SDF密码设备。服务器

2、设备逻辑

        GmSSL经过ENGINE机制支持密码硬件。鉴于《智能IC卡及智能密码钥匙密码应用接口规范》标准中公布了访问国密硬件的C语言API (下面简称SKF API),GmSSL经过ENGINE机制访问支持国密SKF API的国产密码硬件。框架

    一个SKF API设备中能够包含一个或多个应用(Application),每一个应用能够包含一个获多个容器(Container),每一个容器中能够存放两对分别用于加密和签名的密钥对,以及两个相应的证书或证书链。每个容器只能为ECC或RSA一种类型,一个容器中不能混用ECC密钥和RSA密钥。所以,在SKF API中提供公钥密码计算的接口经过Container Handle来引用公钥,容器的特性使得应用无需区分签名密钥和加密密钥,SKF API的实现会自动从容器中选择对应类型的密钥。工具

    在使用公钥及访问容器时,应用须要进行两级认证,第一级为设备认证,第二级应用认证。设备认证须要全设备惟一的设备认证密钥,设备认证密钥是固定长度的对称密钥。访问某个具体的应用须要提供该应用的专有口令进行认证,认证的口令是可变长度的口令字符串。性能

3、管理工具

      开发者在得到密码设备后,首先须要对密码设备进行初始化,如设置密码、生成密钥容器、导入密钥和证书等。目前国内的SKF设备供应商一般不提供具有这些功能的管理工具,开发者须要经过SKF编程接口自行开发所需功能。GmSSL项目经过命令行工具提供了SKF设备的管理功能,开发者能够利用该工具,编写脚本完成大规模、自动化的SKF设备管理功能。加密

    经过gmssl命令行工具的skf命令能够访问和管理SKF设备,经过gmssl的pkey、pkeyutl和req等命令及SKF引擎能够密码计算、公钥导出、证书生成等功能,本节主要介绍skf命令的功能和用法。SKF接口包含设备管理、应用管理、密钥容器管理、数据对象管理等功能,skf命令封装了SKF接口的上述功能,能够完成枚举设备、建立应用和密钥容器,建立签名私钥、导入解密私钥、导入证书等功能。spa

    因为skf命令是在GmSSL 2.4版本以后加入的,应首先确认当前的GmSSL版本支持skf命令。能够经过-help打印skf命令的全部选项,注意,随着GmSSL版本的演进,skf命令行的选项可能会发生变化。命令行

4、使用GmSSL生成SM2证书

mkdir demoCA3d

cd demoCA

mkdir certs crl newcerts private

touch index.txt

echo "08" >> index.txt

1./*生成SM2密钥对 "cakeyGM.pem"*/

gmssl sm2 -genkey -out private/cakeyGM.pem

 

2./*生成SM2自签证书做为根CA“cacertGM.crt”*/

gmssl req -new -x509 -key private/cakeyGM.pem -out cacertGM.crt

3./*生成SM2密钥对 "uGM.com.pem"*/

cd ..

gmssl sm2 -genkey -out uGM.com.key

4./*生成证书请求CSR*/

gmssl req -new -key uGM.com.key -out uGM.com.csr

5./*用CA进行签名*/

sudo gmssl ca -in uGM.com.csr -out uGM.com.crt -cert demoCA/cacertGM.crt -keyfile demoCA/private/cakeyGM.pem

6./*验签*/

gmssl verify -verbose -x509_strict -CAfile demoCA/cacertGM.crt uGM.com.crt

7./*生成PKCS12格式的证书文件*/

sudo gmssl pkcs12 -export -in cacertGM.crt -inkey private/cakeyGM.pem -out uGMRootCA.p12

5、导入证书

 

一、插入KEY,打开管理工具,认证设备

 

 

二、登录应用

三、建立容器

四、显示证书

相关文章
相关标签/搜索