2. 密码学基础回顾:对称加密与非对称加密原理、哈希函数、数字签名、密钥派生与安全存储要点
讲KMS集成和审计日志,密码学基础得先捋一捋。
我个人的习惯是,每次搭建巡检系统前先做一轮“密码学自检”——看看当前用的加密算法是不是还安全,密钥存得稳不稳。这一章咱们就快速过一遍核心概念,后面讲到实际集成时你会觉得特别顺。
2.1 对称加密——速度快,但要管好密钥
对称加密说白了就是加密和解密用同一把钥匙。举个例子,你用AES-256加密一份日志文件,解密时还得用同一个密钥。我在项目里见过很多同学直接硬编码密钥——千万别这么干!
主流对称算法对比:
| 算法 | 密钥长度 | 模式示例 | 安全性现状 |
|---|---|---|---|
| AES | 128 / 192 / 256 | GCM, CBC | 推荐使用 |
| DES | 56 | ECB | 已弃用,容易被暴力破解 |
| 3DES | 112 / 168 | CBC | 逐步淘汰,性能差 |
| SM4 | 128 | CBC, CTR | 国密合规 |
2.2 非对称加密——公钥私钥分家
非对称加密用一对钥匙:公钥加密,私钥解密。反过来也行——私钥签名,公钥验签。我记得有一次做审计日志防篡改设计,就是用非对称签名来保证每条日志的不可否认性。
常用算法:
- RSA:成熟但密钥越长越慢,我建议2048位以上。
- ECC(椭圆曲线):相同安全强度下密钥短很多,比如256位ECC ≈ 3072位RSA。我个人偏爱ECC,特别是用在IoT设备上。
- SM2:国密算法,国内合规场景必选。
2.3 哈希函数——做指纹,不存储原文
哈希函数能把任意长度数据变成固定长度摘要。注意它不是加密,是单向的。举个例子,你在审计日志里存每条记录的哈希值,就能防篡改——改一个字节,哈希值就变了。
我曾经被MD5坑过一次:旧系统用了MD5做完整性校验,后来被人轻松碰撞攻击。从那以后,我坚持用SHA-256以上。
| 算法 | 输出长度 | 安全性 |
|---|---|---|
| MD5 | 128位 | 已不安全,避免使用 |
| SHA-1 | 160位 | 理论不安全,不推荐 |
| SHA-256 | 256位 | 当前标准 |
| SHA-3 | 可配置 | 下一代标准,逐渐普及 |
| SM3 | 256位 | 国密合规 |
2.4 数字签名——哈希 + 非对称 = 不可抵赖
数字签名其实就两件事:签名者用私钥对数据的哈希做加密,验证者用公钥解密哈希并比对。我在做密文检索审计日志的时候,每条日志提交时都会加上签名——谁写的、什么时候写的、内容有没有被改过,一验便知。
常见的签名算法:
- RSA-PSS:带随机填充,更安全
- ECDSA:基于椭圆曲线,签名短
- SM2签名:国标
- Ed25519:快且安全,我很喜欢这个
2.5 密钥派生与安全存储
密钥派生(KDF)是从一个主密钥或密码派生出一堆子密钥。比如你用PBKDF2把用户口令变成AES密钥。我建议不要直接用口令当密钥——加盐、迭代这些步骤不能省。
常见KDF:
| 算法 | 特点 |
|---|---|
| PBKDF2 | 安全,可配置迭代次数 |
| bcrypt / scrypt | 抗GPU暴力 |
| HKDF | 基于HMAC,适合协议 |
| Argon2 | 内存硬,推荐新项目使用 |
安全存储就更实在了。密钥不能明文躺磁盘——要么用HSM(硬件安全模块),要么用密钥保险箱(如Vault),要么加密后存数据库。我之前的项目里把租户的KMS主密钥放在HSM里,再用KDF派生出业务密钥——泄漏风险降了一大截。
本章知识体系总览
好了,基础回顾就到这里。这些概念会反复出现在后面的KMS集成、审计日志签名、密文检索方案中——你如果觉得哪个部分不熟,随时回到这一章翻翻。接下来咱们就进入真正的集成实战了。