3. 加密基础:对称与非对称加密、密钥生命周期
讲 BYOK 安全导入之前,你总得先搞清楚底层的加密逻辑是什么。我在项目里遇到过不少同学,上来就问我「KMS 到底怎么护住我的密钥」,结果聊两句发现他对对称和非对称的区别都模糊。嗯,咱们今天就把它掰开揉碎了讲清楚。
3.1 对称加密:一把钥匙开一把锁
对称加密,说白了就是加密和解密用同一把密钥。你拿它锁上数据,别人拿它打开数据。听起来简单吧?实际场景里最常见的就是 AES(Advanced Encryption Standard)。
我举个例子:你往云上存个配置文件,用 AES-256 加密。密钥就是那串 256 位的随机数。存的时候用密钥加密,读的时候用同一个密钥解密。速度快,适合加密大量数据——比如数据库、对象存储里的文件。
但对称加密有个天生短板:密钥怎么安全地分给接收方?你要是直接把密钥写在邮件里发过去,那跟没加密有啥区别?所以对称加密一般只用在「我自己存自己用」的场景,或者跟非对称加密配合着用。
我的习惯:做 BYOK 导入时,云厂商的 KMS 底层加密数据用的几乎全是 AES-256。你带来的是自己的密钥材料,KMS 拿它加密你的业务数据。这个过程中,密钥本身的安全性才是核心。
3.2 非对称加密:公钥加密,私钥解密
非对称加密就聪明得多。它有两个密钥:一个公钥(公开),一个私钥(保密)。你用公钥加密,只有对应的私钥能解开。反过来,你用私钥签名,别人用公钥验签。
讲个实际场景:你在本地生成一对 RSA 密钥,把公钥上传到云 KMS,私钥锁在本地 HSM 里。云上用公钥加密一个临时密钥,传回来给你。你用私钥解开,得到那个临时密钥,再用它去加密真正的业务数据。
我不太建议直接用非对称加密去加密大块数据——太慢了。RSA-2048 加密 1KB 数据都要几十毫秒,你要是加密一个几 MB 的文件,那性能根本扛不住。
| 维度 | 对称加密 (AES) | 非对称加密 (RSA/ECC) |
|---|---|---|
| 密钥数量 | 1 个密钥 | 2 个密钥(公钥+私钥) |
| 加解密速度 | 极快(硬件加速可达 10+ Gbps) | 慢(适合小数据) |
| 典型用途 | 数据加密、文件加密 | 密钥交换、数字签名 |
| 密钥分发 | 难(需要安全通道) | 易(公钥可公开) |
| 常见算法 | AES-256, SM4 | RSA-2048, ECC P-256 |
3.3 混合加密:取长补短
实际系统中,这两者往往结合用。我参与过一个企业级 BYOK 项目,流程是这样的:
- 业务端生成一个对称密钥(AES-256),这叫数据密钥(DEK)。
- 用这个 DEK 加密真正的业务数据。
- 再用云 KMS 的公钥(非对称)加密这个 DEK,得到信封加密后的密文。
- 把密文和加密后的数据一起存到云上。
- 需要时,先用私钥解密信封得到 DEK,再用 DEK 解密数据。
这就是传说中的「信封加密」。你想想看,这样既享受了对称加密的速度,又解决了密钥分发难题。云 KMS 在你导入密钥时,底层也是类似的逻辑。
3.4 密钥生命周期:从出生到消亡
搞清加密类型只是第一步。更难的是密钥怎么管理。我记得有一次做安全审计,发现某团队用了同一个密钥加密了两年的数据——后来那个密钥被泄露了,所有历史数据都得重新加密。这就是生命周期管理没做好。
一个完整的密钥生命周期包括这几个阶段:
- 生成:随机数质量很关键。千万别用伪随机数生成器。我用 OpenSSL 命令行或者 HSM 硬件生成,确保真随机。
- 存储:密钥必须加密存储。云 KMS 用硬件安全模块(HSM)保护根密钥,根密钥加密其他密钥。
- 使用:只在内存中解密,用完立即销毁。不要写日志里。
- 轮换:定期更换密钥。我一般建议最久 1 年轮换一次,敏感业务 90 天。
- 销毁:彻底删除。云 KMS 里的密钥销毁有延时机制,防止误操作。但一旦确认销毁,就真没了。
我曾经踩过的坑: 在一次密钥轮换时,没有更新依赖该密钥的加密数据的元信息。结果旧密钥销毁后,所有历史数据都读不出来了。教训:轮换前先确保所有依赖都已迁移到新密钥。
3.5 BYOK 场景下的密钥生命周期特例
BYOK(Bring Your Own Key)和普通密钥管理有个关键区别:密钥材料由你生成,你保留对密钥的最终控制权。云 KMS 只负责使用,不能导出。
我个人在项目中总结过 BYOK 密钥生命周期必须注意的三个要点:
- 导入前的校验:云厂商通常会要求你提供密钥的校验值(比如 SHA-256 哈希)。导入时云 KMS 会比对,确保传输没被篡改。
- 导入后的状态:你的密钥进入云 KMS 后,通常处于「等待启用」状态。你需要手动激活。别拖太久——有些厂商有超时自动删除机制。
- 销毁策略:云 KMS 支持计划删除(比如设定 7 天后删)。但你得知道,一旦你真的删了,云上所有用这个密钥加密的数据就再也解不开了。我在项目里一般建议保留一份本地备份的密钥材料,再执行云上删除。
避坑指南: 导入密钥时,别用网线直传。用云厂商提供的加密 API(如 AWS KMS ImportKeyMaterial),走 TLS 通道。我在早期一个项目里图省事把密钥贴到控制台输入框里——后来发现控制台页面日志可能会记录表单内容。从那以后我再也不敢那么干了。
3.6 你应该记住的
加密类型的选择取决于场景。对称加密快但密钥分发难,非对称加密安全但慢。混合加密才是工业级方案。而密钥生命周期,就是确保你的密钥从生到死都在受控状态。
下一层我们会具体讲云 KMS 的架构和高可用设计。不过那是后话了。先把今天的脉络理清楚:你懂了对称和非对称的区别,知道了密钥有生成、存储、使用、轮换、销毁这五步,面对 BYOK 导入时就有了底气。