第 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 非对称:选哪个?什么时候用?
我经常被问到:「到底该用哪种?」
答案是:两者兼顾。
非对称加密用来安全传递对称密钥,对称加密用来快速加密实际数据。这就是著名的「混合加密」模式。
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 结语
对称加密和非常对称加密,不是谁替代谁的关系。它们是搭档。
你把它们搭配好,整个平台的加密基础就稳了。
好了,这一节就聊到这儿。记住一个原则:密钥要随机、长度要够、模式要带认证、合规不能绕过。