

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Decrypt
<a name="decrypt-operation"></a>

对解密密文值 AWS KMS 的调用接受加密值 ciphertext 和加密上下文。 AWS KMS 使用[AWS 签名版本 4 签名的请求](https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html)对呼叫进行身份验证，并从密文中提取包装密钥的 HBKID。HBKID 用于获取解密密文、密钥 ID 和密钥 ID 的策略所需的 *EKT*。请求基于密钥策略、可能存在的授权以及引用密钥 ID 的任何关联 IAM 策略进行授权。`Decrypt` 功能与加密功能类似。

以下是 `Decrypt` 请求语法。

```
{
	"CiphertextBlob": "blob",
	"EncryptionContext": { "string" : "string" }
	"GrantTokens": ["string"]
}
```

以下是请求参数。

**CiphertextBlob**  
包括元数据的密文。

** EncryptionContext**  
（可选）加密上下文。如果在 `Encrypt` 功能中指定了此参数，则此处也必须指定，否则解密操作将失败。有关更多信息，请参阅 *AWS Key Management Service 开发人员指南*中的[加密内容](https://docs.aws.amazon.com/kms/latest/developerguide/encrypt-context.html)。

**GrantTokens**  
（可选）表示提供执行解密权限的授权的授权令牌列表。

*密文*和 *EKT* 连同加密上下文通过经身份验证的会话发送给 HSM 用于解密。

HSM 运行以下操作：

1. 解密 *EKT* 以获取 *HBK = Decrypt(DKi, EKT)*。

1. 从*密文*结构中提取一次性的 *N*。

1. 从 *HBK* 和 *N* 重新生成 256 位 AES-GCM 派生的加密密钥 *K*。

1. 解密*密文*以获取 *plaintext = Decrypt(K, context, ciphertext)*。

生成的密钥 ID 和纯文本通过安全会话返回给 AWS KMS 主机，然后通过 TLS 连接返回给调用的客户应用程序。

以下是响应语法。

```
{
    "KeyId": "string",
    "Plaintext": blob
}
```

如果调用的应用程序希望确保明文的真实性，则必须验证返回的密钥 ID 是否为预期的密钥 ID。