第1章 加密入门

对称加密:一把钥匙开一把锁

你想想看,你和你的同事要共享一份机密文档。你们约定好同一个密码,你加密,他解密。这就是对称加密——加解密用同一把密钥。说白了,就像你用同一把钥匙锁门和开门。

我在项目中遇到过最典型的案例:某金融App的本地数据存储,用的就是AES-256-GCM。为什么选GCM?因为它自带认证,防篡改。嗯,这里要注意,对称加密的核心优势是快,非常快。硬件加速下,AES加密1MB数据只需要几毫秒。但代价呢?密钥分发是个大麻烦——你总不能把密钥直接写在邮件里吧?

算法密钥长度分组模式典型场景
AES128/192/256 bitECB/CBC/GCM/CTR文件加密、数据库加密
DES (已弃用)56 bitECB/CBC不再推荐,密钥太短
SM4 (国密)128 bitCBC/CTR/GCM国内合规场景
警告: 不要想当然地用ECB模式!它不能隐藏明文中的重复模式。我曾经见过一个项目,用ECB加密头像,结果头像轮廓依然可见——那加密还不如不加密。

非对称加密:公钥开锁,私钥锁门

非对称加密就完全不一样了。你有一对密钥:公钥可以公开,私钥只有你自己知道。别人用你的公钥加密数据,只有你能用私钥解密。这解决了对称加密的密钥分发难题。

我个人习惯用RSA-2048或ECC P-256。RSA虽然老,但兼容性极好;ECC在同等安全强度下密钥更短,性能更好。举个例子:HTTPS握手的第一步,客户端用服务器的公钥加密一个临时对称密钥,服务器再用私钥解密——这就是混合加密的经典应用。

关键区别: 非对称加密慢。RSA加密256字节数据大约需要几毫秒,而AES加密同样数据只需微秒级。所以实际中,我们几乎从不直接用非对称加密大量数据。

常见算法回顾:AES与RSA

AES(Advanced Encryption Standard)自2001年就是全球标准。我常用AES-256-GCM,密钥32字节,nonce 12字节,加密后附带16字节认证标签。代码长这样(Python示例):

from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
import os

key = os.urandom(32)           # 256位密钥
nonce = os.urandom(12)         # 96位随机数
cipher = Cipher(algorithms.AES(key), modes.GCM(nonce), backend=default_backend())
encryptor = cipher.encryptor()
ciphertext = encryptor.update(b"Hello World") + encryptor.finalize()
tag = encryptor.tag

RSA则依赖大整数分解难题。1024位已被破解,现在至少2048位,推荐4096。RSA加解密速度慢,通常只用于加密对称密钥或数字签名。记得给密钥加一个私钥加密密码(passphrase),否则私钥文件泄露就全完了。

密钥管理的基本挑战

说来简单,做起来全是坑。密钥管理是密码学里最容易被忽视、也最容易出事故的环节。我总结了三大挑战:

  1. 存储安全:密钥不能硬编码在代码里,不能明文写在配置文件中。我见过有人把AES密钥写在Java属性文件里,后来那个文件被传到了GitHub——嗯,那叫一个惨。
  2. 轮换与生命周期:密钥不能永不过期。你应该制定轮换策略——比如每90天更换一次数据加密密钥。但我遇到过一些系统,密钥从上线就没换过,直到被攻破才意识到。
  3. 访问控制:谁有权限读取密钥?需要严格按最小权限原则。我曾经审计过一个系统,所有微服务共享同一个数据库加密密钥,结果一个服务被入侵,所有数据都暴露了。
避坑指南: 千万不要自己实现密钥管理基础设施!用成熟的方案,比如AWS KMS、Hashicorp Vault或Azure Key Vault。我曾经有一个客户坚持自己写密钥管理模块,结果半年后出了三次密钥丢失事故——省下的钱都不够赔。
加密入门知识体系 对称加密 非对称加密 AES SM4 RSA ECC 混合加密(TLS等) 存储安全 不硬编码,不明文 轮换与生命周期 定期更换,过期销毁 访问控制 最小权限,审计 注意:实际部署中常使用混合加密,非对称加密保护对称密钥,对称加密保护数据。
我的经验: 刚开始做加密设计时,总想用最复杂的方案。后来发现,大多数场景用AES-256-GCM + RSA-2048就足够了。别过度设计,先把密钥存好、管好,比用什么算法更重要。

小结

这一章我们复习了对称加密(AES/SM4)和非对称加密(RSA/ECC)的核心差异。重点不在算法细节,而在理解它们各自的优缺点和适用场景。密钥管理的三大挑战——存储、轮换、访问控制——会贯穿整个课程。记住:算法是公开的,安全全靠密钥。把密钥守住了,你就守住了底线。