深入解析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、核心示例的作用是:帮助开发者快速理解如何使用本库,所以核心示例的逻辑都比较简单;
image

三、常量详解

核心库常量,顾名思义是由 LuatOS 内核固件中定义的、不可重新赋值或修改的固定值,在脚本代码中不需要声明,可直接调用;

每个常量对应的常量取值仅做日志打印时查询使用,不要将这个常量取值用做具体的业务逻辑判断,因为LuatOS内核固件可能会变更每个常量对应的常量取值;

如果用做具体的业务逻辑判断,一旦常量取值发生改变,业务逻辑就会出错;

gmssl核心库没有常量。

四、函数详解

4.1 gmssl.sm2encrypt(pkx,pky,data, mode, mode2)

sm2算法加密

参数

pkx
image

pky
image

data
image

mode
image

mode2
image

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

encodeStr
image

示例
image

4.2 gmssl.sm2decrypt(private,data,mode,mode2)

sm2算法解密

参数

private
image

data
image

mode
image

mode2
image

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

decryptStr
image

示例
image

4.3 gmssl.sm3(data)

sm3算法,算HASH值

参数

data
image

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

encodeStr
image

示例
image

4.4 gmssl.sm3hmac(data, key)

sm3算法,算HASH值,但带HMAC

参数

data
image

key
image

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

encodeStr
image

示例
image

4.5 gmssl.sm4encrypt(mode,padding,originStr,password,iv)

SM4加密算法

参数

mode
image

padding
image

originStr
image

password
image

iv
image

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

encodeStr
image

示例
image

4.6 gmssl.sm4decrypt(mode,padding,encodeStr,password,iv)

SM4解密算法

参数

mode
image

padding
image

encodeStr
image

password
image

iv
image

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

encodeStr
image

示例
image

4.7 gmssl.sm2sign(private,data,id)

sm2算法签名

参数

private
image

data
image

id
image

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

sig
image

示例
image

4.8 gmssl.sm2verify(pkx, pky, data, id, sig)

sm2算法验签

参数

pkx
image

pky
image

data
image

ids
image

ig
image

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

ret
image

示例
image

4.9 gmssl.sm2keygen()

SM2密钥生成

参数

返回值 local pkx, pky, private = gmssl.sm2keygen()

pkx
image

pky
image

private
image

示例
image

五、模组支持说明

支持LuatOS开发的所有模组都支持gmssl核心库。

今天的内容就分享到这里了~

posted @ 2026-02-12 15:15  合宙LuatOS  阅读(78)  评论(0)    收藏  举报