加密基础:对称加密与非对称加密,密钥管理的重要性,哈希与数字签名
加密这件事,说白了就是给数据上把锁。但锁的种类不同,用法也天差地别。我刚开始接触对象存储加密时,总觉得密钥嘛,藏好就行——后来被坑过一次,才明白这里面的门道有多深。
对称加密:又快又简单,但密钥怎么给?
对称加密,就是加密和解密用同一把钥匙。你想想看,就像你家大门钥匙,自己用它能锁门,别人拿它也能开门。
常见的算法有 AES、DES、3DES。现在业界基本只用 AES-256。我个人习惯用 AES-GCM 模式,因为自带认证,省去额外校验。
对称加密的优势是速度快,适合大文件。缺点呢?密钥分发和管理麻烦。你和对方都需要同一把钥匙,怎么安全地传过去?如果密钥在传输中被截获,加密就等于白做了。
非对称加密:公钥随便给,私钥自己藏
非对称加密,用一对钥匙:公钥和私钥。公钥可以公开,私钥必须保密。你拿公钥加密,只有对应的私钥才能解密。反之,私钥签名,公钥验证。
主流算法有 RSA(2048位以上)、ECC(椭圆曲线,更高效)。非对称加密速度慢,不适合加密大文件,但非常适合密钥交换和数字签名。
举个实际场景:在 SSE-KMS 中,我们通常用非对称加密来保护对称密钥。客户端用 KMS 的公钥加密一个临时对称密钥,然后上传到服务端。只有 KMS 的私钥能解开,安全又高效。
关键点: 非对称加密不直接加密数据,而是加密对称密钥。这叫“混合加密”,兼顾安全与性能。
哈希与数字签名:不是加密,但比加密更常用
哈希不是加密,它没有密钥,也不可逆。你把一段数据丢进去,得到一个固定长度的摘要。哪怕改一个字节,摘要就完全不同。
常用哈希算法:SHA-256、SHA-3。MD5和SHA-1已经不安全了,别再用了。我在项目中用 SHA-256 校验上传文件完整性,确保传输过程中没被篡改。
数字签名是哈希 + 非对称加密的结合。先对内容算哈希,然后用私钥加密哈希值,得到签名。接收方用公钥解密签名,比对哈希值。如果一致,说明内容没被改过,且确实来自私钥持有者。
密钥管理:整个加密体系最薄弱的一环
算法再强,密钥泄露一切归零。我见过太多公司花大价钱买加密方案,最后密钥存储却用个共享文件夹。嗯,这里要敲黑板了。
密钥管理包括:
- 生成: 必须用安全的随机数生成器,比如 /dev/urandom 或硬件安全模块(HSM)。
- 存储: 密钥不能明文存磁盘。要用 HSM 或 KMS 托管。SSE-KMS 就是 AWS 帮你管密钥。
- 轮换: 定期更换密钥。万一某个密钥泄露,影响面能控制。
- 销毁: 彻底删除旧密钥,防止恢复。云服务商通常有“等待期”机制。
我的习惯: 密钥生命周期里,我最重视轮换。之前有个项目用同一个密钥加密了三年数据,后来怀疑密钥泄露,所有数据都得重新加密,成本极高。现在我都设自动轮换,90 天一次。
四种技术的对比
| 技术 | 是否可逆 | 是否有密钥 | 典型用途 | 性能 |
|---|---|---|---|---|
| 对称加密 | 是 | 单一密钥 | 数据加密 | 快 |
| 非对称加密 | 是 | 公钥/私钥 | 密钥交换、签名 | 慢 |
| 哈希 | 否 | 无 | 完整性校验 | 快 |
| 数字签名 | 否(签名无解密) | 私钥签名/公钥验证 | 身份认证、防篡改 | 中等 |
加密体系核心逻辑
下图展示了这几种技术之间的关系。你看,对称加密和非对称加密互补使用,哈希为数字签名提供基础,密钥管理则是所有操作的安全根基。
小技巧: 实际项目中,对象存储的 SSE-KMS 底层用的就是对称加密 AES-256 来加密数据,而 KMS 的密钥本身由非对称加密保护。哈希用于校验上传文件的完整性,数字签名则用在认证环节。这套体系环环相扣,缺一不可。