KMS 基本概念:你必须要懂的几块基石
做 KMS 审计日志之前,你得先搞明白 KMS 到底在管什么。说白了,KMS 就是一个专门伺候密钥的管家——它负责密钥的生成、存储、轮换、销毁,还得把访问记录一五一十地记下来。
嗯,我见过不少团队,审计日志分析做了一半,突然卡住了。为啥?因为他们看不懂日志里写的 key-id 是干啥的,分不清对称和非对称的区别。所以这节课,咱们先把基础夯结实。
1. 对称密钥 vs 非对称密钥
这是加密世界的两大门派。我个人的习惯是,先看使用场景再选类型。
- 对称密钥:加密和解密用同一把密钥。速度飞快,适合加密大量数据。缺点是密钥分发困难——你怎么安全地把密钥给对方?
- 非对称密钥:有一对钥匙——公钥和私钥。公钥公开,私钥自己藏着。加密慢,但解决了密钥分发问题。常用于数字签名和密钥交换。
我的经验:有一次客户要求所有 API 响应必须加密传输。我建议用对称密钥加密报文,然后用非对称密钥把对称密钥包一层传过去。既快又安全。
| 特性 | 对称密钥 | 非对称密钥 |
|---|---|---|
| 加密速度 | 快(硬件加速轻松跑 Gbps) | 慢(百倍以上差距) |
| 密钥数量 | 每对通信方一把 | 每人一对(公钥+私钥) |
| 典型算法 | AES, SM4, ChaCha20 | RSA, ECC, SM2 |
| 审计关注点 | 密钥分发记录 | 公钥证书链、私钥使用记录 |
2. 主密钥与数据密钥
这是 KMS 里的核心分层思想。你想想看,如果所有数据都用同一把密钥加密,密钥泄露就全军覆没了。所以 KMS 设计了「主密钥 + 数据密钥」的双层结构。
- 主密钥(CMK / Key Encryption Key):放在 KMS 里,永远不出 HSM 边界。它的唯一任务就是加密和解密数据密钥。
- 数据密钥(Data Key / DEK):由 KMS 生成,用于加密实际数据。用完可以存到本地,下次用主密钥解密回来再用。
审计日志里最常见的两个操作:
GenerateDataKey 和 Decrypt。前者生成数据密钥并用主密钥加密,后者用主密钥解密数据密钥。你的日志分析工具得要能识别这两个 API 调用。
我曾经接手过一个案例,某公司把所有日志里的 key-id 都索引错了。他们以为数据密钥的 ID 就是主密钥 ID,结果审计追溯时完全对不上账。嗯,数据密钥和主密钥是两套 ID 体系,别搞混。
3. 密钥层次结构
其实上面已经提到了分层,现在咱们把层次画清楚。KMS 里通常有三层:
- 根密钥(Root Key):硬件保护的, 永不离开 HSM。通常由 HSM 管理员手动生成。
- 主密钥(Customer Master Key):用户可见的密钥逻辑对象。每个 CMK 关联一个根密钥,用于保护该 CMK 下的数据密钥。
- 数据密钥(Data Encryption Key):最终加密业务数据。可以临时缓存,也可以持久化存储。
别看只有三层,每一层在审计日志里都有自己的认证和授权记录。比如 CMK 的创建、启用、禁用、轮换,都是审计重点。
注意:CMK 可以轮换,轮换后旧 CMK 关联的根密钥不变,但数据密钥需要用新的 CMK 重新封装。审计日志里必须记录轮换时间戳和旧的 key-id,否则事后解密历史数据时连密钥版本都找不到。
4. HSM 硬件安全模块
HSM 是什么?说白了就是一台专门干加密活的「小黑盒子」。它有自己的操作系统、独立的内存和 CPU,并且经过物理加固(防拆、防侧信道攻击)。
KMS 的核心资产——根密钥,就睡在 HSM 里。我入职第一家公司时,师傅指着机房角落一个像路由器的东西说:“这玩意你敢乱动,报警会直接通知 FBI。” 虽然夸张了点,但 HSM 的安全级别确实很高。
- FIPS 140-2/3 Level 3:常见的合规认证。达到 Level 3 的 HSM 具备篡改响应机制——有人物理破坏外壳,密钥会自动销毁。
- HSM 与 KMS 的关系:KMS 控制面管理密钥的元数据,HSM 执行真正的加密运算。审计日志里,HSM 一侧记录的是「硬件设备事件」,比如:
HSM key generation succeeded、HSM key backup to external。
| 组件 | 职责 | 审计日志关注点 |
|---|---|---|
| KMS 控制平面 | 管理 CMK 的生命周期 | API 调用(创建、轮换、删除 CMK) |
| HSM 设备 | 保护根密钥,执行加密 | 设备启动、密钥生成、备份恢复 |
| HSM 客户端 | KMS 与 HSM 的通信插件 | 连接失败、超时、认证错误 |
避坑指南:我曾经遇到 HSM 日志和 KMS 日志时间戳不一致的情况。KMS 走的是云服务标准时间,而 HSM 用的是自己板载时钟。审计时一定要先对齐时间基准,否则 timeline 全乱。