Google 的密钥管理系统:密钥轮换后数据未加密

Igo*_*nko 3 google-cloud-storage google-cloud-platform google-cloud-kms

语境

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

由于数据加密发生在 Google 的存储之外,因此我对密钥轮换的一个方面感到有些困惑。

设想

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

  1. 在2017-01- 01我创建了一个钥匙环和钥匙A(这实际上是A_ver1由于密钥版本)。此外,密钥轮换策略设置为每年触发轮换。
  2. 在2017-01- 15我运行一个命令加密some_file.txtA_ver1curl -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-01 发生了密钥轮换。据我了解A_ver1被禁用A_ver2被生成和激活。这两个事件几乎同时发生。
  5. 2018-06 -01 我意识到我需要解密some_file.txt.encrypted. 我正在下载文件,然后尝试运行命令以使用A_ver2...

问题

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

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

小智 5

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

为了回答您的问题,

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

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


小智 5

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

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

问题2:在您的特定场景中,解密不会因为使用旧版本而失败。

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

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