KMS(Key Management Service)是集中管理加密密钥生命周期的服务或系统,负责密钥生成、保护、授权使用、密钥轮换、禁用、销毁和审计。
核心问题
加密系统真正难的部分通常不是“选哪个算法”,而是“密钥放在哪里、谁能用、怎么轮换、泄露后怎么止损、操作是否可审计”。如果应用把密钥写在配置文件、代码仓库或数据库里,加密很容易退化成形式安全。
KMS 解决的是“把密钥材料和密钥使用权限从业务应用里分离出来”的问题。应用不直接长期持有主密钥,而是通过受控 API 请求 KMS 完成加密、解密、签名、验签 或数据密钥生成。
核心机制
KMS 通常围绕几类对象工作:
- 主密钥 / KMS key:由 KMS 托管的长期密钥,用于包裹数据密钥或执行受控密码操作。
- 数据密钥:短期或局部使用的 对称加密 密钥,用来加密实际数据。
- 访问策略:控制哪些身份、服务、资源和条件可以使用某把密钥。
- 审计日志:记录谁在什么时候对哪把密钥执行了什么操作。
- 密钥版本:支持轮换后保留旧版本,以便解密历史密文。
常见工程模式是 信封加密:
- 应用请求 KMS 生成数据密钥。
- KMS 返回明文数据密钥和被主密钥加密后的数据密钥密文。
- 应用用明文数据密钥加密业务数据,然后丢弃明文数据密钥。
- 存储业务密文和数据密钥密文。
- 解密时,应用把数据密钥密文交给 KMS 解包,再用解包后的数据密钥解密业务数据。
这样 KMS 不需要直接处理所有业务大数据,但能控制数据密钥的解包权限和审计。
工程用途
- 云上数据加密:对象存储、数据库、磁盘、消息队列和日志加密。
- 应用字段加密:身份证号、手机号、支付信息、凭据等敏感字段。
- 签名和验签:证书 私钥、令牌签名、软件包签名或设备授权材料的 签发。
- 多租户密钥隔离:不同租户、环境或业务线使用不同密钥和策略。
- 合规和审计:证明密钥访问可控、操作可追踪、轮换和禁用有记录。
观察指标包括密钥使用量、解密失败率、异常调用来源、策略变更、轮换覆盖率、禁用密钥命中、审计日志完整性和 KMS API 延迟。
边界与常见坑
- KMS 不等于加密算法:KMS 是密钥管理和受控密码操作系统,底层仍使用 对称加密、非对称加密、数字签名 等算法。
- KMS 不等于 HSM:HSM 是硬件安全模块;KMS 可以使用 HSM 作为密钥保护根,但 KMS 还包含 API、策略、审计和生命周期管理。
- 不要让应用长期缓存明文数据密钥:缓存时间越长,KMS 的访问控制和审计价值越低。
- 密钥策略比代码更敏感:过宽的 decrypt/sign 权限会让攻击者绕过数据加密。
- 轮换不能破坏历史解密:新数据用新版本加密,旧密文通常还要能用旧版本解密。
- 删除密钥是高风险操作:一旦主密钥不可恢复,所有依赖它解包的数据密钥和业务密文可能永久不可读。
- 不要把 KMS 当万能保密边界:如果应用服务器已被完全控制,攻击者仍可能调用 KMS 解密它有权限访问的数据。