更快的 AWS KMS 对称密钥轮换的好奇案例 安全博客
快速的 AWS KMS 对称密钥轮换
关键点
在这篇文章中,我们将介绍 AWS 密钥管理服务AWS KMS推出的更快的自动对称密钥轮换选项,以及按需轮换、改进的轮换可视性和对已轮换两次或更多次的对称密钥价格上限等功能。了解这些功能的背景及为何密钥轮换如此重要,并获取我们的最佳实践建议。
导言
如今,AWS KMS 正在推出更快速的自动对称密钥轮换选项,此外还引入了按需轮换、轮换可视性改进及所有经过两次或更多轮换的对称密钥的价格上限。在本文中,我将讨论这些能力与变更,也会回顾对称加密密钥轮换的历史,并提供我们对何时需要轮换及频率的建议。如果你对 AWS KMS 的自动密钥轮换感到好奇它为何存在、何时启用以及何时按需使用请继续阅读。
我们是如何走到这一步的
加密密钥轮换有着悠久的历史。如果你是罗马时期的凯撒,迫切需要将敏感信息传递给指挥官,你可能会使用密钥和密码来加密保护通信。在那个时代,已经有众多使用加密技术保护通信的实例,因此标准的替代密码术,即用字母表中相距一定数目的字母替换每个字母,便称为“凯撒密码”。在这个过程中,密码是替代机制,而密钥则是用于找到替代字母的字母偏移数。
凯撒采用这种对称密钥密码的挑战在于,双方凯撒及他的指挥官都需共享密钥并确保这些密钥不被窥探。如果在“阿庇安大道”传输过程中,凯撒的攻击计划的密钥被秘密截获,那么凯撒就无法得知。但如果他定期轮换密钥,就能限制消息被读取的范围,从而降低风险。从公元前 52 年创建的密钥发送的消息不会自动适用于次年的消息,前提是凯撒每年轮换一次密钥,而新密钥对敌人不可见。密钥轮换可以减少数据泄露的范围即威胁者所能查看的信息,当部分而非全部密钥被泄露时,这尤为重要。
时光快进到 1970 年代至 2000 年代
在现代,专为数字计算机系统设计的加密算法使得密钥不再沿着阿庇安大道传输。相反,它们在数字系统之间流动,存储在未受保护的内存中,有时还会为方便而打印。尽管如此,密钥泄露的风险依然存在,因此仍然需要进行密钥轮换。此期间,发展出了更重要的安全保护措施,采用软件和硬件技术来保护数字加密密钥并减少轮换的需求。美国国家标准与技术研究所NIST发布了专门的安全标准 FIPS 140 ,明确了这些加密模块的安全要求。
现代加密还面临密钥磨损的风险
除了应对密钥泄露的风险外,密钥轮换还有另一个重要好处,尤其是在数字加密时代下加密密钥磨损。一个密钥在被过多使用的情况下,可能会逐渐变弱或“磨损”。如果你在同一对称密钥下加密了大量数据,并且如果威胁者获得了足够的密文,他们可以对密文进行分析,泄露有关密钥的信息。目前,对于防止密钥磨损的加密建议可能会根据加密方式、使用的密码和密钥大小而有所不同。然而,即使是一个设计良好的 AESGCM 实现,具有强大的初始化向量IV和较大密钥大小256 位,也应该限制在使用同一密钥加密不超过 43 亿条消息232,并且每条消息的最大大小不超过 64 GiB。
在 2000 年代初,为帮助联邦机构和商业企业找到密钥轮换的最佳实践,NIST 正式化了多项加密密钥轮换的最佳实践,并在 NIST SP 80057 密钥管理建议 标准中进行了说明。整体阅读非常有益,特别鼓励查看第 53 节,指出了在不同环境下确定特定密钥用于保护数据的适当时间长度加密期的方法。根据这些指南,设定加密期以及在这些期间内轮换密钥有以下一些好处:
53 加密期
加密期是特定密钥被合法实体授权使用的时间跨度,或给定系统的密钥将保持有效的时间。适当定义的加密期:
限制可用于密钥分析的信息量例如,使用该密钥加密的明文和密文对数量;限制单个密钥泄露的暴露程度;限制特定算法的使用例如,其有效寿命的预估;限制获得密钥之外未经授权披露的时间;限制因意外泄露加密密钥而可能泄露信息的时间;限制进行复杂计算分析的时间。有时候,加密期由任意时间段或密钥保护的数据的最大数量定义。然而,加密期的确定涉及到暴露的风险和后果,在选择加密期时应谨慎考虑见第 564 节。
来源:NIST SP 80057 密钥管理建议,第 34 页
在将这一指导方针应用于你自己的加密密钥时,你需要理解在你的密钥管理系统中,此风险发生的可能性。使用托管服务来保护和使用密钥时,这一评估可能会更为复杂。
进入2010年代:构想一个可能不需要自动密钥轮换的密钥管理系统
当我们于 2014 年设立 AWS 的托管服务以应对加密密钥管理并帮助客户保护其 AWS 加密工作负载时,我们十分注意我们的密钥需要尽可能强化、具备弹性,并受到内外部威胁行为者的保护。我们同时意识到我们的密钥需要具备长期的可用性,并内置保护机制以防止密钥磨损。这两大设计原则我们的密钥受到充分保护以降低泄露风险,以及我们的密钥安全,防止磨损是我们建议限制密钥轮换或在没有合规要求的情况下考虑禁用轮换的主要原因。在 AWS KMS 中,定期密钥轮换对你的工作负载提供的安全益处有限。
关于密钥泄露这一点,AWS KMS 中的密钥以未加密的明文形式无法被任何人访问,包括 AWS 操作员。与凯撒的密钥或者现代软件应用中的加密密钥不同,AWS KMS 生成的密钥绝不会在外部以明文形式存在,而是在其使用的司法层 FIPS 1402 的硬件安全模块HSM中。有关 AWS KMS HSM 如何帮助你防止未经授权使用密钥的更多信息,请查看相关帖子 AWS KMS 现已通过 FIPS 1402 安全级别 3 这对你意味着什么?。与许多商业 HSM 解决方案不同,AWS KMS 甚至不允许密钥以加密形式从服务中导出。原因是:拥有适当解密密钥的外部行为者可能会在服务之外以明文形式曝光 KMS 密钥。这种对密钥材料的强化保护是客户希望进行密钥轮换的主要安全原因。客户通常将轮换视为降低密钥泄露的护城河。然而,由于 KMS 密钥只能在我们的 HSM 中使用,并且不能导出,所以密钥曝光的可能性变得难以想象。这意味着,作为保护密钥的手段而进行的密钥轮换在安全价值上是有限的。HSM 依然是保护你的密钥免受未经授权访问的边界,无论密钥被轮换多少次。
如果我们认为 AWS KMS 中明文密钥泄露的风险足够低,那么我们仍然需要关注密钥磨损吗?AWS KMS 通过使用密钥派生函数KDF来降低密钥磨损的风险。该函数为每个加密或解密请求生成一个唯一的派生 AES 256 位密钥。这些派生加密密钥每次都是不同的,即使你对同一消息数据在同一 KMS 密钥下进行了相同的密钥调用。我们的密钥派生方法的加密细节在 AWS KMS 加密细节文档中提供,KDF 操作使用 KDF 的计数器模式,结合 HMAC 和 SHA256。这些 KDF 操作使得 KMS 密钥的加密磨损风险与直接调用并使用单独加密操作的密钥大为不同。有关 KMS 密钥保护措施及其加密磨损分析的详细信息,请参见大规模云密钥管理 白皮书,但重要的是,单个 KMS 密钥在无磨损风险的情况下可用于超过 1 万亿250次加密请求。
网络魔法梯子事实上,根据 NIST 80057 指南,KMS 密钥NIST 中称为的密钥包装密钥用于唯一的数据显示密钥时,其加密期可能会更长。
“对于这种非常短期的密钥包装密钥,适当的加密期即包括来源和接收方使用的时间段是一次通信会议。假定这些包装密钥不会以包装形式保存,因此密钥包装密钥的来源使用期和接收方使用期是相同的。在其他情况下,密钥包装密钥可能会保留,以便将被包装的文件或消息以后能恢复。在这种情况下,接收方使用期可能会显著长于密钥包装密钥的来源使用期,且加密期可能持续几年。”
来源:NIST 80057 密钥管理建议,第 5367 节。
那么我们为何一开始在 AWS KMS 中构建密钥轮换?
虽然我们建议 KMS 密钥的轮换通常并不必要以提高密钥安全性,但您必须在自身独特情况下考虑这一指导方针。内审员、外部合规审查员或甚至您自己的客户可能要求您提供定期轮换所有密钥的证据。一些推荐密钥轮换的法规和标准组织的简要列表包括前述的 NIST 80057、网络安全中心CIS基准、ISO 27001、系统和组织控制SOC2、支付卡行业数据安全标准PCI DSS、COBIT 5、HIPAA 和联邦金融机构检查委员会FFIEC手册等。
在受监管行业的客户必须考虑其组织中所有加密系统的总和。对审查哪些系统包括 HSM 保护、哪些系统未提供额外保护以防止加密磨损或哪些程序以稳健可靠的方式实施加密进行清点,对于任何组织来说都是一项复杂的任务。如果客户在各系统的设计和操作中没有获得足够的加密专业知识,那么统一规定定期的密钥轮换便是一个更安全的选择。
因此,我们提供了一种自动的、便捷的方法来旋转对称 KMS 密钥。轮换使客户能够向其利益相关者展示此密钥管理最佳实践,而无需解释为何选择不这样做。
图 3 详细说明了 KMS 如何在每次密钥轮换期间在现有 KMS 密钥中附加新的密钥材料。
我们设计的对称 KMS 密钥轮换对密钥管理员和使用这些密钥的构建者的操作影响较小。如图 3 所示,配置为轮换的 keyID 在每次轮换时会附加新的密钥材料,同时保留之前版本的现有密钥材料。这种附加方法实现了轮换,而无需解密和重新加密使用前一版本密钥的现有数据。在给定 keyID 下的新的加密请求将使用最新的密钥版本,而在该 keyID 下的解密请求将使用相应版本。调用者不必指明想要用于加密 / 解密的密钥版本,AWS KMS 透明地管理这一过程。
有些客户认为,密钥轮换事件应该强制重新加密之前用旧密钥版本加密的所有数据。但当 AWS KMS 自动轮换以使用新密钥版本进行加密操作时,这并非必要。用于解密操作所需的旧密钥版本依然在服务中安全保存。
我们已提供每年自动计划的密钥轮换事件多年。最近,我们收到了部分客户的反馈,他们希望比一年的固定期限更频繁地轮换密钥。在本帖的最后部分,我们将介绍新推出的功能以满足这些需求。
AWS KMS 中更多的密钥轮换选项及价格降低
了解了我们对密钥轮换的思考后,接下来就谈谈我们在这一领域推出的新选项:
可配置的轮换周期:在使用自动密钥轮换时,您之前的唯一选择是固定的年度轮换周期。现在,您可以将轮换周期设置为从 90 天到 2560 天略超过七年。您可以在任何时间调整该周期,以重置将来的轮换时间。设定为轮换的现有密钥将继续每年轮换。
KMS 密钥的按需轮换:除了更灵活的自动密钥轮换外,您还可以通过 AWS 管理控制台、AWS 命令行界面CLI或使用新的 RotateKeyOnDemand API 调用按需轮换。您可能偶尔需要按需轮换来测试工作负载或验证并证明密钥轮换事件。调用按需轮换不会影响该密钥的任何即将计划的轮换时间线。
注意:我们对 KMS 密钥设置了按需旋转的默认配额为 10 个。虽然按需密钥轮换的需求应当不常见,但您可以请求提高此配额。如果频繁需要测试或验证即时密钥轮换,建议删除测试密钥,并在新密钥上重复调用 RotateKeyOnDemand 操作。
改进的可视性:您现在可以使用 AWS KMS 控制台或新的 ListKeyRotations API 查看以前的密钥轮换事件。过去,验证您的 KMS 密钥是否已轮换一直是一个挑战。现在,对于已经进行过计划或按需轮换的 KMS 密钥,所有先前的轮换都将在控制台中列出,并通过 API 可获取。 超过两次轮换的密钥价格上限:我们还引入了自动密钥轮换的价格上限。之前,KMS 密钥的每次年度轮换会增加 1 美元的费用。现在,对于自动或按需轮换的 KMS 密钥,第一次和第二次轮换的费用为每月增加 1 美元按小时计算,但此价格上涨在第二轮时封顶。第三次及以上的轮换将不再收取费用。从 2024 年 5 月起,已进行三次或更多年度轮换的现有客户将看到这些密钥的费用减少至每月 3 美元按比例计算。总结
在这篇文章中,我强调了现在在 AWS KMS 中可用的更灵活的密钥轮换选项,并对密钥轮换存在的原因进行了更广泛的探讨。我们知道,许多客户在合规方面需要证明密钥的轮换,越来越多地需要证明更快速或即时的密钥轮换。通过新的降低价格和更便利的验证密钥轮换事件的方法,我们希望这些新功能能让您的工作更加轻松。

灵活的密钥轮换功能现在已在所有 [AWS 区域](https//awsamazoncom/aboutaws/globalinfrastructure/regionalproductservices