谷歌云 KMS:加密有效但解密失败

Posted

技术标签:

【中文标题】谷歌云 KMS:加密有效但解密失败【英文标题】:Google cloud KMS: encryption works but decryption fails 【发布时间】:2018-06-18 16:35:36 【问题描述】:

我正在尝试使用 google KMS 工具解密令牌。 在本地运行它,出于某种原因,加密似乎有效,但解密无效。

我正在运行以下代码:

import base64
import googleapiclient.discovery
kms_client = googleapiclient.discovery.build('cloudkms', 'v1')
crypto_keys = kms_client.projects().locations().keyRings().cryptoKeys()
name = "projects/my-project/locations/my-loc/keyRings/my-kr/cryptoKeys/my-key"
request = crypto_keys.decrypt(name=name, body='ciphertext': base64.b64encode("my text").decode('ascii'))
response = request.execute()

最后一行返回400错误:

HttpError: <HttpError 400 when requesting https://cloudkms.g[...]ion:decrypt?alt=json 
returned "Decryption failed: verify that 'name' refers to the correct CryptoKey.">

然而,这个名字实际上似乎是正确的。 令人惊讶的是,将decrypt 的调用替换为encrypt,我得到了一个有效的输出。

我错过了一个明显的错误,还是应该在项目的 github 上打开一个问题?

编辑: 我试图解密纯文本,这当然没有多大意义(但错误信息有点误导了我)。

【问题讨论】:

看起来您正在尝试解密纯文本? 哦,我的错,我有点假设它仍然会解密某些东西,但显然情况并非如此。再试一次。 您认为值得我们在这里更改错误消息吗?我们应该把它改成什么?感谢您使用 Google Cloud KMS! 好吧,我想没有明显的方法可以确定一个人是否使用了错误的密钥或密文是否错误。事后看来,我做了一个微不足道的错误操作,所以我不确定是否有更好的错误信息可以给出。也许更像是“密文与选择的 CryptoKey 不兼容? 我已经提交了一个内部问题 [b/134206804] 以尽可能改进错误消息,我们会看看我们是否可以抽出时间将其作为“产品卓越”改进。感谢您的报告和参与,帮助我们改进产品,感谢您使用 GCP 和 Cloud KMS! 【参考方案1】:

确保您尝试解密的密文是使用相同的密钥加密的。如果您使用另一个密钥进行加密,KMS 会告诉您它无法找到密钥,而实际上已找到密钥但无法用于解密密码。

我认为错误信息“有点”误导。

【讨论】:

以上是关于谷歌云 KMS:加密有效但解密失败的主要内容,如果未能解决你的问题,请参考以下文章

谷歌云健康检查失败

谷歌云构建不使用环境变量替换 Firebase 令牌

尝试在谷歌云运行上安装日志记录但它失败了

谷歌云构建:在谷歌云存储库上克隆私有存储库失败

谷歌云函数:返回有效的 JSON

谷歌云获取存储桶 - 适用于 cli 但不适用于 python