密码引擎-4-国䀄算法交叉测试
Posted 20201206韩进
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了密码引擎-4-国䀄算法交叉测试相关的知识,希望对你有一定的参考价值。
实验内容
0 2人一组,创建一个文件,文件名为小组成员学号,内容为小组成员学号和姓名
1 在Ubuntu中使用OpenSSL用SM4算法加密上述文件,然后用龙脉eKey解密,提交代码和运行结果截图
2 在Ubuntu中基于OpenSSL产生一对公私钥对(SM2算法)
3 在Ubuntu中使用OpenSSL用SM3算法计算上述文件的Hash值,然后用OpenSSL SM2算法计算Hash值的签名,用龙脉eKey进行验签,提交代码和运行结果截图
4 加分项:在Windows中重现上述过程
实验截图
1.在Ubuntu中使用OpenSSL用SM4算法加密上述文件,然后用龙脉eKey解密,提交代码和运行结果截图
2.在Ubuntu中基于OpenSSL产生一对公私钥对(SM2算法)
- 创建EC参数和原始私钥文件
openssl ecparam -out ec_param.pem -name SM2 -param_enc explicit -genkey
- 查看一下EC私钥信息
openssl ecparam -in ec_param.pem -text
- 将原始的私钥文件,转换为pkcs8格式
openssl pkcs8 -topk8 -inform PEM -in ec_param.pem -outform pem -nocrypt -out pri_key_pkcs8.pem
- 利用原始的私钥,生成对应的公钥
openssl ec -in ec_param.pem -pubout -out pub_key.pem
至此SM2的秘钥对已经生成结束,pri_key_pkcs8.pem是SM2私钥,而pub_key.pem是公钥。
3.在Ubuntu中使用OpenSSL用SM3算法计算上述文件的Hash值,然后用OpenSSL SM2算法计算Hash值的签名,用龙脉eKey进行验签,提交代码和运行结果截图
SKF密码设备研究
SKF密码设备研究
密码设备
mToken GM3000 国密身份认证锁是龙脉科技自主研发设计支持国密算法、完全遵照国家密码管理局颁布的《智能IC卡及智能密码钥匙密码应用接口规范》要求设计的USB Key,采用国产高性能智能卡芯片,内置SSF33、SM1、SM2、SM3、SM4等国产算法,支持高速数据国密算法加解密,提供CSP以及PKCS11和国密接口,完全符合国家密码管理局关于“密钥不落地”的技术规范要求,是电子政务、电子军务、CA厂商首选的USB Key产品。
适用范围:主要是用作基于公钥体系PKI的数字证书和私钥的安全载体。
使用目的:学习使用key导入数字证书等功能
SKF密码设备
SKF密码设备使用的是SKF接口,SKF接口是国密标准中智能密码钥匙的C语言应用开发接口标准,目前很多国内密码密码设备厂商都为其产品提供了SKF接口的开发包。开发者可以通过统一的SKF接口开发密码应用,访问来自不同设备供应商的USB-Key、TF卡、智能卡等不同形态的密码设备,而无需和某一个设备供应商的专属设备或专属接口绑定。
GmSSL项目从2.0版本开始,以Engine的方式增加了对SKF设备的完善支持。GmSSL通过在libcrypto密码库中引入SKF框架,实现了对不同厂商SKF设备的支持。通过将SKF接口封装为SKF Engine,使得上层应用和SSL库可以直接通过EVP接口动态调用不同SKF设备。
GmSSL通过ENGINE机制支持密码硬件。鉴于《智能IC卡及智能密码钥匙密码应用接口规范》标准中公布了访问国密硬件的C语言API (下面简称SKF API),GmSSL通过ENGINE机制访问支持国密SKF API的国产密码硬件。一个SKF API设备中可以包含一个或多个应用(Application),每个应用可以包含一个获多个容器(Container),每个容器中可以存放两对分别用于加密和签名的密钥对,以及两个相应的证书或证书链。每一个容器只能为ECC或RSA一种类型,一个容器中不能混用ECC密钥和RSA密钥。
SKF密码设备管理
通过gmssl命令行工具的skf命令可以访问和管理SKF设备,通过gmssl的pkey、pkeyutl和req等命令及SKF引擎可以密码计算、公钥导出、证书生成等功能。我按照文章http://gmssl.org/docs/skf.html所介绍的方法,对mToken GM3000在Linux下进行管理,需要在Linux下先安装mToken GM3000的驱动程序。
dpkg -i LM-mPluginV4-V4.0.0.0.amd64.deb 命令用来安装插件
插件安装成功后,要想进行设备管理,需要获得由厂商提供的针对该类型设备的动态库,这个动态库通常随厂商的开发SDK提供,在Linux操作系统中以so为扩展名,在skf命令中,通过参数-lib指定厂商的SKF动态库。刚开始我并没有找到厂商提供的动态库,在网页中的命令如下:
$ ln -s /path/to/vendors/skf/libSKF.so ./libskf.so
$ gmssl skf -lib ./libskf.so -vendor wisec -listdevs
Device 0 : /media/guanzhi/99E1-9854
其中,-lib
参数用来指定厂商的SKF动态库,在提供的中间件文件夹中mToken-GM3000
中的skf\\api\\linux\\x86
,最后找到了该动态库名为libgm3000.1.0.so
。所以对该动态库进行重命名,用./libskf.so
命名。
查看skf的相关命令gmssl skf -help
后来发现可以使用skf命令查看设备信息等功能
gmssl skf -lib ./libskf.so -vendor wisec -listdevs
![](https://img2018.cnblogs.com/blog/1505758/201906/1505758-20190602183644176-720024748.png)
gmssl skf -lib ./libskf.so -dev $设备名称 -devinfo
![](https://img2018.cnblogs.com/blog/1505758/201906/1505758-20190602183649258-1754193743.png)
进行应用管理的时候包含创建应用、枚举应用、删除应用。首先,我们可以通过-listapps指令枚举指定设备中的应用,普通用户在拿到设备时,可能已经有预先设备好的应用。
gmssl skf -lib ./libskf.so -dev $DEV -authkey $AUTHKEY -listapps
在文档中看到设备认证的流程:
gmssl skf -lib ./libskf.so -dev $DEV -authkey $AUTHKEY -listapps
使用命令查看设备的应用时,出现错误
秘钥容器管理
SKF设备中以密钥容器的方式管理私钥,一个应用中可以建立多个密钥容器,每个密钥容器中可以装载同类型的2对公私钥对,其中一个为签名密钥对,一个为加解密或密钥交换密钥对。签名密钥对只能在SKF设备内部生成而无法由外部导入,而加解密或密钥交换密钥只能从外部导入而无法在设备内部生成。在完成密钥生成或导入后,密钥对中只有公钥可以导出,私钥是无法导出的。密钥容器还支持证书的存储,一个密钥容器中可以存储两个证书或两条证书链,分别对应两个密钥对。
证书生成
用户秘钥及证书生成过程如下:
mkdir demoCA
cd demoCA
mkdir certs crl newcerts private
touch index.txt
od -vAn -N4 -tx1 < /dev/urandom |tr -d ' ' > serial
echo "good" >> testPage.txt
gmssl sm2 -genkey -out private/cakeyGM.pem
生成SM2自签证书作为根CA
gmssl req -new -x509 -key private/cakeyGM.pem -out cacertGM.crt
生成用户SM2密钥对
cd ..
gmssl sm2 -genkey -out wzz.com.key
生成证书请求
gmssl req -new -key wzz.com.key -out wzz.com.csr
利用CA进行签名
sudo gmssl ca -in wzz.com.csr -out wzz.com.crt -cert demoCA/cacertGM.crt -keyfile demoCA/private/cakeyGM.pem
验签
gmssl verify -verbose -x509_strict -CAfile demoCA/cacertGM.crt wzz.com.crt
生成PKCS12格式的证书文件
cd demoCA
sudo gmssl pkcs12 -export -in cacertGM.crt -inkey private/cakeyGM.pem -out wzzRootCA.p12
导入证书
登录管理工具
导入证书,选择刚刚在Linux下生成的证书
可以导入PCKS12格式的证书
最后可以实现安装证书
以上是关于密码引擎-4-国䀄算法交叉测试的主要内容,如果未能解决你的问题,请参考以下文章