一、相关简介
mToken GM3000
mToken GM3000 国密身份认证锁是龙脉科技自主研发设计支持国密算法、完全遵照国家密码管理局颁布的《智能IC卡及智能密码钥匙密码应用接口规范》要求设计的USB Key,采用国产高性能智能卡芯片,内置SSF33、SM1、SM2、SM3、SM4等国产算法,支持高速数据国密算法加解密,提供CSP以及PKCS11和国密接口,完全符合国家密码管理局关于“密钥不落地”的技术规范要求,是电子政务、电子军务、CA厂商首选的USB Key产品。
SKF接口
SKF接口是国密标准中智能密码钥匙的C语言应用开发接口标准,目前很多国内密码密码设备厂商都为其产品提供了SKF接口的开发包。开发者可以通过统一的SKF接口开发密码应用,访问来自不同设备供应商的USB-Key、TF卡、智能卡等不同形态的密码设备,而无需和某一个设备供应商的专属设备或专属接口绑定。
设备逻辑
一个SKF API设备中可以包含一个或多个应用(Application),每个应用可以包含一个获多个容器(Container),每个容器中可以存放两对分别用于加密和签名的密钥对,以及两个相应的证书或证书链。每一个容器只能为ECC或RSA一种类型,一个容器中不能混用ECC密钥和RSA密钥。因此,在SKF API中提供公钥密码计算的接口通过Container Handle来引用公钥,容器的特性使得应用无需区分签名密钥和加密密钥,SKF API的实现会自动从容器中选择对应类型的密钥。
设备逻辑
开发者在获得密码设备后,首先需要对密码设备进行初始化,如设置密码、生成密钥容器、导入密钥和证书等。目前国内的SKF设备供应商通常不提供具备这些功能的管理工具,开发者需要通过SKF编程接口自行开发所需功能。GmSSL项目通过命令行工具提供了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接口的上述功能,可以完成枚举设备、创建应用和密钥容器,创建签名私钥、导入解密私钥、导入证书等功能。
生成证书实验过程
1.生成SM2密钥对
2.生成SM2自签证书作为根CA
3.生成SM2密钥对
4.生成证书请求CSR
5.用CA进行签名
6.验签
7.生成PKCS12格式的证书文件
二、实验流程图
之后,生成证书请求CSR:
gmssl req -new -key testUserGM.com.key -out testUserGM.com.csr
再后,用一开始生成的CA进行签名:
gmssl ca -in testUserGM.com.csr -out testUserGM.com.crt -cert demoCA/cacertGM.crt -keyfile demoCA/private/cakeyGM.pem
验签:
gmssl verify -verbose -x509_strict -CAfile demoCA/cacertGM.crt testUserGM.crt