GCP-DLP-解密失败:使用KMS封装的密钥时,密文无效错误

问题描述

在尝试使用GCP DLP进行POC时,面临以下问题:

log:

Received the following error message from Cloud KMS when unwrapping KmsWrappedCryptoKey
 "projects/<<PROJECT_ID>>/locations/global/keyRings/<<KMS_KEY_RING>>/cryptoKeys
/<<KMS_KEY_NAME>>": Decryption Failed: the ciphertext is invalid. 

我刚刚使用KMS中的generate key选项和一个基本的DLP模板创建了密钥和密钥环,以使用加密确定性令牌对数据进行伪别名化。我提供的包装密钥是简单的base-64格式密钥。当在控制台中用数据测试该模板时,我遇到了这个问题。尝试加密数据时,应用程序日志中也会复制相同的问题。

PS :我们已尝试使用Open SSL生成手动密钥,并将其导入KMS。我们仍然面临这个问题。

附加屏幕快照以供参考:

enter image description here

解决方法

找出这种情况下的问题。

问题在于我们创建DLP模板中给出的包装密钥的方式。以下是生成包装密钥的步骤:

  1. 选择包装的键(可以是任何东西。字符串,随机文本等)
  2. 在上面的步骤中,使用将在DLP模板中使用的KMS密钥对包装的密钥进行加密。
  3. 将上述加密密钥转换为base 64格式,并在DLP模板中使用它。

以下是按相同顺序执行上述步骤的命令:

openssl rand 16 > secret.txt

这将生成16个字节的随机字符串。大小必须为16,24,32(强制性)之一

gcloud kms encrypt --location global --keyring <key-ring-name> --key \
<key-name> --plaintext-file secret.txt --ciphertext-file \
mysecret.txt.encrypted

这将包含随机字符串。

base64 mysecret.txt.encrypted

在DLP模板中使用它。

这个答案帮助我弄清楚了这个问题:https://stackoverflow.com/a/60513800/6908062