SKF接口是国密标准中智能密码钥匙的C语言应用开发接口标准,目前不少国内密码密码设备厂商都为其产品提供了SKF接口的开发包。开发者能够经过统一的SKF接口开发密码应用,访问来自不一样设备供应商的USB-Key、TF卡、智能卡等不一样形态的密码设备,而无需和某一个设备供应商的专属设备或专属接口绑定。html
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引擎的配置文件,而几乎无需进行任何代码开发,能够大大节省密码设备开发的工做量。算法
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的实现会自动从容器中选择对应类型的密钥。
在使用公钥及访问容器时,应用须要进行两级认证,第一级为设备认证,第二级应用认证。设备认证须要全设备惟一的设备认证密钥,设备认证密钥是固定长度的对称密钥。访问某个具体的应用须要提供该应用的专有口令进行认证,认证的口令是可变长度的口令字符串。安全
开发者在得到密码设备后,首先须要对密码设备进行初始化,如设置密码、生成密钥容器、导入密钥和证书等。
经过gmssl命令行工具的skf命令能够访问和管理SKF设备,经过gmssl的pkey、pkeyutl和req等命令及SKF引擎能够密码计算、公钥导出、证书生成等功能,本节主要介绍skf命令的功能和用法。SKF接口包含设备管理、应用管理、密钥容器管理、数据对象管理等功能,skf命令封装了SKF接口的上述功能,能够完成枚举设备、建立应用和密钥容器,建立签名私钥、导入解密私钥、导入证书等功能。能够经过-help打印skf命令的全部选项。
框架
设备管理包括枚举设备、打印设备信息、设置设备标签、修改设备认证密钥和发送测试报文等功能。工具
应用管理包含建立应用、枚举应用、删除应用。测试
SKF设备中以密钥容器的方式管理私钥,一个应用中能够创建多个密钥容器,每一个密钥容器中能够装载同类型的2对公私钥对,其中一个为签名密钥对,一个为加解密或密钥交换密钥对。签名密钥对只能在SKF设备内部生成而没法由外部导入,而加解密或密钥交换密钥只能从外部导入而没法在设备内部生成。在完成密钥生成或导入后,密钥对中只有公钥能够导出,私钥是没法导出的。密钥容器还支持证书的存储,一个密钥容器中能够存储两个证书或两条证书链,分别对应两个密钥对。经过skf命令能够完成密钥容器的枚举、建立和删除。加密
SKF应用支持存储若干数据对象,因为应用是受到PIN保护的,所以用户程序能够将须要保护的用户数据、配置文件等安全敏感数据以数据对象的方式保存到SKF设备中。可是因为SKF设备的内部存储空间较小,一般只有几十KB到数百KB,所以只能存储较少数据。经过skf命令能够实现数据对象的枚举、导入、导出和删除。.net
实验环境:Ubuntu1804命令行
gmssl req -new -x509 -key private/cakeyGM.pem -out cacertGM.crt
gmssl sm2 -genkey -out ly.com.key
gmssl req -new -key ly.com.key -out ly.com.csr
sudo gmssl ca -in ly.com.csr -out ly.com.crt -cert demoCA/cacertGM.crt -keyfile demoCA/private/cakeyGM.pem
gmssl verify -verbose -x509_strict -CAfile demoCA/cacertGM.crt ly.com.crt
demoCA
目录下执行sudo gmssl pkcs12 -export -in cacertGM.crt -inkey private/cakeyGM.pem -out lyRootCA.p12
环境:WIN10
KEY型号:mToken-GM30003d