关于国密算法
2025/11/23大约 12 分钟指南国密算法国密信创密码学
关于国密算法
提示
提示:本章要点
- 什么是国密算法
- 信创化与特殊领域应用
- 国密算法 vs 国际标准算法
- 性能差异的根本原因
- 如何选择算法
什么是国密算法
国密算法是指国家密码管理局认定和公布的商用密码算法,是我国自主设计的密码算法体系。主要包括:
| 项目 | 说明 |
|---|---|
| SM2 | 椭圆曲线公钥密码算法 |
| SM3 | 密码杂凑算法 |
| SM4 | 分组密码算法 |
| SM9 | 标识密码算法 |
| ZUC | 祖冲之序列密码算法(用于 4G/5G 通信加密) |
信创化与特殊领域应用
什么是信创
信创(信息技术应用创新)是国家战略,旨在实现信息技术领域的自主可控,摆脱对国外技术的依赖。国密算法是信创体系的重要组成部分。
适用场景
国密算法常见于:政务专网与电子签章、金融支付与清算、医疗健康档案、关键基础设施(能源/交通/通信/工控)、以及需要合规审计的企业内部系统与电子合同平台。
国密算法 vs 国际标准算法
功能对应关系
| 功能 | 国密算法 | 国际标准算法 | 密钥长度 |
|---|---|---|---|
| 非对称加密/签名 | SM2 | RSA / ECDSA | 256位 (SM2) vs 2048位+ (RSA) |
| 哈希/摘要 | SM3 | SHA-256 / SHA-512 | 256位输出 |
| 对称加密 | SM4 | AES | 128位 |
| 流密码 | ZUC | ChaCha20 / RC4 | 128位 |
性能特点对比
SM2 vs RSA
提示
提示:优势
- 密钥更短(256位 vs 2048位),存储和传输更高效
- 签名和验签速度更快
- 相同安全强度下计算量更小
注意
注意:劣势
- 缺乏硬件加速支持(国际芯片)
- 软件实现性能受限于平台
SM3 vs SHA-256
提示
提示:特点
- 安全强度相当(256位输出)
- 算法结构相似,性能接近
注意
注意:特点
- SHA系列在国际芯片上有硬件加速指令(如 Intel SHA-NI)
- SM3 在国产芯片上有专用加速指令
SM4 vs AES
提示
提示:特点
- 同为128位分组密码,安全强度相当
- 算法效率相似
注意
注意:特点
- AES 在国际芯片上有硬件加速(AES-NI)
- SM4 在国产芯片上有专用加速指令
性能差异的根本原因
CPU 硬件加速指令
现代处理器通常内置了密码算法加速指令:
国际芯片(Intel、AMD、ARM)
• AES-NI:AES 加速指令集,性能提升 3-10 倍
• SHA Extensions:SHA-256 加速,性能提升 2-5 倍
• PCLMULQDQ:用于 GCM 模式加速这些指令对国密算法不起作用,导致国密算法在国际芯片上只能用纯软件实现。
国产芯片(飞腾、龙芯、海光、申威)
• SM2 硬件加速单元
• SM3 专用指令
• SM4 加速指令
• ZUC 硬件支持国产芯片针对国密算法优化,可以达到与 AES/SHA 在国际芯片上相当的性能。
安全性与性能的权衡
在密码学中,安全性和性能往往是一对矛盾。选择加密算法和参数时需要根据实际场景权衡:
加密强度与性能
- 更高的安全强度 通常意味着更复杂的计算,这会带来性能开销
| 项目 | 说明 |
|:--|:--|
| 密钥长度增加 | SM2 256位 vs RSA 2048位,虽然密钥更短,但椭圆曲线运算也有其复杂度 |
| 分组模式选择 | GCM 模式提供认证加密但比 ECB 模式慢;CTR 可以并行但需要额外的计数器管理 |
| 填充方式 | PKCS7 填充比 NoPadding 安全,但需要额外的填充操作和填充验证 |
加密与签名的代价
加密和签名操作都有其性能成本:
| 操作类型 | 性能特点 | 适用场景 |
|---|---|---|
| 对称加密 (SM4/AES) | 快速,适合大量数据 | 文件加密、数据传输 |
| 非对称加密 (SM2/RSA) | 较慢,适合小数据量 | 密钥交换、数字信封 |
| 哈希摘要 (SM3/SHA) | 非常快,无法逆向 | 完整性校验、数字指纹 |
| 数字签名 (SM2/RSA) | 慢(签名)/中等(验签) | 身份认证、不可否认 |
实际建议
| 项目 | 说明 |
|---|---|
| 选择合适的算法 | 不要盲目追求最高安全强度,根据数据敏感度选择 |
| 混合使用 | 大数据用对称加密,密钥用非对称加密保护 |
| 批量优化 | 批量签名或验签时考虑并行处理 |
| 缓存策略 | 频繁使用的密钥材料可以缓存(注意安全清理) |
| 硬件加速 | 在支持的平台上充分利用硬件加速指令 |
注意
注意:安全是有代价的
加密和签名操作会带来性能开销,这是保障数据安全的必要成本。在设计系统时,应该在安全性和性能之间找到平衡点,而不是简单地追求极致性能或极致安全。
性能测试数据参考
注意
注意:平台差异
以下数据仅供参考,实际性能取决于具体的硬件平台、软件实现和使用场景。
在 Intel/AMD x86 平台(无国密硬件加速)
- AES 依赖 AES-NI,可比纯软件 SM4 快约 3-10 倍。
- SHA-256 依赖 SHA 指令,可比纯软件 SM3 快约 2-5 倍。
- ZUC/SM2 在无专用指令时均为纯软件路径,性能取决于实现质量。
在国产芯片平台(有国密硬件加速)
- SM4/SM3/SM2/ZUC 通常有专用指令或内置加速,性能可反超软件版 AES/SHA(常见提升 2-5 倍)。
- AES/SHA 若无对应指令,则退化为纯软件,实现间差异更大。
上述倍数为典型量级参考,实际表现取决于芯片型号、编译器优化和具体实现。
如何选择算法
必须使用国密的场景
以下场景强制或强烈推荐使用国密算法:
| 项目 | 说明 |
|---|---|
| 国家政务系统 | 法律法规明确要求 |
| 金融支付系统 | 人民银行和银保监会要求 |
| 关键基础设施 | 国家安全考虑 |
| 国产化替代项目 | 信创要求 |
| 敏感数据保护 | 合规要求 |
可以选择国际算法的场景
以下场景可以灵活选择:
| 项目 | 说明 |
|---|---|
| 国际化应用 | 与国外系统对接 |
| 开源社区项目 | 生态兼容性 |
| 移动应用 | 兼容性和性能平衡 |
| 非敏感数据 | 无特殊合规要求 |
混合使用方案
GMKitX 同时支持国密和国际算法,可以灵活混合使用:
import {
sm2Encrypt, sm3Digest, // 国密算法
sha256, sha512 // 国际算法
} from 'gmkitx';
// 敏感数据用国密
const sensitiveData = sm2Encrypt(publicKey, '敏感信息');
const signature = sm3Digest('重要文件');
// 一般数据用国际标准(兼容性更好)
const checksum = sha256('普通文件内容');
const hash = sha512('日志数据');常见坑(必看)
| 项目 | 说明 |
|---|---|
| SM2 userId 不一致 | 签名/验签必须使用相同 userId;GM/T 0009-2023 推荐 '',库默认仍为 1234567812345678 |
| SM4/GCM IV 长度 | GCM 需 12 字节 IV;CBC/CTR 等为 16 字节;同一密钥下 IV 不能重复 |
| 密文编码 | SM2/SM4/ZUC 输出是 hex/base64 字符串,跨语言时要明确编码 |
| 流密码/CTR 类模式 | ZUC/CTR/GCM 重复 IV 等同重用密钥流,属于高危漏洞 |
法律法规依据
主要法规
| 项目 | 说明 |
|---|---|
| 《中华人民共和国密码法》 | (2020年1月1日施行);明确商用密码的管理和使用要求 |
| 《商用密码应用安全性评估管理办法(试行)》 | 规定关键信息基础设施必须使用商用密码 |
| 《信息安全技术 网络安全等级保护基本要求》(GB/T 22239-2019) | 三级及以上系统推荐使用国密算法 |
行业规范
| 项目 | 说明 |
|---|---|
| 金融行业 | 《证券期货业信息系统密码应用技术要求》 |
| 政务系统 | 《政务信息系统密码应用与安全性评估工作指南》 |
| 电信行业 | 《电信网和互联网安全防护基本要求》 |
未来趋势
| 项目 | 说明 |
|---|---|
| 硬件支持普及 | 国产芯片对国密算法支持日益完善;性能差距逐步缩小 |
| 生态系统建设 | 国密算法库日趋成熟;工具链和开发支持增强 |
| 国际认可度 | SM3/SM4 已被 ISO/IEC 收录;SM2 相关内容处于国际标准化讨论中;国际互通性逐步提升 |
| 应用场景扩展 | 从政务金融向更多行业渗透;物联网、车联网等新兴领域 |
最佳实践建议
1. 评估合规要求
首先确定项目是否有国密算法的强制要求。
2. 考虑部署平台
| 项目 | 说明 |
|---|---|
| 国产平台 | 优先使用国密算法 |
| 国际平台 | 根据性能需求选择 |
| 混合环境 | 灵活搭配使用 |
3. 性能测试
在目标平台上进行实际性能测试,而不是依赖理论数据。
4. 保持兼容性
设计时考虑算法可替换性,便于未来迁移。
5. 持续关注
跟踪国密算法生态发展和硬件支持情况。