使用 CiphertextBlob 作为字符串获取 InvalidCiphertextException

Getting InvalidCiphertextException with CiphertextBlob as String

我正在尝试使用 AWS KMS 解密字符串,但收到 InvalidCiphertextException 错误(异常名称后没有更多信息)。

我最初是在节点 js lambda 中解密,使用环境变量作为 encryptedString 的源:

var params = {
    CiphertextBlob: Buffer.from(encryptedString, 'base64')
};
kms.decrypt(params, function(err, data) {
    if (err) {
        ...
    } else {
        ...
    }
}

我也尝试过将 CiphertextBlob 值作为字符串,即:

CiphertextBlob: encryptedString

原来用于加密值的KMS密钥是一个对称的CMK,所以我相信我应该不需要传入密钥ID。

我也通过 awscli 尝试了同样的事情(将 ciphertext-blob 作为字符串传递)但得到了同样的错误:

aws kms decrypt --ciphertext-blob <encrypted string value> --query PlainText | base64 --decode

传入密钥 ID 也没有效果。

我已经使用在线工具验证了加密后的字符串是base64。我不太了解 base64 编码,所以不确定这是否足以证明密文有效。

我确定我在一些基本问题上失败了 - 我的加密字符串不是 base64 或不是解密所期望的,或者我可能缺少一些额外的解密参数。

提前致谢。

根据评论。

问题与解密 SSM 参数有关。因此,在解密过程中必须提供 加密上下文 。来自 docs:

Parameter Store includes this encryption context in calls to encrypt and decrypt the MyParameter parameter in an example AWS account and region.

"PARAMETER_ARN":"arn:aws:ssm:<REGION_NAME>:<ACCOUNT_ID>:parameter/<parameter-name>"

因此,如果您不使用 get_parameterWithDecryption 选项设置为 True,您必须在使用期间提供上述 加密上下文 KMS decrypt 操作。