生成数据密钥 - AWS Key Management Service

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

生成数据密钥

授权用户可以使用 GenerateDataKey API(和相关 API)请求特定类型的数据密钥或任意长度的随机密钥。本主题提供此 API 操作的简化视图。有关详细信息,请参阅《 GenerateDataKey API 参考》中的 AWS Key Management Service API

以下是 GenerateDataKey 请求语法。

{ “EncryptionContext”: {“string” : “string”}, “GrantTokens”: [“string”], “KeyId”: “string”, “NumberOfBytes”: “number” }

请求接受采用 JSON 格式的以下数据。

KeyId

用于加密数据密钥的密钥的密钥标识符。此值必须标识对称加密 KMS 密钥。

此参数为必需参数。

NumberOfBytes

包含要生成的字节数的整数。此参数为必需参数。

调用者必须提供 KeySpecNumberOfBytes,但不能同时提供两者。

EncryptionContext

(可选)包含在使用密钥的加密和解密过程中要进行身份验证的其他数据的名称-值对。

GrantTokens

(可选)表示提供生成或使用密钥的权限的授权令牌的列表。有关授权和授权令牌的更多信息,请参阅 AWS Key Management Service 开发人员指南中的 AWS KMS 的身份验证和访问控制

AWS KMS 在对命令进行身份验证后,将获取与 KMS 密钥相关的当前活动 EKT。它通过 AWS KMS 主机和域中 HSM 之间受保护的会话将 EKT 连同您提供的请求和任何加密上下文传递给 HSM。

HSM 执行以下操作:

  1. 生成请求的机密材料并将其保存在易失性存储器中。

  2. 解密与请求中定义的 KMS 密钥的密钥 ID 匹配的 EKT 以获取主动 HBK = Decrypt(DKi, EKT)

  3. 生成一次性的随机数 N

  4. HBKN 生成 256 位 AES-GCM 派生的加密密钥 K

  5. 加密机密材料 ciphertext = Encrypt(K, context, secret)

GenerateDataKey 通过 AWS KMS 主机与 HSM 之间的安全通道将明文机密材料和密文返回给您。然后,AWS KMS 通过 TLS 会话将其发送给您。AWS KMS 不会保留明文或密文。如果没有密文、加密上下文和使用 KMS 密钥的授权,则无法返回底层机密。

以下是响应语法。

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

数据密钥的管理由您作为应用程序开发人员负责。对于使用 AWS KMS 数据密钥的最佳实践客户端加密(但不是数据密钥对),您可以使用 AWS Encryption SDK

数据密钥可以以任何频率轮换。此外,数据密钥可以使用 ReEncrypt API 操作在不同的 KMS 密钥或轮换的 KMS 密钥下重新加密。有关详细信息,请参阅 AWS Key Management ServiceAPI 参考ReEncrypt中的。