首页/安全/等保与合规速查/SM4 分组密码算法:加密与工作模式
密码与认证合规50 条

SM4 分组密码算法:加密与工作模式

SM4 是我国分组密码算法(GB/T 32907-2016):128 位分组、128 位密钥,用于数据机密性保护,支持 ECB、CBC、CTR、GCM 等模式,实践中避免 ECB。

等保与合规速查安全更新于 2026-10-13

SM4 是什么

SM4 是我国分组密码算法,标准 GB/T 32907-2016:分组长度与密钥长度均为 128 位,用于数据机密性保护,支持 ECB、CBC、CTR、GCM 等模式。实践中应避免 ECB,因为相同明文块会产生相同密文,泄露数据结构。典型用途包括存储加密、字段级加密、链路加密与密码模块内部运算,随机数与密钥的管理同样关键。

基本信息

标准GB/T 32907-2016
参数分组 128 位、密钥 128 位
模式ECB、CBC、CTR、GCM 等(按场景选择)
场景链路加密、存储加密、字段级加密、密码模块内部
禁止做法业务默认使用 ECB
配套要求随机 IV/Nonce、密钥由密码模块或 KMS 管理

典型使用场景

  • 数据库字段级加密与敏感数据保护
  • 文件与备份的存储加密
  • 与其他系统之间的加密通道建设
  • 密码机或密码模块的算法能力核对
  • 密评整改中的算法合规替换

OpenSSL 命令行 SM4-CBC

OpenSSL 命令行 SM4-CBC
# 加密:使用 SM4-CBC 与口令派生密钥(pbkdf2)
openssl enc -sm4-cbc -pbkdf2 -in plain.txt -out data.enc
# 解密:还原明文
openssl enc -d -sm4-cbc -pbkdf2 -in data.enc -out plain.txt
# 查看本机 OpenSSL 支持的 SM4 模式
openssl list -cipher-algorithms | grep -i sm4

模式选择

模式特点适用场景
ECB相同明文块产生相同密文仅限单块固定数据,业务慎用
CBC需要随机 IV,串行加密文件与批量数据加密
CTR流式加密,可并行大文件与流数据
GCM加密同时提供完整性校验网络传输与消息保护
ECB 模式在相同明文块下产生相同密文,会泄露数据结构,不应作为业务默认选择。
GCM 的随机数绝不重复使用:同一密钥下重用 Nonce 会破坏机密性与完整性,建议由密码模块统一生成并记录。

加密设计要点

要点做法留证
模式选择按数据形态选 CBC 或 GCM设计说明与参数记录
随机数管理每次加密生成新 IV 或 Nonce生成接口与日志
密钥保护由密码模块或 KMS 托管密钥调用与权限记录
字段加密范围仅加密确需保护的字段字段清单与加密配置
字段级加密要同时考虑检索与统计需求:加密后的字段无法直接检索与排序,设计阶段就要确定是否保留索引列或采用确定性方案,避免上线后再改表。

易错点

  • IV 或 Nonce 复用:CBC 需要随机 IV,GCM 绝不能重复随机数
  • 密钥硬编码在代码或配置:密钥应进 KMS 或密码机管理
  • 用 ECB 处理结构化数据:密文可被比对分析
  • 只做加密不做完整性保护:建议选 GCM 或额外加校验

数据来源与参考

  • GB/T 32907-2016《信息安全技术 SM4 分组密码算法》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌