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

17

加密密钥轮换是如何工作的?我知道为了安全起见,持续轮换加密密钥是一种非常好的做法,但是轮换密钥需要太多的工作。

案例:

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

问题:

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

其他详情:

  1. 我还看到AWS KMS如果选择了旋转选项,则会旋转其密钥。 AWS如何管理其密钥和所有基础服务的所有加密数据的旋转?

AWS在后台如何实现这一点是AWS的内部机密。但它很昂贵。每个新版本都会增加成本。这些成本可能会补偿AWS用于为您透明地进行加密解密所使用的所有计算资源。 - Marcin
感谢@Marcin。同意。AWS有自己的标准,但是否有可能以低廉的成本为我们自己的数据集(针对我们自己的密钥)找到解决方案? - Raghav Mishra
4
通常情况下,您不会重新加密整个数据库。您可以使用多层键,例如密钥派生。请注意,例如使用不同的密钥加密密钥很简单。如果数据保持静态,则无需使用不同的密钥重新加密它,但您可能希望定期更换让您访问数据的密钥(您防止密钥泄漏,而不是防止密钥被暴力破解或数据被解密)。这也是为什么您可以更改HDD加密的密码的原因。您只需要重新计算主密钥,数据密钥保持静态。 - Maarten Bodewes
2
请注意,此问题不包含任何编程内容,因此最好将其放在[security.se]上。它对于[cryptography.se]来说有点太具体解决方案了。 - Maarten Bodewes
谢谢@MaartenBodewes,那真的很有用。我会再多读一些相关内容。 - Raghav Mishra
我也建议将这个问题转移到https://security.stackexchange.com/。 - jasie
3个回答

11
你需要熟悉"信封加密"。每次想要在AWS中加密数据时,你首先会生成一个唯一的数据密钥,并用此密钥加密数据。这个密钥不是轮换的密钥!
然后,你将使用KMS中的密钥对该密钥进行加密。现在,如果要解密此数据,则必须先获取解密的数据密钥,并且为了解密此数据密钥,你需要KMS密钥。
现在,如果要轮换密钥,你不需要重新加密所有数据,而是需要使用来自KMS的待轮换密钥解密数据密钥,然后获取新密钥并重新加密未加密的数据密钥。这样你就不需要重新加密所有数据。

1
密钥轮换的目的是限制单个密钥加密的数据量。如果在密钥轮换后需要重新加密数据(甚至是数据密钥),那么系统就无法实现密钥轮换的目的。 - gusto2
2
不确定这个评论与我的答案有什么关系。每个数据密钥都是唯一的,但一个KMS密钥可以加密多个数据密钥。在AWS中进行密钥轮换不会导致必须重新加密整个数据:https://forums.aws.amazon.com/thread.jspa?threadID=253682 - Derrops
是的,没错。即使使用了限制加密数据量的封装加密,旋转也是多个行业标准(认证)所要求的能力。我相信论坛中的那个人也误解了重点。CMS可用于AWS服务,您可以在那里旋转密钥,而无需复制或重新加密。 - gusto2

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

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

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

信封加密:

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

客户主密钥

CMKs 在 AWS KMS 中创建。对称 CMK 和非对称 CMK 的私钥永远不会以未加密的形式离开 AWS KMS。这种策略与数据密钥不同。AWS KMS 不存储、管理或跟踪您的数据密钥。您必须在 AWS KMS 之外使用它们。

数据密钥

数据密钥是加密密钥,您可以使用它来加密数据,包括大量数据和其他数据加密密钥。您可以使用AWS KMS客户主密钥(CMK)生成、加密和解密数据密钥。但是,AWS KMS不存储、管理或跟踪您的数据密钥,也不执行与数据密钥的加密操作。您必须在AWS KMS之外使用和管理数据密钥。 密钥轮换 启用客户管理的CMK的自动密钥轮换后,AWS KMS每年为CMK生成新的加密材料。AWS KMS还永久保存CMK的旧加密材料,以便用于解密它加密的数据。AWS KMS不会删除任何旋转密钥材料,直到您删除CMK。
密钥轮换中一个重要概念是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被保留下来可以用于解密和验证先前受保护的数据,但只有活动的加密密钥才能用于保护新的信息。

6
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 KeyVault显示了整个密钥版本集合。
 The whole encryption-decryption would take a lot of time and compute resources

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接