深入解析GmSSL中的国密算法SM2、SM3与SM4
随着国家信息安全战略的不断推进,国产密码算法在关键领域的应用日益广泛。GmSSL作为支持国密算法的重要开源密码工具库,集成了SM2椭圆曲线公钥算法、SM3杂凑算法和SM4分组密码算法,为数据加密、数字签名和完整性校验提供了完整的国产化解决方案。本文将深入解析这三大核心算法在GmSSL中的实现机制与应用场景。
一、概述
GMSSL 是一个支持国家密码算法(国密算法) 的开源密码工具库,由中国科学院软件研究所等机构开发,兼容国际密码标准的同时,重点实现了我国自主设计的密码算法(SM 系列),广泛用于国内金融、政务、通信等需符合国家密码标准的领域。
1.1 GMSSL 核心功能
GMSSL 提供了与 OpenSSL 类似的功能,但特别强化了国密算法支持,主要包括:
国密算法实现(SM2/SM3/SM4 等)
证书管理(支持国密标准证书格式)
加密 / 解密、签名 / 验签、密钥交换等密码操作
1.2 核心国密算法(SM2/SM3/SM4)详解
1、SM2:椭圆曲线公钥密码算法
类型:非对称加密算法(公钥密码算法)
作用:替代 RSA、ECC 等国际算法,用于数字签名、密钥交换、公钥加密。
特点:
基于椭圆曲线密码(ECC),密钥长度 256 位(安全强度相当于 RSA 2048 位)。
签名和加密效率优于 RSA,相同安全级别下密钥更短,适合资源受限场景(如嵌入式设备)。
采用国家规定的椭圆曲线参数(SM2p256v1),确保算法合规性。
应用场景:电子签名(如合同签署)、身份认证、密钥协商(如 VPN 密钥交换)。
2、SM3:密码杂凑算法
类型:哈希算法(杂凑函数)
作用:替代 SHA-256 等,用于数据完整性校验、数字签名摘要生成。
特点:
输出固定长度 256 位(32 字节)哈希值。
具备强抗碰撞性(难以找到两个不同数据生成相同哈希值)。
计算效率与 SHA-256 相当,安全性满足国家密码标准。
应用场景:数字签名的摘要计算(与 SM2 配合使用)、数据校验(如文件完整性验证)、区块链交易哈希(部分国产区块链采用)。
3、SM4:分组密码算法
类型:对称加密算法
作用:替代 AES 等,用于敏感数据加密 / 解密。
特点:
分组长度 128 位,密钥长度 128 位,加密模式支持 ECB、CBC、GCM 等。
加密效率与 AES 相当,适合批量数据加密。
算法设计公开,安全性经过严格验证。
应用场景:数据库加密、文件加密、VPN 数据传输加密、政务系统敏感信息保护。
二、核心示例
1、核心示例是指:使用本库文件提供的核心API,开发的基础业务逻辑的演示代码;
2、核心示例的作用是:帮助开发者快速理解如何使用本库,所以核心示例的逻辑都比较简单;

三、常量详解
核心库常量,顾名思义是由 LuatOS 内核固件中定义的、不可重新赋值或修改的固定值,在脚本代码中不需要声明,可直接调用;
每个常量对应的常量取值仅做日志打印时查询使用,不要将这个常量取值用做具体的业务逻辑判断,因为LuatOS内核固件可能会变更每个常量对应的常量取值;
如果用做具体的业务逻辑判断,一旦常量取值发生改变,业务逻辑就会出错;
gmssl核心库没有常量。
四、函数详解
4.1 gmssl.sm2encrypt(pkx,pky,data, mode, mode2)
sm2算法加密
参数
pkx

pky

data

mode

mode2

**返回值 **local encodeStr = gmssl.sm2encrypt(pkx,pky,data, mode, mode2)
encodeStr

示例

4.2 gmssl.sm2decrypt(private,data,mode,mode2)
sm2算法解密
参数
private

data

mode

mode2

返回值 local decryptStr = gmssl.sm2decrypt(private,data,mode,mode2)
decryptStr

示例

4.3 gmssl.sm3(data)
sm3算法,算HASH值
参数
data

**返回值 **local encodeStr = gmssl.sm3(data)
encodeStr

示例

4.4 gmssl.sm3hmac(data, key)
sm3算法,算HASH值,但带HMAC
参数
data

key

返回值 local encodeStr = gmssl.sm3hmac(data, key)
encodeStr

示例

4.5 gmssl.sm4encrypt(mode,padding,originStr,password,iv)
SM4加密算法
参数
mode

padding

originStr

password

iv

返回值 local encodeStr = gmssl.sm4encrypt(mode,padding,originStr,password,iv)
encodeStr

示例

4.6 gmssl.sm4decrypt(mode,padding,encodeStr,password,iv)
SM4解密算法
参数
mode

padding

encodeStr

password

iv

返回值 local encodeStr = gmssl.sm4decrypt(mode,padding,encodeStr,password,iv)
encodeStr

示例

4.7 gmssl.sm2sign(private,data,id)
sm2算法签名
参数
private

data

id

返回值 local sig = gmssl.sm2sign(private,data,id)
sig

示例

4.8 gmssl.sm2verify(pkx, pky, data, id, sig)
sm2算法验签
参数
pkx

pky

data

ids

ig

返回值 local ret = gmssl.sm2verify(pkx, pky, data, id, sig)
ret

示例

4.9 gmssl.sm2keygen()
SM2密钥生成
参数
无
返回值 local pkx, pky, private = gmssl.sm2keygen()
pkx

pky

private

示例

五、模组支持说明
支持LuatOS开发的所有模组都支持gmssl核心库。
今天的内容就分享到这里了~

浙公网安备 33010602011771号