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

问题描述

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

案例:

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

问题:

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

其他细节:

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

解决方法

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

  1. https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html
  2. 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 被保留下来,可用于解密和验证以前受保护的数据。但只有有效的加密密钥才能用于保护新信息。

,

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

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

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

,
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 也能够解密密文。