密码学基础:对称加密与非对称加密归纳总结
做密文索引,加密是地基。很多人一上来就纠结「用对称还是非对称」,其实没那么玄乎。我刚开始接触密码学的时候,也觉得这两个概念绕,后来在项目里踩过一次坑才真正搞明白。今天我把自己的理解掰开揉碎讲给你听,保证听完就能上手用。
对称加密:一把钥匙开一把锁
对称加密,说白了就是「加密和解密用同一把钥匙」。你想想看,就像你家里的门锁,你用钥匙锁门,也用同一把钥匙开门。这玩意儿简单、快,特别适合大量数据的加密。
常见的对称算法有:
- AES(Advanced Encryption Standard)——目前最主流的,我个人习惯用 AES-256,安全系数够高。
- DES(Data Encryption Standard)——老古董了,密钥长度只有56位,现在基本被淘汰。我记得以前有个项目还在用 DES,结果安全性审计直接被亮红灯。
- SM4(国密标准)——国内合规场景必须用,性能跟 AES 差不多。
我的经验:对称加密的核心瓶颈不在算法本身,而在密钥分发。你想想,如果加密方和解密方要同享一把钥匙,那这把钥匙怎么安全地传给对方?在密文索引场景里,索引服务器如果拿不到你的密钥,就根本没法解密做查询。这就是很多「密文索引降级」问题的根源。
非对称加密:公钥私钥,各司其职
非对称加密换了个玩法——两把钥匙。一把公钥公开,任意发放;一把私钥自己藏着,打死也不给别人。别人拿公钥加密,只有你能用私钥解密。
常见的非对称算法:
- RSA(Rivest-Shamir-Adleman)——应用最广,但慢。1024位已经不推荐,至少2048位起步。
- ECC(椭圆曲线密码学)——同样的安全强度,密钥更短,速度更快。我做过测试,ECC 256位 ≈ RSA 3072位的安全等级,但运算量只有后者的1/5左右。
- SM2(国密)——基于椭圆曲线,国内合规首选。
非对称加密最大的问题是「慢」。你拿它加密几 KB 的数据还行,要是给整个数据库加密?等着服务器冒烟吧。
避坑指南:我曾经在一个密文查询项目里,直接用非对称加密对全量数据做了逐字段加密。结果查询一条记录需要解密几十次,延迟从毫秒级直接飙到秒级。后来改成「对称加密数据 + 非对称加密对称密钥」的混合方案,才把性能拉回来。记住:非对称只适合加密小数据。
对称 vs 非对称:差异对照
为了让你一眼看清差异,我直接整理了一张表。这表我在培训时经常拿出来讲,很多人看完就明白了。
| 对比维度 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥数量 | 1 把(共享密钥) | 2 把(公钥 + 私钥) |
| 加密速度 | 快(AES 可达 GB/s 级别) | 慢(RSA 通常 MB/s 级别) |
| 安全分发 | 困难,需安全通道传输密钥 | 容易,公钥可公开传播 |
| 典型用途 | 大量数据加密、数据库加密 | 密钥交换、数字签名、身份认证 |
| 密文长度 | ≈ 明文长度 | 大于明文长度(有填充) |
| 密文索引适用性 | 适合做等值查询(可保持索引结构) | 不适合直接索引(无法保持顺序) |
为什么非对称加密不适合直接做密文索引?你想想看,公钥加密后的密文是随机的,同样明文每次都不同(因为有随机填充),数据库没法直接构建 B+ 树或者哈希索引。但对称加密不同,只要固定密钥和 IV,相同明文会得到相同密文——索引就能工作。
实际应用中的典型组合
搞过安全系统的都知道,现实项目几乎没有单独用一种的。最常见的套路就是「混合加密」:
- 生成一个随机的对称密钥(比如 AES-256 密钥)。
- 用这个对称密钥加密你的实际数据(比如整张表)。
- 再用接收方的公钥(RSA/ECC)加密这个对称密钥。
- 把加密后的数据 + 加密后的密钥一起存起来。
这样做的好处很明显:数据加密用高速的对称算法,密钥分发用安全的非对称算法。在密文索引场景里,我们通常把对称密钥交给一个专门的「密钥管理服务」(KMS),查询时先解出对称密钥,再解密索引字段做检索。
核心结论:对称加密是密文索引的「引擎」,非对称加密是「钥匙管理」。前者保性能,后者保安全。缺一不可。
一张图看懂对称与非对称
下面这张图是我自己画的,把两个体系的核心流程和差异可视化了出来。你花30秒扫一眼,比读三大段文字管用。
实际项目中的避坑心得
最后聊几个我踩过的坑,希望能帮你省点时间:
- 别在客户端硬编码对称密钥。我曾经见过有人把 AES 密钥写死在 Java 代码里,结果反编译全完蛋。密钥应该从 KMS 或安全配置中心动态获取。
- 非对称加密不要直接用于大量数据。RSA 一次加密最多只能加密密钥长度减去填充,比如 2048位 RSA 一次最多加密 190字节左右。数据量一大,性能立马崩。
- 索引字段的加密方式决定能否走索引。如果要用密文做等值查询,必须用对称加密且保证确定性(固定 IV)。如果用随机 IV,同样的明文每次密文不同,索引基本废掉。
- 混合加密的密钥生命周期要管好。对称密钥过期了要轮换,轮换时旧数据怎么解密重建索引?这个我在后面「密钥轮换策略」章节会细讲。
嗯,对称加密与非对称加密的基础就这些。看起来道理很简单,但真正落地时全是细节。我们后面几章会逐步深入到具体的密文索引方案里,你会发现,所有方案都绕不开今天讲的这个核心对比——性能与安全的平衡。