3、对称密钥与非对称密钥:场景选择与边界安全考量

密码改造做到一定深度,你会发现绕不开一个核心问题:什么时候用对称密钥,什么时候用非对称密钥? 这俩东西在边界上到底怎么分工?我个人习惯是把它们看作「门锁」和「门禁系统」的关系——一个负责把门关上锁死,一个负责决定谁能拿到钥匙。

但现实中很多人会把它们混在一起用,或者干脆只认一种。我在项目中遇到过这样的案例:某系统全栈只用 RSA 加密传输数据,结果一条 1M 的消息要加密十几秒,性能直接崩了。反过来,也有团队全部用 AES,结果密钥分发搞成了一锅粥。

所以这一章我带着你把这俩家伙的脾气摸清楚,再看看它们怎么在边界上配合。

对称密钥:快,但共享是个麻烦

说实话,对称密钥在加解密效率上几乎无可匹敌。说白了,它的核心逻辑就是加解密用同一把钥匙。

特性 对称密钥 常见代表
加密速度 极快(硬件加速后可达 GB/s 级别) AES, SM4, ChaCha20
密钥长度 通常 128~256 比特 AES-256, SM4-128
密钥管理 需要安全通道分发密钥 KMS, 密钥协商协议
典型场景 批量数据加密、链路层加密 数据库加密、文件加密

它的优势非常明确。计算开销低,所以适合大量数据的「体量级」加密。你可以想想看:一个视频流每秒几兆的数据,如果每帧都用非对称加密来整,你的 CPU 扛不住的。

避坑小贴士:

我曾经接手过一个项目,他们用 AES-256-ECB 模式来加密数据库的敏感字段。嗯,这里要注意:ECB 模式不能隐藏数据模式。如果原文中有重复块,密文中也会有重复块,攻击者一眼就能看出规律。后来我帮他们改成了 AES-GCM,顺便加上了认证标签——这个我们后面章节会细讲。

非对称密钥:方便,但千万别用它加密大块数据

非对称密钥的巧思在于公钥和私钥分离。你可以把公钥随便贴到墙上,私钥锁在自己保险柜里。这样一来,密钥分发的麻烦就大大降低了。

但代价也很明显——性能差。差到什么程度?我做过一次基准测试:RSA-2048 对 1KB 数据的加密耗时,大概是 AES-256 对 1MB 数据加密耗时的 20 倍以上。所以,用非对称密钥直接加密消息体是个馊主意。

核心原则:非对称密钥只做「钥匙交换」或「数字签名」,不做「内容加密」。
算法 私钥长度 签名/加密速度 典型用途
RSA-2048 2048 位 慢(加密约 1~3 MB/s) 密钥交换、数字签名
ECC (P-256) 256 位 较快(性能约为 RSA 的 5~10 倍) TLS 握手、身份认证
SM2 256 位 与 ECC 类似 国密改造、数字签名

边界安全考量:谁守门,谁看门?

密码改造里,边界安全的核心是通信隧道和数据存储。我建议这么分工:

  1. 通信边界(TLS/IPSec):用非对称密钥做握手和身份认证,用对称密钥加密流量。
  2. 数据存储边界(数据库/文件):直接用对称密钥加密整块数据,非对称只用来保护这个对称密钥。
  3. 身份签名边界:非对称私钥签名,公钥验签;对称密钥在这块基本用不上。

为什么要这样分?你想想看:

  • 通信链路上的数据是「流动的」,每次会话都需要建立信任——这个信任靠非对称完成。但一旦握手结束,大量的报文传输如果还用非对称,那通信就变成了龟速。
  • 存储数据是「静止的」,它的加解密频率远低于通信,而且密钥可以长期持有。所以你完全可以用对称密钥一次性地把整个数据库表加密,再用非对称密钥保护这个对称密钥的备份。
重要提醒: 边界上不要「一把钥匙走天下」。我曾经见过一个系统,所有边界的加密都用同一对 RSA 密钥。这就好比家里大门、卧室门、保险柜门全装一样的锁芯——攻破一个,全线崩溃。建议按照业务域、安全等级、通信方向来切分密钥。

混合加密系统的实战结构

在真实的密码改造项目中,我通常会用这样一套策略:

  1. 使用 ECDH 或 SM2 密钥协商 在双方之间安全地产生一个临时对称密钥。
  2. 使用 AES-256-GCM 或 SM4-GCM 对这个会话进行加密传输。
  3. 使用 RSA-2048 或 SM2 签名 对传输的消息附加数字签名以保证完整性。
  4. 对称密钥仅存在于内存中,不落盘;非对称私钥用 HSM 或 TEE 保护。
一个典型场景: 内部 API 网关与微服务之间通信。网关持有服务证书(非对称),微服务持有根 CA 公钥。握手时用 SM2 签名验证身份,然后协商一个 SM4 临时密钥,后续所有 JSON 报文都用 SM4-GCM 加密传输。这种方式既能保证身份可信,又能保证通信性能,而且规避了密钥分发的难题。

下面是两种密钥在边界上的核心分工图,我建议你保存起来,做架构设计时对着看:

对称密钥 vs 非对称密钥:边界安全分工图 对称密钥(AES/SM4) 非对称密钥(RSA/ECC/SM2) 加密速度极快 适合海量数据加密 硬件加速支持好 AESNI、SM4 硬件指令集 密钥分发困难 需要安全通道交换密钥 典型用途 数据加密、链路加密、磁盘加密 加密速度慢 不适合大数据体 密钥分发方便 公钥公开,私钥保密 计算开销大 加解密耗 CPU 资源 典型用途 密钥交换、数字签名、身份认证 联合使用:非对称负责握手和密钥协商 + 对称负责数据加密

边界实战建议:选择时的三个维度

每次做密码改造决策时,我习惯从三个维度来审视:

  1. 数据体量:如果数据量超过几百 KB,优先选对称密钥加密数据体;非对称只用来加密对称密钥本身。
  2. 身份验证需求:如果需要证明「你是谁」或者「数据有没有被篡改」,只能选非对称数字签名。对称密钥在这里无能为力。
  3. 密钥生命周期:短期会话密钥可以用对称(临时生成用完就销毁);长期根密钥必须用非对称并放到硬件安全模块里。
一句话总结:

对称密钥负责「干粗活」——快速加密大量数据;非对称密钥负责「管钥匙」——安全分发和身份校验。两者互补,协同作战,才能守住边界安全。