1. 国密算法概述:SM2/SM3/SM4 算法原理、国密与国际算法对比、国密合规性要求

各位好,我是老张。做密码学工程十几年了,今天咱们聊聊国密算法。

说实话,刚接触国密那会儿,我也觉得不就是把 RSA 换成 SM2、把 SHA-256 换成 SM3 嘛。后来踩了几个坑才明白——国密不是简单的算法替换,而是一整套密码体系。你想想看,从密钥生成、签名验签、加密解密到证书管理,每个环节都有自己的一套玩法。

1.1 SM2 椭圆曲线公钥密码算法

SM2 是我国自主设计的椭圆曲线公钥密码算法,2010 年发布,2016 年成为国家标准(GB/T 32918)。它主要干三件事:数字签名、密钥交换、公钥加密。

核心参数速览

  • 曲线方程:y² = x³ + ax + b(素数域 256 位椭圆曲线)
  • 推荐曲线:sm2p256v1
  • 密钥长度:256 位(公钥 64 字节,私钥 32 字节)
  • 签名长度:64 字节(r || s)
  • 安全强度:128 位(与 3072 位 RSA 相当)

我个人习惯把 SM2 和 ECDSA 放在一起对比。SM2 的签名算法其实是在 ECDSA 基础上做了改进——增加了用户标识 Z 值的计算。什么意思呢?就是签名的时候把签名者的身份信息也揉进去了,防止签名被挪用到别的场景。

避坑指南

我曾经在对接某政务系统时,发现对方 SM2 签名验签总失败。查了两天才找到原因——Z 值计算时用户标识 ID 的编码方式不一致。一方用了 UTF-8,另一方用了 GBK。嗯,这种坑,你遇到了就知道有多头疼。

1.2 SM3 密码杂凑算法

SM3 是国密标准的哈希算法,2010 年发布,2016 年成为国家标准(GB/T 32905)。输出 256 位(32 字节)的杂凑值。

说白了,SM3 就是咱们国密体系里的"指纹生成器"。你给它任意长度的数据,它给你一个固定长度的摘要。SM3 的设计借鉴了 SHA-256 的框架,但做了不少改进——消息扩展更复杂、压缩函数轮数更多(64 轮 vs SHA-256 的 64 轮但结构不同)。

对比项 SM3 SHA-256
输出长度 256 位 256 位
消息分组 512 位 512 位
压缩函数轮数 64 轮 64 轮
消息扩展 132 字 64 字
安全强度 128 位 128 位

我在项目中做过 SM3 和 SHA-256 的性能对比。在同样的硬件环境下,SM3 比 SHA-256 慢大概 10%-15%。但说实话,对于大多数业务场景,这个差距完全可以接受。而且 SM3 在抗碰撞攻击方面表现更稳健——它的消息扩展机制让攻击者更难找到碰撞。

1.3 SM4 分组密码算法

SM4 是国密标准的分组对称加密算法,2006 年发布,2016 年成为国家标准(GB/T 32907)。密钥长度 128 位,分组长度 128 位,采用 32 轮非线性迭代结构。

我刚开始用 SM4 的时候,总觉得它跟 AES 差不多。后来仔细研究才发现——SM4 的 S 盒设计、密钥扩展算法、轮函数结构都跟 AES 完全不同。SM4 用的是 Feistel 结构变体,加解密过程基本一致,只是轮密钥的使用顺序相反。

重要提醒

SM4 有五种工作模式:ECB、CBC、CFB、OFB、CTR。我个人强烈建议:生产环境不要用 ECB 模式。我曾经审计过一个项目,对方用 SM4-ECB 加密用户身份证号,结果相同身份证号加密后密文一模一样——这跟没加密有啥区别?

1.4 国密与国际算法对比

咱们做个全面的对比,方便你理解国密算法在国际密码体系中的位置。

功能 国密算法 国际算法 关键差异
公钥加密/签名 SM2 RSA / ECDSA SM2 基于椭圆曲线,密钥更短;签名含 Z 值防重用
哈希 SM3 SHA-256 SM3 消息扩展更复杂,抗碰撞性更强
对称加密 SM4 AES SM4 用 Feistel 结构,AES 用 SPN 结构
密钥长度 SM2: 256 位
SM4: 128 位
RSA: 2048+ 位
AES: 128/256 位
SM2 密钥远短于 RSA,同等安全强度

你可能会问:国密算法安全吗?我的回答是:经过国家密码管理局审查和国内外密码学界的分析,SM2/SM3/SM4 目前没有发现有效的攻击方法。它们的设计都经过了严格的论证和测试。

1.5 国密合规性要求

这部分是重点,也是很多同学容易忽略的。国密合规不是技术问题,是法律问题。

根据《中华人民共和国密码法》和《商用密码管理条例》,以下场景必须使用国密算法:

  • 电子政务系统:政府网站、政务服务平台、电子公文系统
  • 金融核心系统:网上银行、支付清算、证券交易
  • 关键信息基础设施:能源、交通、医疗、教育等领域
  • 等保三级及以上系统:等保测评中密码应用安全是必测项

合规检查清单(我总结的)

  1. 算法合规:必须使用 SM2/SM3/SM4 等国密标准算法
  2. 证书合规:必须使用国密 SSL 证书(SM2 证书)
  3. 密钥管理合规:密钥生成、存储、分发、销毁必须符合 GM/T 0054 要求
  4. 密码产品合规:使用的密码机、密码卡必须具有《商用密码产品认证证书》
  5. 测评合规:通过商用密码应用安全性评估(密评)

我曾经帮一家银行做国密改造。他们原来用 RSA 证书做网上银行的 HTTPS,密评的时候直接被判不合格。后来我们花了三个月,把整个 TLS 握手流程从 RSA 改成 SM2,证书体系也全部重建。嗯,那段时间真是加班加到吐。

经验之谈

国密改造最容易被忽视的是密钥生命周期管理。很多团队只关注算法替换,忘了密钥的生成、存储、备份、轮换、销毁这些环节。我建议你在项目初期就规划好密钥管理方案,不然后面补起来成本极高。

1.6 国密算法知识体系总览

下面这张图是我自己整理的国密算法知识体系,涵盖了算法、证书、密钥管理和合规四个维度。你可以把它当作学习路线图。

国密算法知识体系总览 国密算法体系 算法层 证书层 密钥管理层 合规层 SM2 SM3 SM4 SM2 证书 国密 SSL 证书链 密钥生成 密钥存储 密钥轮换 密码法 密评 等保 四层体系:算法 → 证书 → 密钥管理 → 合规

这张图把国密体系分成了四层。咱们这门课会按照这个结构展开:先讲算法原理,再讲证书配置,然后是密钥管理实战,最后是合规落地。每一层都有对应的实操内容。

好了,第一章就到这里。记住一句话:国密不是选择题,是必答题。后面咱们会一步步把每个环节都讲透。