关于 SM4
SM4 是中国国家密码管理局公布的分组密码算法,块大小 128 位,密钥长度 128 位。SM4 被广泛应用于国密标准生态,如 SM TLS/SSL、WAPI 无线局域网安全、电子政务与金融行业的合规加密等。
与 AES 的联系与区别
- 共同点:
- 都是 128 位分组密码;支持常见模式(ECB/CBC 等)与标准填充(PKCS#5/7)。
- 在实现与使用方式上高度相似:需要密钥(Key)、可选的初始化向量(IV)、选择模式与填充后对明文分块处理。
- 不同点:
- 标准与生态:AES 属于国际标准(FIPS 197),全球通用;SM4 属于中国国家密码标准(GM/T 系列),用于满足本地合规与监管要求。
- 密钥长度:AES 支持 128/192/256 位;SM4 固定为 128 位。
- 性能与硬件支持:现代 CPU/GPU 对 AES 有更广泛的硬件加速支持;SM4 的硬件加速支持正在逐步完善,视具体平台而定。
- 合规性:在中国境内/面向中国业务场景,往往需要使用 SM4 以满足“国密”合规;跨国/通用场景更常用 AES。
ECB 与 CBC 模式对比
| 项目 |
ECB |
CBC |
| 是否使用 IV |
否 |
是(16 字节) |
| 错误传播 |
无 |
有(块级传播) |
| 并行性 |
高(可并行) |
低(链式依赖) |
| 安全性 |
低(泄露数据结构) |
高(推荐) |
| 典型用途 |
随机数据、测试 |
实际业务数据加密 |
- ECB:每个 16 字节块独立加密,会泄露数据结构,不推荐用于结构化/重复性强的数据。
- CBC:使用随机且不可复用的 16 字节 IV,将相邻块链接,能有效掩盖模式特征,业务场景更安全可靠。
填充与对齐
- PKCS#5/PKCS#7:自动补齐至 16 字节倍数,适用于绝大多数文本与二进制数据。
- NoPadding:不做填充,明文/密文长度必须是 16 字节的倍数;适用于已经对齐的数据或自定义协议。
使用建议
- 模式选择:优先使用 CBC,避免 ECB 处理结构化数据。
- IV 管理:CBC 的 IV 必须是加密安全随机数,且每次加密唯一且不可复用。
- 密钥生成:使用安全随机数生成 128 位密钥;避免弱口令/可预测键值。
- 输出格式:密文可用 HEX 或 Base64 表达;跨系统传输推荐 Base64。
- 合规考量:在中国境内或涉及国密合规的系统,优先使用 SM4;跨国或国际生态场景则以 AES 为主。