国密GMSSL库问题

admin 2026-03-03 06:34:51 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 该文档指出北大开源gmssl库中sm4.py的crypt_cbc函数存在Bug,因bytes拼接逻辑错误导致输出数据翻倍,与标准SM4/CBC不兼容。文中提供了复现代码、原因分析及修复建议。此外,文档深度剖析了SM4算法的非平衡Feistel结构、合成置换及密钥扩展原理,兼具漏洞预警与算法教学意义。 综合评分: 82 文章分类: 漏洞预警,漏洞分析,代码审计,漏洞POC


cover_image

国密GMSSL库问题

原创

teacher李 teacher李

由由学习吧

2026年2月24日 10:56 重庆

SM4算法是中国国家密码管理局发布的商用分组密码算法,采用非平衡Feistel结构,核心设计围绕非线性变换(S盒)线性变换(L函数)的复合置换展开。

北京大学自主开发的国产商用密码开源库的gmssl库的 crypt_cbc 函数存在以下问题:

Bug表现:

  • 输入16字节数据,输出32字节(翻倍)

  • 输入32字节数据,输出48字节

原因:

gmssl/sm4.py 中的实现

def crypt_cbc(self, iv, input_data):

    output_data += self.one_round(self.sk, input_data[i:i + 16])

问题在于 output_data 初始化为 bytes 类型,但 one_round 返回的也是 bytes,两者拼接时行为异常。

验证:

from gmssl import sm4

key = b’0123456789abcdef’ * 2  # 32字节

iv = b’0′ * 16

data = b’hello’  # 5字节

crypt = sm4.CryptSM4()

crypt.set_key(key, sm4.SM4_ENCRYPT)

enc = crypt.crypt_cbc(iv, data)

print(len(enc))  # 输出32,而不是16

影响:与标准SM4/CBC不兼容,导致解密失败。

这是gmssl库本身的bug,需要库作者修复。

以下是其核心原理的深度剖析:

1. 算法核心结构:非平衡Feistel网络

SM4采用32轮迭代的非平衡Feistel结构,每轮处理128位数据(分为4个32位字)。与传统的Feistel结构不同,SM4在每轮迭代中会同时更新多个字,而非仅更新一半数据,这种设计增强了算法的扩散效果。

  • 轮函数(F函数):每轮的核心运算,公式为:

    X_{i+4} = F(X_i, X_{i+1}, X_{i+2}, X_{i+3}, rk_i) = X_i ⊕ T(X_{i+1} ⊕ X_{i+2} ⊕ X_{i+3} ⊕ rk_i)

  • X_i:当前轮的状态字。

  • rk_i:当前轮的轮密钥。

  • T:合成置换函数,是算法的核心变换。

2. 核心变换:合成置换 T

T函数是SM4安全性的基石,由非线性变换 τ和线性变换 L复合而成(T(·) = L(τ(·)))。

2.1 非线性变换 τ(S盒置换)

τ变换负责“混淆”,通过4个并行的8位S盒打乱数据,破坏明文与密文之间的线性关系。

  • 并行结构:将输入的32位字拆分为4个字节,分别通过4个相同的S盒进行独立替换。
  • S盒特性:SM4的S盒是一个固定的8位输入/输出置换表,具备高非线性度、低差分均匀性和高代数复杂度,能有效抵抗差分攻击和线性攻击。

2.2 线性变换 L

L变换负责“扩散”,通过循环左移和异或操作,将S盒输出的非线性特性扩散到整个数据块中。

  • 运算公式L(B) = B ⊕ (B <<< 2) ⊕ (B <<< 10) ⊕ (B <<< 18) ⊕ (B <<< 24)
  • 作用:确保明文或密钥的微小改变(1比特)能引起密文的显著变化(约50%比特改变),即雪崩效应

3. 密钥扩展算法

SM4的密钥扩展同样采用32轮迭代结构,从128位主密钥生成32个32位的轮密钥。

  • 系统参数(FK):用于初始密钥的异或运算,增加密钥的随机性。
  • 固定参数(CK):32个固定字,用于每轮密钥扩展的异或运算。
  • 扩展逻辑:通过递推关系生成轮密钥,确保轮密钥与主密钥之间具有强关联性,防止密钥推导攻击。

4. 解密过程

SM4的解密过程与加密过程结构完全相同,仅需将轮密钥的使用顺序逆序(即解密时使用 rk_31, rk_30, ..., rk_0)。这种设计简化了硬件和软件的实现复杂度


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:由由学习吧 teacher李 teacher李《国密GMSSL库问题》

从某群友感染银狐病毒说起 网络安全文章

从某群友感染银狐病毒说起

文章总结: 文章以群友感染银狐病毒事件切入,分析了针对安全从业者的精准攻击与商业远控软件滥用问题,指出当前防御体系滞后。随后复盘刷单诈骗流程,揭示了黑产上下游分
评论:0   参与:  0