加密密钥轮换究竟是如何工作的?

Posted

技术标签:

【中文标题】加密密钥轮换究竟是如何工作的?【英文标题】:How exactly does encryption key rotation work? 【发布时间】:2021-07-16 08:17:03 【问题描述】:

我知道出于安全目的不断轮换您的加密密钥是一种很好的做法,但轮换密钥需要太多的工作。

案例:

假设我有一个存储 30GB 数据的数据库,我们使用内部密钥加密静态数据,我计划每个月轮换我的密钥。

问题:

    这是否意味着我的所有数据都会被旧密钥解密并每个月都被新密钥重新加密? 整个加密-解密需要花费大量时间和计算资源。 如果我的数据库(或任何加密数据集)明天扩展,这是否意味着当我的密钥轮换时相同的过程会重复?这看起来不像是一个可扩展的解决方案。

其他细节:

    如果我们选择了轮换选项,我还看到 AWS KMS 会轮换它的密钥。 AWS 如何为所有底层服务轮换其密钥和所有加密数据?

【问题讨论】:

AWS 如何在后端执行此操作是 AWS 内部机密。但它的成本很高。每个新版本,都会增加成本。这笔费用可能会补偿 AWS 用来为您透明地进行加密解密的所有这些计算资源。 谢谢@Marcin。同意。 AWS 有自己的标准,但是有没有一种可能的解决方案可以以低廉的成本为我们自己的数据集(我们自己的密钥)做这件事? 通常您不会重新加密整个数据库。您可以使用多个级别的键,例如密钥推导。请注意,这很简单,例如使用不同的密钥加密密钥。如果数据保持静态,则无需使用不同的密钥对其进行重新加密,但您可能希望更换让您定期访问数据的密钥(您可以防止密钥泄露,而不是密钥被暴力破解) - 强制或解密数据)。这也是您可以更改硬盘加密密码的原因。您只需重新计算主密钥,数据密钥保持静态。 请注意,这个问题不包含任何编程,所以它在Information Security 的地方要好得多。这对于Cryptography 来说有点过于具体了。 谢谢@MaartenBodewes 这真的很有用。我会阅读更多关于它的内容。 【参考方案1】:

这里有两个重要的链接可以帮助您了解 AWS 中的信封加密和密钥轮换。

    https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html

我从上面的链接中引用了一些重要的概念:

Envelop encryption:

当您加密您的数据时,您的数据受到保护,但您必须保护您的加密密钥。一种策略是对其进行加密。信封加密是用一个数据密钥加密明文数据,然后用另一个密钥加密数据密钥的做法。

Customer Master Keys

CMK 在 AWS KMS 中创建。对称 CMK 和非对称 CMK 的私有密钥永远不会让 AWS KMS 处于未加密状态。此策略与数据键不同。 AWS KMS 不会存储、管理或跟踪您的数据密钥。您必须在 AWS KMS 之外使用它们。

Data Keys

数据密钥是可用于加密数据的加密密钥,包括大量数据和其他数据加密密钥。您可以使用 AWS KMS 客户主密钥 (CMK) 生成、加密和解密数据密钥。但是,AWS KMS 不会存储、管理或跟踪您的数据密钥,也不会使用数据密钥执行加密操作。您必须在 AWS KMS 之外使用和管理数据密钥。

Key rotation

当您为客户管理的 CMK 启用自动密钥轮换时,AWS KMS 每年都会为 CMK 生成新的加密材料。 AWS KMS 还永久保存 CMK 的旧加密材料,以便用于解密其加密的数据。在您删除 CMK 之前,AWS KMS 不会删除任何轮换密钥材料。

密钥轮换中的一个重要概念是 HSM 支持密钥(HBK): (https://docs.aws.amazon.com/kms/latest/cryptographic-details/key-hierarchy.html)

在特定 CMK 的层次结构中,可以将 HBK 视为 CMK 的一个版本。当您想要通过 AWS KMS 轮换 CMK 时,会创建一个新的 HBK 并将其与 CMK 关联作为 CMK 的活动 HBK。旧的 HBK 被保留,可用于解密和验证以前受保护的数据。但只有有效的加密密钥才能用于保护新信息。

【讨论】:

【参考方案2】:
Does that mean all my data will be decrypted by the old key and re-encrypted by the new one every month?

正如已经回答的那样,简单的答案是否定的。但是之前的答案错过了密钥轮换的目的

密钥轮换背后的原因是限制由单个密钥加密的数据量

How does AWS manage to rotate it's keys and all encrypted data for all the underlying services?

基本思想(至少在 KMS 中)是,KMS 密钥不是单个密钥,而是一组密钥,最后一个是当前密钥。您可以将其想象为“关键版本控制”。每次密钥轮换后,都会保存当前密钥,因此您仍然可以解密先前加密的密文(数据密钥 - 如其他答案中所述)。我相信在 KMS 中这整个集合是隐藏的,但 Azure KeyValt 将整个集合显示为密钥版本。

 The whole encryption-decryption would take a lot of time and compute resources

不,你不需要做任何事情。 AWS 为您管理“关键版本”。即使您按照另一个答案中的建议重新加密信封密钥,您实际上也无法实现密钥轮换的目的。

KSM 生成的密文也必须包含一些密钥版本的标识,因此即使在密钥轮换后,KMS 也能够解密密文。

【讨论】:

【参考方案3】:

您需要熟悉Envelope Encryption。每次您想在 AWS 中加密数据时,您首先要生成一个唯一的数据密钥。然后,您使用此密钥加密您的数据。这个键不是旋转的键!

然后您获取此密钥,并使用来自 KMS 的密钥对其进行加密。现在如果要解密这个数据,首先要得到解密后的数据密钥,要解密这个数据密钥,就需要KMS密钥。

现在如果您想轮换密钥,您不需要重新加密所有数据,而是需要使用要从 KMS 轮换的密钥解密数据密钥,然后获取新密钥,然后重新加密未加密的数据密钥。这样您就不需要重新加密所有数据。

【讨论】:

密钥轮换的目的是限制由单个密钥加密的数据量。如果在密钥轮换后要重新加密数据(甚至是数据密钥),则系统无法实现密钥轮换的目的。 请注意此评论与我的回答有何关联。每个数据密钥都是唯一的,但一个 KMS 密钥将加密许多数据密钥。 AWS 中的密钥轮换不会导致必须重新加密整个数据:forums.aws.amazon.com/thread.jspa?threadID=253682 是的,没错。即使使用限制加密数据量的封装加密,旋转也是多个行业标准(认证)所必需的能力。而且我相信论坛中的那个人也没有抓住重点。 CMS 可用于 AWS 服务,您可以在其中轮换密钥。无需复制或重新加密。

以上是关于加密密钥轮换究竟是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

Azure磁盘加密Linux VM密钥轮换

Azure 存储帐户 - 加密

对称加密非对称加密公钥私钥究竟是个啥

探究公钥私钥对称加密非对称加密hash加密数字签名数字证书CA认证https它们究竟是什么,它们分别解决了通信过程的哪些问题。

挖矿之王!Coinhive幕后操纵者究竟是何方神圣?

Amazon S3 加密