加密技术基础:对称加密与非对称加密
加密这事,听起来挺玄乎,其实说白了就是——把数据变成别人看不懂的乱码,再用钥匙把它变回去。我在云安全领域摸爬滚打这些年,最深的感受是:很多人分不清对称和非对称到底该怎么用,结果不是性能扛不住,就是安全留了个大窟窿。这一章,我们就先把底子打扎实。
对称加密——一把钥匙开一把锁
对称加密,用的是一把密钥完成加密和解密。就像你用一把钥匙锁上门,同一把钥匙再打开它。速度快是它的最大优势。
核心思想:加解密共用同一密钥。
- 加密:
密文 = E(密钥, 明文) - 解密:
明文 = D(密钥, 密文)
常见的对称加密算法
| 算法 | 密钥长度 | 优点 | 缺点 |
|---|---|---|---|
| AES | 128/192/256 bit | 速度快,硬件加速多 | 密钥分发困难 |
| ChaCha20 | 256 bit | 移动端性能优异 | 普及度相对低 |
| SM4 | 128 bit | 国标,国内合规 | 国际通用性差 |
| DES(已弃用) | 56 bit | 历史教材常见 | 暴力破解只需几天 |
我在项目中遇到过一个坑:客户直接用 DES 加密用户密码的数据库字段,还觉得够安全。我赶紧让他们换到 AES-256。你想想看,56位密钥长度在今天的算力面前跟纸糊的没什么区别。
⚠ 关键注意:对称加密的最大瓶颈不是算法本身,而是密钥分发。如果密钥通过网络传输,中途被人截获,整个加密体系就崩了。
非对称加密——公钥和私钥双保险
非对称加密解决了密钥分发问题。它用一对密钥:公钥随便给别人,私钥自己藏好。公钥加密的只有私钥能解,私钥签名的只有公钥能验。
我的经验:非对称加密的速度比对称加密慢几百到几千倍,但不代表它不重要。它最擅长的场景是:握手阶段协商对称密钥,或者做数字签名。
常见的非对称加密算法
| 算法 | 典型密钥长度 | 应用场景 | 性能 |
|---|---|---|---|
| RSA | 2048/4096 bit | 密钥交换、数字签名 | 慢 |
| ECC(椭圆曲线) | 256 bit(等价于RSA 3072) | 移动端、证书签发 | 比RSA快很多 |
| SM2 | 256 bit | 国密合规场景 | 中等 |
| Ed25519 | 256 bit | 现代签名 | 极快 |
为什么 RSA 到现在还有大量应用?因为历史久、兼容性好。但说实话,我个人习惯在新建系统里直接上 ECC 或 Ed25519。同等安全强度下,密钥更短,加解密更快,而且签名体积也小。
⚠ 我曾经踩过的一个坑:在 IoT 设备上用 RSA-4096 做签名校验,结果每次验签耗时超过 2 秒,电池直接崩了。后来换成 ECDSA with P-256,耗时降到几十毫秒。性能差距就是这么明显。
对称 vs 非对称:到底怎么选?
没有哪个是万能的。实际工程里,两者通常是组合使用:
- 建立连接时,用非对称加密安全地交换一个临时对称密钥(比如通过 TLS 握手)。
- 数据传输时,用对称加密加密大量数据,效率和安全性兼顾。
- 身份验证时,用非对称加密做数字签名,确保来源不可抵赖。
一句话总结:非对称管“握手和签名”,对称管“干活和传输”。
应用场景速览
| 场景 | 推荐方案 | 为什么 |
|---|---|---|
| HTTPS/TLS | 非对称握手 + 对称加密数据 | 速度和安全的平衡 |
| 数据库列加密 | AES-256-GCM | 纯数据保护,用对称更快 |
| 代码签名 | RSA-2048 或 ECDSA P-256 | 验签方不需要私钥 |
| JWT 令牌 | HS256(对称)或 RS256(非对称) | 单服务用对称,多服务用非对称 |
| 文件加密 | AES 加密文件 + RSA 加密密钥 | 灵活管理授权 |
| 物联网固件升级 | ECDSA 签名 + AES 加密固件 | 防篡改且性能合适 |
你可能会问:为什么 HTTPS 里不全程用非对称?呵呵,如果每个 TCP 包都用 RSA 加密一遍,服务器 CPU 直接冒烟。这就是为什么非对称只用来做“握手”——交换一个临时对称密钥,之后都交给 AES。
本章知识体系
下面这张图把对称加密和非对称加密的核心关系、典型算法和常见误区串起来了。你可以把它当一张记忆地图用。
一个小建议:如果你刚开始学加密技术,先别急着啃数学公式。先把这张图里每个节点的“用在哪、多久换一次密钥、性能成本多少”搞清楚,后面学具体算法时就会顺很多。
好了,第一关的基本框架你已经有了。对称加密和非对称加密就像两把尺子——没有一把能通吃所有场景。记住那个关键原则:组合才是王道。