一、国密算法概述与发展背景
国密算法,全称是“国家商用密码算法”。说白了,就是咱们国家自己制定的一套密码标准。你可能要问:国际上有 AES、RSA 不是挺好用的吗?干嘛还要另搞一套?
我在 2018 年接一个政务项目时,客户明确要求日志数据必须用国密加密。那时候我才意识到,这不仅仅是技术选择——背后是安全自主可控的大逻辑。你想想看,如果关键系统的加密算法依赖国外标准,谁来保证没有后门?
1.1 为什么需要国密算法
国密算法的诞生,有三大驱动力:
- 国家安全:核心领域(金融、政务、通信)必须用自主可控的密码
- 法律合规:密码法、等保 2.0 明确要求重要系统采用国密
- 生态适配:从芯片到应用全链路国产化,密码是基础环节
嗯,这里要注意一点——国密不是凭空造出来的。它借鉴了国际主流密码的设计思想,但是在算法参数、密钥长度、曲线选择上做了自主定义。我见过不少开发人员以为“国密 = 自己发明的新算法”,其实不然。
1.2 发展背景:从颁布到全面落地
国内密码算法的标准化之路,我把它分成四个关键阶段:
| 阶段 | 时间 | 标志事件 |
|---|---|---|
| 萌芽期 | 1999 | SM1 分组密码发布,但仅用于硬件 |
| 标准期 | 2010-2012 | SM2、SM3、SM4 陆续成为国标 |
| 推广期 | 2017-2020 | 密码法出台,等保 2.0 强制要求 |
| 深化期 | 2021-至今 | 全行业替换,国密 + 商用密码改造大规模开展 |
我记得做第一个国密改造项目时,连 SM2 的数字签名库都找不到现成实现,得自己封装。现在好多了,OpenSSL 从 1.1.1 开始原生支持国密,各种语言 SDK 也基本到位。
1.3 国密算法体系速览
日常开发最常打交道的,是下面这四个算法:
- SM2 —— 非对称加密 / 数字签名(对标 RSA/ECDSA)
- SM3 —— 密码杂凑,输出 256 位摘要(对标 SHA-256)
- SM4 —— 对称分组加密,密钥和分组长度都是 128 位(对标 AES)
- SM9 —— 标识密码算法,用用户身份直接做公钥(对标 IBC)
这里我特别想提一句:SM2 用的椭圆曲线是 256 位素域上的一条特定曲线,和 NIST P-256 完全不同。你在实现时千万别混用,否则签名验签一定会失败。这个坑我曾经见过团队踩过。
本节课核心观点:国密不是“替代品”,而是一套独立、完整、与国际接轨的密码体系。它在安全强度上不低于国际主流算法,同时具备法律合规优势。
1.4 国密 vs 国际算法:关键差异
| 维度 | 国密 | 国际 |
|---|---|---|
| 非对称加密 | SM2(256 位椭圆曲线) | RSA-2048 / ECDSA NIST P-256 |
| 摘要长度 | SM3 输出 256 位 | SHA-256 输出 256 位 |
| 对称分组 | SM4 分组 128 位,密钥 128 位 | AES-128/256 |
| 证书格式 | 基于 SM2 的 X.509 证书 | 基于 RSA 的 X.509 证书 |
| 性能 | SM2 签名比 RSA 快;SM4 与 AES 相当 | RSA 解密慢,ECC 签名快 |
实操建议:做日志加密传输时,我个人习惯用 SM4 做对称加密(日志体量大,对称加密快),用 SM2 做密钥协商和签名。你想想看,每条日志都做非对称加密,那性能肯定崩掉。
1.5 国密算法在日志场景的定位
为什么这门课要专门讲“国密 + 日志”?因为日志有两个敏感属性:
- 持久性:日志要存很久,甚至几年,如果密钥泄露,历史日志就要裸奔
- 可审计性:日志需要防篡改,必须带上签名或 MAC
用国密做日志加密,不只是“换个算法”。你还要考虑密钥管理、证书链、合规输出格式。我在一个金融项目中,就因为日志没有按 GM/T 0018 规范存储,被等保检查打了 0 分——那次教训非常深刻。
1.6 本章知识脉络
为了让你对后续 29 章有整体感觉,我画了一张结构图。别小看这张图,它会贯穿整个课程:
这张图里,算法基础、合规标准、工程实现三条线最后都汇聚到“日志加密传输与存储实践”。你后面学的每节课,都能在这张图上找到位置。
1.7 一个小提醒
千万别踩的坑:我曾经见过有人把 SM4 的密钥直接硬编码在代码里,说“反正也是国密,别人看不懂”。别信这个邪!国密算法本身是公开的,密钥管理才是真正的护城河。日志加密的密钥必须做到定期轮换、安全存储、权限隔离——这些我们后面专开一章来讲。