一、国密算法概述与发展背景

国密算法,全称是“国家商用密码算法”。说白了,就是咱们国家自己制定的一套密码标准。你可能要问:国际上有 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 章有整体感觉,我画了一张结构图。别小看这张图,它会贯穿整个课程:

国密算法日志加密实践 · 知识体系 国密算法概述 算法基础 合规与标准 工程实现 SM2/SM3/SM4 密钥长度 密码法/等保 GM/T 规范 日志加密 证书管理 日志加密传输 & 存储实践 课程覆盖范围 SM2/SM3/SM4 具体实现 · 日志加密结构设计 · 密钥生命周期 · 合规审计

这张图里,算法基础、合规标准、工程实现三条线最后都汇聚到“日志加密传输与存储实践”。你后面学的每节课,都能在这张图上找到位置。

1.7 一个小提醒

千万别踩的坑:我曾经见过有人把 SM4 的密钥直接硬编码在代码里,说“反正也是国密,别人看不懂”。别信这个邪!国密算法本身是公开的,密钥管理才是真正的护城河。日志加密的密钥必须做到定期轮换、安全存储、权限隔离——这些我们后面专开一章来讲。