一、国密算法概述

国密算法,说白了就是咱们国家自己制定的密码标准。我刚开始接触时也疑惑过——国际算法(比如 RSA、AES)用得好好的,为什么非要另起一套?直到后来做了几个政务和金融项目,才真正明白“自主可控”不是喊口号,是实实在在的安全底线。

1.1 三大核心算法

国密标准里最常用的就三个:SM2(公钥密码)、SM3(密码杂凑)、SM4(分组密码)。你想想看,它们正好对应了传统加密体系里的非对称、哈希和对称加密。我在项目中经常把它们比喻成“钥匙+指纹+保险箱”的组合。

三大国密算法核心对比
算法 类型 密钥长度 典型用途
SM2 椭圆曲线公钥密码 256 位 数字签名、密钥交换、加密
SM3 密码杂凑 256 位输出 完整性校验、数字摘要
SM4 分组对称密码 128 位 数据加密、链路加密

1.2 SM2 — 非对称主力

SM2 基于椭圆曲线,性能和安全性对标国际的 ECDSA(甚至某些指标更优)。我记得有次给一个电子政务平台做签名验签,对方原先用 RSA 2048,换成 SM2 后签名生成时间缩短了近 40%。嗯,这里要提醒一点:SM2 的密钥对生成时一定要检查曲线参数,我遇到过几位同事直接从网上复制不完整的 SM2 参数,结果签名验证死活通不过。

避坑小贴士: SM2 公钥包含两个部分(x,y 坐标),很多 SDK 默认只取一个坐标当作公钥——这是错的。我曾经因为这个 bug 排查了两天。

1.3 SM3 — 国标哈希

SM3 的输出是 256 位,结构与 SHA-256 类似,但内部轮函数做了针对性强化。为什么需要自己的哈希?说白了,防止哈希算法被植入后门。我在零信任架构项目里,把交易完整性校验从 SHA-256 切到 SM3,设备端几乎无感,性能差异在 5% 以内。

  • 应用场景:数字证书指纹、签名前的摘要生成、区块链交易哈希。
  • 注意:SM3 的初始值 (IV) 是固定公开的,不要自己篡改——我之前见过有人想“增强”安全性,改了 IV 导致和其他系统无法互认。

1.4 SM4 — 对称加密老将

SM4 是 128 位分组密码,轮数是 32 轮,比 AES 多一倍,但硬件实现效率很高。你想想看,物联网设备电池紧张时,用 SM4 比用 AES 省电?其实不一定,但国内很多芯片厂商已经内置了 SM4 指令集,跑起来比软件实现 AES 快得多。我做过一个车联网安关测试,SM4 硬件加速下加解密吞吐达到 2.3 Gbps,完全压不垮。

⚠️ 经验教训: SM4 的密钥长度固定 128 位,且没有类似 AES-256 的变体。如果项目要求 256 位对称加密,不要硬套 SM4——我没见过任何官方标准支持 256 位 SM4。要么换算法,要么接受 128 位安全强度。

1.5 应用场景快速归纳

我把它们在真实项目中的分工整理成下面这张表格,方便你选型时参考。

场景 推荐算法 实际案例(我经历的)
HTTPS 双向认证 SM2 + SM3 某省政务云,证书链全部替换为国密
数据库列加密 SM4(CBC/CTR) 金融敏感字段加密,兼容硬加密卡
文件完整性校验 SM3 OTA 升级包校验,防固件被篡改
即时消息加密 SM4 + SM2 密钥交换 企事业内部 IM,端到端加密
区块链签名 SM2 签名 联盟链身份认证,共识节点签名

1.6 知识体系结构图

下面这张图梳理了三个算法的关系以及它们在容器化部署中常见的定位。做课程设计时我习惯先画一张总图,不然学到最后容易乱。

国密算法知识体系 国密算法体系 SM2(公钥密码) SM3(密码杂凑) SM4(对称密码) 签名/密钥交换 证书机 完整性校验 数字摘要 数据加密 链路加密 容器化部署时:SM2/3/4 均已有 OpenSSL 引擎或原生库 建议将算法库封装为独立 sidecar 容器

🔑 核心思路: 三个算法不是割裂的,实际项目中往往是 SM2 + SM3 做身份认证,SM4 做数据传输加密。我在容器化部署时喜欢把 SM2 和 SM3 放一个 sidecar,SM4 单独立一个,避免密钥混合带来的安全风险。

1.7 小结

好了,第一张图基本把国密的三个“兄弟”说清楚了。我个人习惯在学任何新技术前,先搞懂它的“生态位”——为什么存在?替代谁?怎么落地?后面我们会逐个深入它们的算法细节和容器化方案,但基础概念一定要先打牢。

嗯,这一节就到这里。你想想看,如果今天要用容器跑 SM2 签名服务,你至少知道它属于非对称,需要椭圆曲线参数,和 SM3 配合做摘要——对吧?够了。