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 托管 | 密钥调用与权限记录 |
| 字段加密范围 | 仅加密确需保护的字段 | 字段清单与加密配置 |
字段级加密要同时考虑检索与统计需求:加密后的字段无法直接检索与排序,设计阶段就要确定是否保留索引列或采用确定性方案,避免上线后再改表。