1、密钥管理基础:密钥类型、对称与非对称、密钥生命周期

说实话,密钥管理这事,很多团队一开始根本不重视。我见过不少项目,密钥直接硬编码在代码里,或者用同一个密钥跑好几年。等到被安全审计打了脸,才来补救……嗯,今天我们就把这个基础扎扎实实过一遍。

1.1 密钥到底分几种?

密钥从用途和算法上,大致分三类。我个人习惯把它们分成“对称密钥”“非对称密钥”和“哈希密钥”(也有人叫签名密钥)。别小看分类,选错类型后面全崩。

密钥类型典型算法核心用途
对称密钥AES-256, ChaCha20大量数据加密 / 解密
非对称密钥RSA-4096, ECDSA P-384密钥交换 / 数字签名
哈希密钥(HMAC)HMAC-SHA256完整性校验 / 消息认证
我的经验: 在 CI/CD 流水线里,最常用的是对称密钥(加密环境变量)和非对称密钥(SSH 部署、JWT 签名)。哈希密钥通常搭配访问令牌使用,但核心还是对称/非对称。

1.2 对称 vs 非对称:别迷信哪个更强

很多新人觉得“非对称比对称安全”,其实不是这么回事。对称密钥加解密快,适合大量数据;非对称密钥管理方便(公钥随便给),但性能差几个数量级。你想想看,如果每次部署都用 RSA 加密几百兆的镜像,流水线得跑死。

CI/CD 场景下,我一般这样选:

  • 对称密钥:加密构建产物、数据库配置、API 。用 AES-256-GCM,顺便带认证标签。
  • 非对称密钥:验证签名、分发对称密钥(比如通过 KMS 加密对称密钥本身)。
避坑指南: 我曾经接过一个项目,他们用 RSA 公钥加密每个 CI 变量,结果构建时间多了 3 分钟。后来改成先用 RSA 加密一个对称密钥,再用对称密钥加密变量,速度直接提升 20 倍。记住——非对称用来传钥匙,对称用来锁货。

1.3 密钥生命周期:从生到死都要管

密钥不是一次性用品。我把它分成五个阶段:生成 → 分发 → 使用 → 轮换 → 销毁。每个阶段都有坑。

密钥生命周期流程图 生成 分发 使用 轮换 销毁 任何阶段失败 → 回退到“生成”或“销毁”?没错,但必须记录审计日志
特别注意: 密钥生命周期的 轮换 和 销毁 往往是 CI/CD 团队最容易忽略的。我见过不少公司,密钥过期了才急急忙忙去换,结果流水线停摆。正确做法:把轮换自动化,集成到流水线里,比如每月自动生成新密钥并标记旧密钥为“待销毁”。

1.4 每个阶段怎么做?说几个实操要点

  • 生成:用系统级随机数生成器(比如 Linux 的 /dev/urandom),别用伪随机库。我习惯用 openssl rand -hex 32 生成对称密钥,配合 KMS 的硬件安全模块(HSM)最佳。
  • 分发:不要走明文通道!CI/CD 里,通过密管服务(Vault / AWS Secrets Manager)传递密钥,或者在构建时通过安全令牌临时授权。
  • 使用:只在必要的最小范围内使用。比如某个 Job 只需要解密数据库密码,就别把整个密钥库挂载进去。
  • 轮换:设定固定周期(90 天或 180 天),新密钥上线后,旧密钥保留一个窗口期供过渡,窗口期过了再标记为只读最后销毁。
  • 销毁:调用 KMS 的 scheduleKeyDeletion 或直接覆盖存储区域。我有个原则:销毁必须伴随审计通知,抄送安全团队。
我问个问题: 你的 CI/CD 管线里,密钥轮换是手动还是自动?如果还是手动,你多半会在某个周五晚上被叫起来修流水线。因为我现在每次看到手动轮换,就想起当年被 500 错误支配的恐惧。

1.5 关于密钥类型,再补两个陷阱

① 对称密钥长度:128 位够用,但 256 位更安全且不影响性能。我之前踩过坑,用 128 位 AES 通过 PCI-DSS 审计时被质疑,虽然最终通过了,但解释成本很高。现在直接上 256 位。

② 非对称密钥的曲线选择:别再守着 RSA 2048 了。ECDSA P-384 不仅更安全,而且签名更短。我迁移到 ECDSA 后,CI 签名验证速度提升了 40%。

小技巧: 在 GitLab CI 或 GitHub Actions 里,可以用 id_tokens 获取短期 OIDC 令牌,代替长期静态密钥。这是把密钥生命周期压到分钟的极致方案——你想想看,密钥还没被偷就已经过期了。

嗯,密钥管理的基础今天就聊到这里。对称与非对称的选择、生命周期的自动化,是你在后面每个章节都会反复遇到的问题。记得把这些基础刻进脑子里,后面我们才会聊到审计边界到底怎么划。