GMSSL

一、GMSSL-3.0.0版本的介绍

GmSSL是一个开源的密码工具箱,支持SM2/SM3/SM4/SM9/ZUC等国密(国家商用密码)算法、SM2国密数字证书及基于SM2证书的SSL/TLS安全通信协议,支持国密硬件密码设备,提供符合国密规范的编程接口与命令行工具,可以用于构建PKI/CA、安全通信、数据加密等符合国密标准的安全应用。GmSSL项目是OpenSSL项目的分支,并与OpenSSL保持接口兼容。因此GmSSL可以替代应用中的OpenSSL组件,并使应用自动具备基于国密的安全能力。GmSSL项目采用对商业应用友好的类BSD开源许可证,开源且可以用于闭源的商业应用。

参考链接:
http://gmssl.org/
https://blog.csdn.net/zyhse/article/details/112350363

二、GMSSL工具包下载

https://gitcode.net/mirrors/guanzhi/gmssl?utm_source=csdn_github_accelerator

三、GMSSL的安装

  • 解压文件gmssl—master.tar.gz,并进入对应目录
    tar -zxvf gmssl—master.tar.gz

  • 使用命令make进行安装

  • 发现没有makefile,只有一个cmakelist.txt

  • 上网进行查询,原来是因为这是3.0版本,使用了cmake指令的文件,我们运行cmake .

  • 继续进行make

  • 进行sudo make install

  • 测试版本gmssl version,发现错误

  • 找不到这个链接库,那我们进行手动链接

  • find / -name libgmssl.so.3

  • ln -s /root/桌面/GmSSL-3.0.0/lib/libgmssl.so.3 /usr/lib64/libgmssl.so.3

  • ln -s /root/桌面/GmSSL-3.0.0/lib/libcrypto.so.3 /usr/lib64/libcrypto.so.3

  • 重新尝试,最终链接成功,显示版本GmSSL-3.0.0

四、GmSSL3.0.0的测试

由于新版本3.0.0的GmSSL与2版本的存在较大差异,网上现有教程基本不可用,甚至官网给出的示例都是2版本的,导致了之前我没使用cmake的错误,只能手动调试。

一、SM2

1 生成SM2公私钥对

  • gmssl sm2keygen -pass 1234 -out sm2.pem -pubout sm2pub.pem

  • 参数:

  1. pass 生成的SM2私钥的加密口令
  2. out 生成的SM2私钥
  3. pubout 生成的SM2公钥

2 使用SM2私钥对文件进行签名

gmssl sm2sign -key sm2.pem -pass 1234 -in data.txt -out sm2.sig

参数:

  • key SM2私钥
  • pass SM2私钥的加密口令
  • id 指定签名使用的的ID(可选项,默认为1234567812345678)
  • in 待签名文件
  • out SM2签名结果

3 使用公钥或者数字证书,对相应数据的SM2签名值进行验签

gmssl sm2verify -pubkey sm2pub.pem -in data.txt -sig sm2.sig

参数:

  • pubkey 公钥
  • cert 数字证书
  • id 签名值使用的ID
  • in 待验证的原始数据
  • sig 待验证的签名值

4 使用SM2公钥或者数字证书对数据进行加密

gmssl sm2encrypt -pubkey sm2pub.pem -in data.txt -out sm2.der
参数:

  • pubkey 公钥
  • cert 数字证书(如果使用数字证书进行数据加密时使用此参数)
  • in 待加密数据
  • out SM2加密结果

5 使用SM2私钥对加密数据进行解密

gmssl sm2decrypt -key sm2.pem -pass 1234 -in sm2.der
参数:

  • key SM2私钥
  • pass SM2私钥口令
  • in 待解密数据
  • out 解密结果

二、SM3

1 计算数据的SM3哈希值

echo -n abc | gmssl sm3

2 使用SM3算法和私钥计算数据的HMAC值

echo -n abc | gmssl sm3hmac -key 11223344556677881122334455667788

这里学习了一下什么是HMAC值,参考链接如下:
HMAC——密钥相关的哈希运算消息认证码

HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code)的缩写,由H.Krawezyk,M.Bellare,R.Canetti于1996年提出的一种基于Hash函数和密钥进行消息认证的方法,并于1997年作为RFC2104被公布,并在IPSec和其他网络协议(如SSL)中得以广泛应用,现在已经成为事实上的Internet安全标准。它可以与任何迭代散列函数捆绑使用。

三、SM4

参数:

  • key SM4加密解密使用的长度为128bit的key,使用16进制表示
  • iv SM4加密使用的IV
  • encrypt 进行加密
  • decrypt 进行解密
  • cbc 使用CBC模式
  • ctr 使用CTR模式
  • in 待加密/解密数据
  • out 加密/解密结果
    首先定义key与iv
KEY=11223344556677881122334455667788
IV=11223344556677881122334455667788

1 使用SM4算法进行加密和解密——使用CBC模式

echo 20201307lcy | gmssl sm4 -cbc -encrypt -key $KEY -iv $IV -out sm4.cbc
gmssl sm4 -cbc -decrypt -key $KEY -iv $IV -in sm4.cbc

2 使用SM4算法进行加密和解密——使用CTR模式

echo 20201307lcy | gmssl sm4 -ctr -encrypt -key $KEY -iv $IV -out sm4.ctr
gmssl sm4 -ctr -decrypt -key $KEY -iv $IV -in sm4.ctr

四、使用ZUC算法进行加密和解密

参数:

  • key ZUC算法使用的长度为128bit的key,使用16进制表示
  • iv ZUC使用的IV
  • in 待加密/解密数据
  • out 加密/解密结果
KEY=11223344556677881122334455667788
IV=11223344556677881122334455667788
echo 20201307 | gmssl zuc -key $KEY -iv $IV -out zuc.bin
gmssl zuc -key $KEY -iv $IV -in zuc.bin

五、SM9算法

1 生成SM9算法的主公钥和主私钥

gmssl sm9setup -alg sm9sign -pass 1234 -out sign_msk.pem -pubout sign_mpk.pem

2 通过主私钥生成用户的SM9密钥

gmssl sm9keygen -alg sm9sign -in sign_msk.pem -inpass 1234 -id alice -out alice.pem -outpass 1234

3 通过用户SM9私钥对数据进行签名

gmssl sm9sign -key alice.pem -pass 1234 -in data.txt  -out hello.sig

4 通过SM9主公钥及用户id对签名值进行验签

gmssl sm9verify -pubmaster sign_mpk.pem -id alice -in data.txt -sig hello.sig

另一种签名验签代码格式:

posted @ 2022-12-03 16:04  20201307梁辰鱼  阅读(1677)  评论(0编辑  收藏  举报