Linux + GmSSL/SM9-FREE + SM9
GmSSL
https://github.com/guanzhi/GmSSL
GmSSL的2.x版本的开发始于2016年,目前主分支在功能上实现了对主要国密算法、标准和协议的覆盖,并成功应用于多种互联网场景中。但是随着GmSSL在物联网、区块链等新场景中的应用,及在密码产品合规检测过程中的实践,我们发现应用对GmSSL提出了一些新的需求。由于很难在基于OpenSSL的GmSSL 2.x版本上满足新需求,因此我们重新设计了GmSSL的架构,GmSSL也迎来第三个大版本——GmSSL 3.0。
主要特性
- 超轻量:GmSSL 3.0大幅度降低了内存需求和二进制代码体积,不依赖动态内存,可以用于无操作系统的低功耗嵌入式环境(MCU、SOC等),开发者也可以更容易地将国密算法和SSL协议嵌入到现有的项目中。
- 更合规:GmSSL 3.0 可以配置为仅包含国密算法和国密协议(TLCP协议),依赖GmSSL 的密码应用更容易满足密码产品型号检测的要求,避免由于混杂非国密算法、不安全算法等导致的安全问题和合规问题。
- 更安全:TLS 1.3在安全性和通信延迟上相对之前的TLS协议有巨大的提升,GmSSL 3.0支持TLS 1.3协议和RFC 8998的国密套件。GmSSL 3.0默认支持密钥的加密保护,提升了密码算法的抗侧信道攻击能力。
- 跨平台:GmSSL 3.0更容易跨平台,构建系统不再依赖Perl,默认的CMake构建系统可以容易地和Visual Studio、Android NDK等默认编译工具配合使用,开发者也可以手工编写Makefile在特殊环境中编译、剪裁。
编译与安装
安装cmake
- 去官网下载 https://cmake.org/download/
- 进入目录解压
tar -zxvf cmake-3.24.2-linux-x86_64.tar.gz
cd cmake-3.24.2-linux-x86_64.tar.gz/bin
- 可能要添加环境变量
export PATH=/.../bin:$PATH
- 查看版本
cmake -version
编译与安装gmssl
mkdir build
cd build
cmake ..
make
make test
sudo make install
- 报错
解决方法,软链接
ln -sf /usr/local/lib/libgmssl.so.3 /usr/lib64/libgmssl.so.3
命令行使用
SM9_FREE
https://github.com/songgeng87/SM9_FREE
标识密码算法SM9(IBC)实现,包括密钥生成、签名验签、密钥交换和加解密等SM9标准中提到的所有功能。
该实现基于Miracl密码库
采用C语言编写,可支持X86、X86_64、ARM等多平台编译。
源码关系
Miracl密码库比较庞大,因此只截取出其中最核心的部分,包括大整数运算,Fp,Fp2,Fp4域计算以及Fp和Fp^2上椭圆曲线基础计算等功能。
依赖的所有Miracl密码库文件在文件夹 SM9_FREE/miracl 内。
在 Miracl密码库 基础之上,实现了满足SM9扩域需求的Fp^12和ate-pairing实现,最后在此之上完成了SM9的密钥生成、签名验签、密钥交换和加解密等功能。 所有和SM9相关的文件都在文件夹 SM9_FREE/sm9内。
SM9Test.c文件内是简单的测试用例,同时对性能做了简单的统计。
编译安装
可能要修改makefile,如下
...
test : $(LIB_TARGET) SM9Test.o
SM9Test.o: SM9Test.c
$(CC) -c SM9Test.c -o SM9Test.o
$(CC) $ -o test SM9Test.c $(LIB_TARGET)
rm -f ./*.o
...