密钥概念:对称密钥与非对称密钥、密钥生命周期、密钥存储方式
咱们开始聊密钥吧。我记得刚入行那会儿,觉得密钥就是一段乱码,能加解密就行。后来在项目里吃了几次亏,才明白这里头门道很多。今天我把对称密钥、非对称密钥、密钥生命周期和存储方式这四块掰开揉碎了讲,你跟着过一遍,后面做权限分配时心里就有底了。
对称密钥 & 非对称密钥
先说说最基础的分类。对称密钥,说白了就是加密和解密用同一把钥匙。你想想看,就像你家大门钥匙,锁门和开门都是同一把。优点很明显:快!做大数据量的加解密,吞吐量极高。常用的有 AES、3DES、SM4。缺点也致命:密钥怎么安全地给对方?我曾经在内部网络项目里,直接用配置文件传密钥,结果被运维同事扫出来一顿批——对,这就是典型的密钥分发难题。
非对称密钥呢,用一对钥匙:公钥和私钥。公钥可以公开,私钥自己藏好。加密用公钥,解密只能用私钥。签名用私钥,验签用公钥。最常见的 RSA、ECC、SM2。速度比对称慢两个数量级,但解决了分发问题。我在做多租户数据隔离时,每个租户独立一对公私钥,虽然管理成本高,但安全底线保住了。
核心口诀:对称快但分发难,非对称慢但天生安全分发。实际系统中两者结合:用非对称交换会话密钥,再用对称加密主体数据。
| 对比维度 | 对称密钥 | 非对称密钥 |
|---|---|---|
| 密钥数量 | 1 把 | 2 把(公钥+私钥) |
| 加解密速度 | 快(硬件加速可达 Gbps) | 慢(百倍级差距) |
| 密钥分发 | 难,需安全通道 | 易,公钥可公开 |
| 典型算法 | AES-256, SM4 | RSA-2048, ECC P-256 |
| 典型场景 | 批量数据加密、数据库加密 | 数字签名、密钥协商、证书 |
密钥生命周期
密钥不能生下来就不管了。我习惯把它的整个生命分成五个阶段。你看下面的流程就清楚了:
嗯,这里要注意几个坑。生成阶段一定要用合格的随机数源,别用 `random` 库。我曾经见过有人用 Python 的 `random` 生成 AES 密钥——结果被攻击者重复出来,惨不忍睹。分发阶段,对称密钥必须走提前建立的安全通道,比如用对方的公钥加密后传输。轮换不能太久,我一般建议对称密钥最多用 90 天,非对称密钥最长一年。销毁更马虎不得,我曾遇到老系统退役后密钥还躺在硬盘里,被审计抓到直接扣分。
曾经踩过的坑: 我之前一个物联网项目,几百个设备用同一个对称密钥。设备出厂后密钥被逆向出来,整个系统一夜报废。从那以后,我强制要求每台设备独立密钥 + 定期轮换。
密钥存储方式
密钥存哪里,直接决定安全水位。我按风险从低到高列几种常见方式:
- HSM(硬件安全模块)——最高安全等级。密钥物理隔离,抗物理攻击。银行、CA 必备。我手上经手的 HSM 项目,密钥从未出过芯片边界。
- 安全飞地(TEE / SE)——CPU 内部隔离区。手机、智能设备常用。可防止操作系统级别的窃取。
- 密钥管理系统(KMS + 加密存储)——密钥加密后保存在数据库,再由 KMS 管理主密钥。阿里云、AWS 的KMS 都是这路子。方便,但依赖云服务商的可信。
- 环境变量 / 配置文件——仅限本地开发或低敏感环境。我一般跟开发讲:代码里绝不允许写死密钥,否则提 MR 时直接打回。
- 硬编码——禁止。GitHub 上每天都有因为硬编码泄露密钥的惨案。
| 存储方式 | 安全等级 | 适用场景 | 性能影响 |
|---|---|---|---|
| HSM | 极高 | 金融、PKI、高合规 | 中等(硬件调用延迟) |
| TEE / SE | 高 | 移动端、物联网 | 低(本地硬件加速) |
| KMS + 加密存储 | 中高 | 云原生、微服务 | 看网络延迟(远程调用) |
| 环境变量 / 配置文件 | 低 | 开发 / 测试环境 | 无 |
| 硬编码 | 无 | 不应出现 | 无(但安全为0) |
我个人习惯: 生产环境一律用 HSM 或 KMS。如果你用 Kubernetes,推荐集成 secrets-store-csi-driver 从 KMS 拉取密钥,别挂明文 Secret。
最后聊个实际例子。去年我做 RBAC 权限系统,用户访问资源前需要校验签名。系统里用了 RSA 公私钥对:私钥存在 HSM 里签名,公钥放到配置中心公开。每一次签名请求都走 HSM 硬件,虽然慢了一丢丢,但私钥永远不落地。对称会话密钥则通过 ECDH 密钥交换临时协商,用完就丢。这个方案既快又安全,你想想看,是不是把上面讲的几种概念都用上了?