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
-
参数:
- pass 生成的SM2私钥的加密口令
- out 生成的SM2私钥
- 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
另一种签名验签代码格式:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库