3

语境

我正在按照 GCP 的说明在存储桶中存储机密。在将文件上传到存储桶之前,KMS 用于文件加密。

由于数据加密发生在谷歌存储之外,我对密钥轮换的一个方面有点困惑。

设想

让我们考虑一个特定的场景:

  1. 在 2017 年1 月 1日,我创建了一个密钥环和一个密钥A(实际上是A_ver1因为密钥是版本化的)。此外,密钥轮换策略设置为每年触发轮换。
  2. 在 2017 年 1 月15 日some_file.txt,我运行了一个使用A_ver1: 加密的命令curl -s -X POST "https://cloudkms.googleapis.com/v1/projects/my-project/<...>" \ -d "{\"plaintext\":\"<...SOME_FILE_CONTENT...>\"}" \ -H "Authorization:Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type:application/json"
  3. 我立即将加密结果保存为存储桶some_file.txt.encrypted
  4. 我什么都不做,在2018 年-01 月 1 日发生了密钥轮换。据我了解A_ver1被禁用A_ver2生成并激活。这两个事件准同时发生。
  5. 2018-06 -01 我意识到我需要 unencrypt some_file.txt.encrypted。我正在下载文件,然后尝试运行命令以使用A_ver2...

问题

问题 1A_ver2 :如果文件是用早期版本加密的,当我尝试解密文件时会发生什么A_ver1

问题2:如果解密失败,我应该首先做些什么来防止它?

4

2 回答 2

5

旧版本不会在轮换时自动禁用。

问题 1:当您使用特定的 CryptoKey 解密时,服务器会选择正确的版本(在Decrypt 文档中提到)。只要一个版本没有被禁用,它仍然可以使用。

问题2:在您的特定情况下,解密不会因使用旧版本而失败。

密钥轮换提到了您期望的行为,并且正如它所指出的那样,实施一种使用新版本重新加密数据并禁用旧版本的策略可能会很棘手。

如果您有任何其他问题,请告诉我。

于 2017-09-06T02:44:09.650 回答
4

在您的场景中,第 4 步中对旋转的描述并不完全正确。当您轮换 CryptoKey 时,会生成一个新的 CryptoKeyVersion 并将其作为 CryptoKey 的主要版本,但旧版本不会发生任何事情。也就是说,对于您的方案,A_ver1仍然启用,但另一个启用的版本A_ver2是主版本。

为了回答您的问题,

问题1:当你尝试解密文件时,不需要指定CryptoKeyVersion,只需要指定CryptoKey;该服务将为您提供正确的版本。如果您尝试解密已使用 CryptoKeyVersion 现在禁用(或销毁)的文件,则解密调用将失败。

问题2:这取决于您要优化什么。例如,如果您使用轮换来尝试限制使用任何一个版本加密的数据量,那么您可能不想禁用旧版本,并长时间保留这些版本。您可能只想禁用大量版本之外的密钥版本。在这种情况下,您可以跟踪用于特定数据的密钥版本,并重新加密所有受影响的数据。

于 2017-09-06T02:41:10.473 回答