第 2 章:密码学基础——对称加密与非对称加密的原理与选择

说到密码学,很多工程师第一反应是敬而远之。

但其实不用怕。你把它想成「一把钥匙,一把锁」就简单多了。

今天我会从对称加密和非对称加密聊起,重点讲你平时会用到的 AES、SM4、RSA、ECC、SM2。

这些算法,我在平台工程里几乎天天打交道。嗯,有些坑也是踩出来的。

2.1 对称加密:加密和解密用同一把钥匙

对称加密,说白了就是加密和解密用同一把密钥。

你想想看,就像你家大门钥匙——谁拿着它,谁就能开门。

效率高,速度快。加密大文件、数据库字段、网络流量,基本都靠它。

2.1.1 AES:国际标准,你绕不过去

AES 是目前最主流的对称加密算法。

我建议你在新项目里直接选用 AES-256-GCM。为什么?

  • AES-256:密钥 256 位,抗暴力破解足够强
  • GCM 模式:自带认证标签,能检测数据是否被篡改

我曾经接手过一个项目,团队用的是 AES-128-CBC。他们没做填充校验,结果换一台机器解密就崩了。后来全部切到 GCM,一次搞定。

我的习惯
对称加密优先选 AES-256-GCM。密钥随机生成,每个加密操作使用唯一的 nonce(随机数)。千万别用 ECB 模式——你会在密文中看到明文轮廓。

2.1.2 SM4:国密标准,国内合规必选

SM4 是中国的对称加密国标。关键词:合规。

如果你做的是政务类、金融类、或者要过等保测评的项目,SM4 基本是硬性要求。

我跟你说一个对比要点:

特性 AES-256 SM4
密钥长度 128 / 192 / 256 bit 128 bit
分组大小 128 bit 128 bit
模式支持 CBC, GCM, CCM 等 ECB, CBC, GCM 等
硬件加速 主流 CPU 均支持 AES-NI 较少原生支持

我在一个政务云项目里做过对比:同等硬件下,AES-256 比 SM4 快约 30%。但合规需求摆在那,SM4 必须上。我的建议是:判断你的项目是否需要过国密评审,需要就用 SM4-GCM,不需要就上 AES-256-GCM。

2.2 非对称加密:加密和解密用不同的钥匙

非对称加密有一套密钥对:公钥公开,私钥自己保管。

你想想看,别人用你的公钥加密数据,只有你的私钥能解开。这就是为什么它适合密钥交换和数字签名。

不过慢是真的慢。平台工程里,我们通常用它做「握手」,对称加密做「传输」。

2.2.1 RSA:老牌经典,但越来越吃力

RSA 诞生于 1977 年,至今仍被广泛使用。但它的安全性依赖大数分解,密钥长度越长,计算越慢。

我以前维护过一个旧系统,RSA-2048 签名一次要花 2 毫秒。听起来不多是吧?但接口 QPS 是 5000,CPU 直接拉满。

避坑提示
RSA-1024 已经不安全。我建议至少用 2048 位,最好直接 3072 或 4096。但别忘了,密钥越长,性能越低。这是你需要在安全与性能之间做的权衡。

2.2.2 ECC:用更短的密钥达到同样的安全强度

ECC(椭圆曲线密码学)是我个人比较偏爱的方案。

它用更短的密钥就能对标 RSA 的安全性。

  • ECC 256 位 ≈ RSA 3072 位
  • ECC 384 位 ≈ RSA 7680 位

你在平台工程中做 JWT 签名时,EC 算法(如 ES256)就比 RS256 快得多,签名更小,带宽节省明显。

记住这个结论
在同等安全强度下,ECC 密钥短、签名小、性能好。如果你不需要兼容老系统,我会优先选 ECC。

2.2.3 SM2:国密的非对称方案

SM2 是基于 ECC 的中国标准。它不是单独一个算法,而是一套体系:包含加密、签名、密钥交换。

国内很多数字证书、身份认证系统已经全面切换到 SM2。

我去年帮一家金融公司做密钥管理系统升级,核心方案就是:SM2 做握手 + SM4 做加密。一条非常清晰的国密路线。

2.3 对称 vs 非对称:选哪个?什么时候用?

我经常被问到:「到底该用哪种?」

答案是:两者兼顾。

非对称加密用来安全传递对称密钥,对称加密用来快速加密实际数据。这就是著名的「混合加密」模式。

对称加密 vs 非对称加密 — 选型对比 对称加密 AES-256-GCM / SM4-GCM 加密 & 解密 = 同一密钥 速度快,适合批量数据 密钥分发是挑战 应用场景:数据加密、数据库加密 非对称加密 RSA-3072 / ECC P-256 / SM2 公钥加密 → 私钥解密 速度慢,适合小量数据 密钥分发更容易 应用场景:密钥交换、数字签名 混合加密工作流 1. 客户端获取服务器公钥 2. 客户端生成随机对称密钥 3. 用公钥加密对称密钥 → 发给服务器 4. 服务器用私钥解密 → 获得对称密钥 5. 双方用对称密钥加密后续数据 速度:快 速度:慢 密钥长度:128或256位 密钥长度:2048~4096位

2.4 实际选型建议

你可能会问:在实际项目中,我到底该怎么选?

我整理了一张速查表,你直接拿去做参考。

场景 推荐算法 原因
数据存储加密(文件/数据库) AES-256-GCM 或 SM4-GCM 速度快,能认证完整性
网络传输(TLS 1.3) ECC P-256 + AES-256-GCM 握手快,加密性能好
国密合规(政务/金融) SM2 + SM4-GCM 通过等保、密评审查
数字签名(JWT / 代码签名) ECC P-384 或 SM2 签名短、效率高
旧系统兼容(遗留服务) RSA-3072 生态成熟,但尽量切到 ECC
一个选择思路
我个人习惯用「安全等级 — 性能 — 合规」三角模型来决策。先把合规要求放在第一位(这是红线),再考虑性能,最后看密钥长度是否满足安全等级。这个思路帮我避过不少坑。

2.5 结语

对称加密和非常对称加密,不是谁替代谁的关系。它们是搭档。

你把它们搭配好,整个平台的加密基础就稳了。

好了,这一节就聊到这儿。记住一个原则:密钥要随机、长度要够、模式要带认证、合规不能绕过。