KMS 的加密密钥存储在哪里 - 信封加密与 HSM 的工作机制
本文讲解 KMS 主密钥存储在通过 FIPS 140-2 认证的 HSM 内的机制、通过信封加密对数据密钥进行双重保护的设计,以及密钥轮换的内部运作。
KMS 密钥不以明文存储
在 AWS KMS(Key Management Service)中创建的加密密钥(KMS 密钥,旧称 CMK)不会以明文状态存储在磁盘上。KMS 密钥的密钥材料(实际的加密密钥数据)仅在通过 FIPS 140-3 安全级别 3 验证的 HSM(Hardware Security Module)内以明文形式存在。HSM 是专用于加密处理的硬件设备,具备物理防篡改能力(检测到非法开启或篡改时自动删除密钥的功能)。KMS 密钥存储在 HSM 外部时,会以经 HSM 内部的域密钥加密后的状态(密文)存储。需要进行加密 / 解密处理时,加密的密钥材料会被加载到 HSM 中,在 HSM 内部解密并用于加密处理,处理完成后再从 HSM 的内存中删除。也就是说,存储在 AWS 存储系统中的是加密的密钥材料,能够解密它的只有 HSM。即使 AWS 的员工访问存储,也只能看到加密的密钥材料。
信封加密 - 为什么要用密钥加密密钥
KMS 加密模型的核心是“信封加密”(Envelope Encryption)。不是直接用 KMS 密钥加密数据,而是先请求 KMS 生成数据密钥(Data Key),用该数据密钥加密数据,再用 KMS 密钥加密数据密钥本身并加以存储。为什么需要这种双重结构呢?原因有 2 个。第一是性能。KMS 的加密 API 每个请求最多只能处理 4KB 的数据。要加密数 GB 的文件,就必须向 KMS 发送数百万次请求,这并不现实。如果在本地使用数据密钥,大型数据也可以加密。第二是延迟。KMS 的 API 调用会产生网络往返。如果将数据密钥缓存在内存中,调用 KMS 的次数就会减少。S3 的 SSE-KMS(Server-Side Encryption with KMS)在内部自动执行这种信封加密。每个对象都会生成唯一的数据密钥,对象的数据用数据密钥加密,数据密钥则用 KMS 密钥加密后作为对象的元数据存储。
密钥轮换的内部运作
启用 KMS 的自动密钥轮换后,每年(根据设置为 90 天到 2560 天)会生成新的密钥材料。这里的重点是,密钥轮换后旧的密钥材料不会被删除。KMS 密钥的 ARN 和 Key ID 不会改变,用旧密钥材料加密的数据会自动用旧密钥材料解密。加密新数据时使用新的密钥材料。密钥轮换被设计为透明地运作。无需修改应用程序的代码,轮换也不会对数据重新加密。KMS 在内部把用哪个版本的密钥材料加密的信息嵌入密文中,并在解密时自动选择合适的密钥材料。如果是手动密钥轮换(创建新的 KMS 密钥并切换别名的方式),则必须另行决定如何处理用旧 KMS 密钥加密的数据。如果在不理解自动轮换与手动轮换区别的情况下,在手动轮换后删除旧的 KMS 密钥,就无法再解密旧数据。
KMS 与 CloudHSM 的选用
KMS 是在多租户 HSM 上运行的托管服务。多个客户的 KMS 密钥在同一个 HSM 集群上处理,但每个密钥在密码学上相互隔离,无法访问其他客户的密钥。另一方面,CloudHSM 是提供单租户 HSM 的服务。专用的 HSM 设备部署在 VPC 内,只有客户本身可以访问。需要 CloudHSM 的情况是有限的。第一,法规要求使用“专用的 HSM”的情况。金融机构和政府机构的部分法规要求用专用的硬件管理加密密钥。第二,必须使用 PKCS#11、JCE、CNG 等标准加密 API 的情况。KMS 使用 AWS 自有的 API,而 CloudHSM 支持行业标准的加密 API。第三,需要超过 KMS 请求速率限制(默认每秒 5,500 到 30,000 个请求,因区域而异)的加密处理的情况。CloudHSM 用专用的硬件进行处理。在许多用例中 KMS 就足够了,CloudHSM 则在有上述要求时再考虑。
加密密钥的删除 - 无法撤销的最危险操作
KMS 密钥的删除是一项一旦完成就无法恢复原状、影响重大的操作。删除 KMS 密钥后,用该密钥加密的数据将无法解密。S3 的对象、EBS 的卷、RDS 的快照等依赖该密钥的数据都将无法读取。为了降低这一风险,AWS 为 KMS 密钥的删除设置了 7 到 30 天的等待期。安排删除后,密钥会进入“待删除”(Pending Deletion)状态,在等待期内无法用于加密 / 解密。如果在等待期内取消删除,密钥就会恢复。等待期结束后,密钥材料会从 HSM 中删除,无法恢复。如果待删除的密钥被使用(发生了加密或解密的请求),CloudTrail 中会记录日志。通过监视该日志,可以确认是否仍存在依赖该密钥的资源。对于生产环境的 KMS 密钥,通过密钥策略限制 kms:ScheduleKeyDeletion 操作,就容易防止误删除。
参考资料(AWS 官方)
本页的第一手信息来源是 AWS 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。
如本页内容与官方文档不一致,请以官方文档为准。