加密基础:对称加密、非对称加密、哈希函数的概念与应用
这三类加密工具,可以说是整个 Tokenization 和对象存储安全的地基。我刚开始搞数据安全时,也经常搞混它们的用途——反正都是把数据搞乱嘛,有什么区别?后来踩了几次坑才明白,选错工具比不加密更可怕。今天咱就掰开揉碎讲清楚。
对称加密:又快又简单,但密钥是命门
对称加密,说白了就是一把钥匙开一把锁。加密和解密用同一个密钥。你想想看,你给文件上了锁,然后把钥匙连文件一起寄出去,对面用同一把钥匙打开——这不就麻烦了吗?
- AES(高级加密标准)——当前工业标准,密钥长度 128/192/256 位。我在项目中几乎只用 AES-256-GCM,因为它自带认证加密,能防篡改。
- DES / 3DES——别碰。DES 密钥只有 56 位,用 FPGA 几小时就能暴力破解。我见过遗留系统还在用 3DES,后来出了合规问题,紧急迁移到 AES,折腾了三个月。
优缺点:速度快,适合加密大量数据。但密钥分发和存储是大麻烦。你想想,如果对象存储里每个文件都用不同的对称密钥,那密钥本身谁来保护?
非对称加密:公钥私钥,天生一对
非对称加密有两个钥匙:公钥可以公开,私钥必须保密。用公钥加密的数据,只有对应的私钥能解。这解决了对称加密的密钥分发问题——你只管把公钥发给我,我用它加密文件,你自己留着私钥解密就好。
常见的算法有 RSA 和 ECC(椭圆曲线)。RSA 密钥长度通常 2048 位或 4096 位,ECC 可以用更短的密钥达到同等安全强度(比如 256 位 ECC 等价于 3072 位 RSA)。
应用场景:数字签名、密钥交换、 的签发与验证。例如,当你调用 Tokenization API 时,服务端可以用私钥对返回的 签名,客户端用公钥验证签名,确保 没有被篡改。
哈希函数:单向不可逆,专治完整性
哈希函数不是加密——它没有密钥,也无法解密。它的使命是:把任意长度的输入,输出成固定长度的摘要(比如 SHA-256 输出 256 位)。而且,哪怕输入只改了一个比特,输出也会面目全非。
| 算法 | 输出长度 | 当前安全状态 |
|---|---|---|
| MD5 | 128 位 | 已破解(2004 年发现碰撞) |
| SHA-1 | 160 位 | 已破解(2017 年 Google 公开碰撞) |
| SHA-256 | 256 位 | 安全(推荐用于当前项目) |
| SHA-3 | 可配置 | 最新标准,但未广泛普及 |
为什么要讲哈希?因为对象存储需要校验数据完整性。你上传一个大文件,下载回来发现损坏了怎么办?我建议在上传时计算文件的 SHA-256 哈希值,把哈希值存储在元数据里(或者放在 的附加字段里),下载时重新计算并对比——一旦不匹配,说明数据已被篡改或传输出错。
三种方式的核心对比
为了让你一眼看明白区别,我整理了下表。在 Tokenization 集成对象存储加密中,你会反复用到这三种组合。
| 维度 | 对称加密 | 非对称加密 | 哈希函数 |
|---|---|---|---|
| 密钥 | 单一密钥(共享) | 公钥 + 私钥对 | 无密钥 |
| 速度 | 快(GB/s 级别) | 慢(MB/s 级别) | 快(取决于输入长度) |
| 是否可逆 | 可逆(用密钥解密) | 可逆(用私钥解密) | 不可逆 |
| 主要用途 | 大量数据加密 | 密钥交换、数字签名 | 完整性校验、密码存储 |
| 常见算法 | AES-256-GCM | RSA-2048, ECC P-256 | SHA-256, SHA-3 |
三者如何配合?一张图说清楚
下面这张 SVG 图展示了三种加密方式的关系和典型应用。注意,在真实项目里,你往往会同时用到它们:用哈希校验数据完整性,用对称加密加密内容,用非对称加密保护对称密钥。
选型建议与常见错误
- 别再用 MD5 和 SHA-1 做安全校验——它们已经不再抗碰撞。我在一次审计中发现某个云存储系统还在用 MD5 校验文件,当时就建议立刻升级到 SHA-256。
- 非对称加密的密钥对要妥善保管私钥——最好用 HSM 或密钥管理服务(KMS)。公钥谁都能拿,无所谓,但私钥泄露等于整个加密体系崩塌。
- 哈希函数不能用于加密数据——经常看到有人想「哈希加密密码」,这句话的准确表述应该是「加盐哈希存储密码」。如果项目里有需求既要保密又要可逆,请用对称加密,不要试图去「逆向」哈希函数——那是方向性的错误。