← 返回知识库

国密算法SM2/SM3/SM4技术入门与实战指南

约 3700 字 | 商用密码 / 国密合规 | 2026-07

为什么要学国密?

2020年1月1日《中华人民共和国密码法》正式实施,商用密码的推广从"建议"变成了"要求"。等保2.0(网络安全等级保护制度2.0)明确规定:三级及以上信息系统应采用密码技术保障数据安全,关键信息基础设施应优先使用国产密码算法。金融行业更是走在前面——人民银行要求2027年前完成金融IC卡和POS终端的国密改造。

SM(ShangMi,商密)系列算法由中国国家密码管理局发布,是被写入国际标准的中国密码体系。其中SM2、SM3、SM4是最核心、应用最广的三个。对智能卡工程师来说,它们是"新的基本功"——就像十年前每个做支付的人都要会 RSA/3DES/SHA-1。

国密算法家族一览

算法类型对标国际密钥/输出长度安全强度状态
SM1分组对称加密AES128 bits等同于 AES-128未公开
SM2椭圆曲线公钥密码ECDSA/ECDH (P-256)私钥 256 bits≥ RSA-3072ISO/IEC 14888-3
SM3密码杂凑(哈希)SHA-256256 bits抗碰撞ISO/IEC 10118-3
SM4分组对称加密AES-128128 bits等同于 AES-128ISO/IEC 18033-3
SM7轻量级对称加密PRESENT128 bits非接触式IC卡
SM9基于标识的公钥密码IBC (Boneh-Franklin)私钥 256 bits≥ RSA-3072ISO/IEC 14888-3
ZUC序列密码(流加密)SNOW 3G128 bits中高4G/5G 通信
注意:SM1 和 SM7 的算法细节未公开,仅以硬件 IP 核形式提供给授权厂商,普通人用不到。SM2/SM3/SM4 是完全公开的,也是日常开发中最常接触的三个。

SM2 — 椭圆曲线公钥密码

数学基础

SM2 基于椭圆曲线 y² = x³ + ax + b (mod p),使用国家密码管理局推荐的 256 位素数域曲线 sm2p256v1。与 NIST P-256 相比,SM2 的曲线参数不同,但安全强度相当——都是 128 位安全级别。

参数SM2 (sm2p256v1)NIST P-256
素数 pFFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFF同上(巧合)
系数 aFFFFFFFE FFFFFFFF ... FFFFFFFCFFFFFFFF 00000001 ... FFFFFFFC
系数 bSM2 自有值NIST 自有值
基点阶 nFFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF 7203DF6B 21C6052B 53BBF409 39D54123不同
国际标准ISO/IEC 14888-3:2018FIPS 186-4

SM2 三大功能

1. 数字签名(对标 ECDSA)

SM2 签名算法基于 SM3 哈希,签名结果为 (r, s),各 32 字节。流程:

与 ECDSA 的关键区别:SM2 的签名公式里有 ZA(用户标识的哈希),也就是说SM2 签名绑定了签名者的身份——这在法律认可和审计追溯场景中非常有用。

2. 密钥交换(对标 ECDH)

SM2 密钥交换协议是一个三回合协议,支持双向密钥确认。输出一个 128 位的共享密钥,可用于后续的 SM4 对称加密会话。

3. 公钥加密(对标 ECIES)

SM2 加密输出 C1‖C2‖C3 三部分:C1 是椭圆曲线点(64 字节)、C2 是密文(与明文等长)、C3 是 SM3 哈希(32 字节)。总开销 = 明文 + 96 字节。

在线体验:卡智通提供 SM2 在线工具,支持密钥对生成、签名/验签、加密/解密,浏览器端计算,密钥不出本地。

SM3 — 密码杂凑算法

算法结构

SM3 采用 Merkle-Damgård 结构,消息分组 512 bits(64 字节),输出 256 bits(32 字节)。处理流程:消息填充 → 消息扩展 → 迭代压缩 → 输出 256 位哈希值。

SM3 的设计与 SHA-256 同源(都借鉴了 MD5/SHA-1 的迭代结构),但在消息扩展和压缩函数中加入了额外的扩散混合——这使得 SM3 在部分安全性指标上略优于 SHA-256,例如抗长度扩展攻击。

SM3 与 SHA-256 对比

特性SM3SHA-256
输出长度256 bits256 bits
分组大小512 bits512 bits
压缩轮数64 轮64 轮
消息扩展W₀...W₆₇ + W'₀...W'₆₃ (132 个字)W₀...W₆₃ (64 个字)
字节序大端序(Big-Endian)大端序(Big-Endian)
国际标准ISO/IEC 10118-3:2018FIPS 180-4
硬件效率约 15K 等效门(ASIC)约 12K 等效门

SM3 已在智能卡芯片中广泛实现。银行卡的脱机数据认证中,SM3 可用于替代 SHA-1 对静态/动态数据进行哈希。在 Hash 在线计算器中可以体验 SM3 的输出。

SM4 — 分组对称加密

算法参数

参数SM4AES-128
分组长度128 bits (16 bytes)128 bits
密钥长度128 bits (16 bytes)128 bits
轮数32 轮10 轮
S 盒8×8 非线性置换(固定)8×8 非线性置换(基于 GF(2⁸) 逆元)
结构非平衡 Feistel 网络SPN(代换-置换网络)
工作模式ECB/CBC/CFB/OFB/CTR/GCM同左
国际标准ISO/IEC 18033-3:2010FIPS 197
ASIC 面积约 3K~5K 等效门约 3K~4K 等效门

SM4 采用非平衡 Feistel 结构(32 轮),比 AES 的 10 轮多得多。这不是因为 SM4 的每轮更弱——恰恰相反,Feistel 网络里每轮的扩散程度不如 SPN,所以需要更多轮来达到同等的混淆和扩散效果。

一个典型的 SM4-CBC 加密场景:

密钥:   0123456789ABCDEF FEDCBA9876543210  (16 bytes, 两端均可)
IV:     0000000000000000 0000000000000000  (16 bytes, 全零)
明文:   "国密算法SM4加密测试"  (UTF-8 编码)
密文:   (使用 AES/SM4 对称加密工具可在线计算)
卡智通 对称加密在线工具 同时支持 AES-256-CBC 和 SM4-CBC 两种模式,可以在同一个界面下对比两者的密文输出。

等保 2.0 与密码法的合规要求

对于智能卡行业的工程师,以下三条是最需要知道的合规事实:

  1. 等保三级及以上系统"应"采用密码技术——这里的"应"是强制要求。密码技术包括身份鉴别、访问控制、数据传输加密、数据存储加密、安全审计日志保护。
  2. 关键信息基础设施运营者(CIIO)"应当"使用商用密码——金融、能源、交通、政务等领域的企业必须推进国密改造。时间紧。
  3. 密码产品必须取得认证——商用密码产品(含金融IC卡、POS终端、密码键盘)需要通过国家密码管理局的检测认证才能上市销售。

金融国密改造路线图

人民银行在金融科技发展规划中明确:

这意味着未来 5 年内,中国所有智能卡相关产品都需要完成双算法(国际 + 国密)支持。对工程师来说,现在开始学习 SM2/SM3/SM4,不是"锦上添花",是"雪中送炭"。

国密证书与国密 SSL

国密算法需要配套的 PKI 体系——不能拿 RSA 证书去保护 SM2 签名。目前国密证书的格式遵循 GM/T 0015(基于 SM2 的数字证书格式),与国际 X.509(基于 RSA/ECDSA)并行存在。

在实际部署中,通常会部署双证书(一个 RSA 国际证书 + 一个 SM2 国密证书),通过国密 SSL 网关实现自适应协商——浏览器支持国密就走国密,不支持就走 RSA。这就是所谓的"国密 SSL 单端口双算法"方案。

相关工具:国密算法在线计算

🔑 SM2 国密工具 🔒 SM4/AES 对称加密 🔐 SM3/Hash 计算器 📜 X.509 证书解析 🔐 非对称加解密