4

加密密钥轮换究竟是如何工作的?我知道出于安全目的不断轮换加密密钥是一种非常好的做法,但轮换密钥需要太多工作。

案子:

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

问题:

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

其他详情:

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

3 回答 3

3

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

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

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

信封加密

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

客户万能钥匙

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

数据键

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

密钥轮换

当您为客户管理的 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 被保留,可用于解密和验证以前受保护的数据。但是只有有效的加密密钥可以用来保护新信息。

于 2021-05-04T04:38:14.067 回答
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 也能够解密密文。

于 2021-05-04T05:29:52.510 回答
1

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

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

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

于 2021-05-04T01:37:34.600 回答