データキーの生成 - AWS Key Management Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

データキーの生成

承認されたユーザーであれば GenerateDataKey API (および関連 API) を使用して、特定のタイプのデータキーまたは任意の長さのランダムキーをリクエストできます。このトピックでは、この API オペレーションの簡略化されたビューを提供します。詳細については、AWS Key Management Service API リファレンスの GenerateDataKey API を参照してください。

次に示すのは、GenerateDataKey のリクエスト構文です。

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

リクエストは以下のデータを JSON 形式で受け入れます。

KeyId

データキーの暗号化に使用するキーのキー識別子です。この値は、対称暗号化 KMS キーを識別する必要があります。

このパラメータは必須です。

NumberOfBytes

生成するバイト数を含む整数値です。このパラメータは必須です。

発信者は、KeySpec または NumberOfBytes を指定する必要があります。両方を指定することはできません。

EncryptionContext

(オプション) キーを使用する暗号化および復号化のプロセスで認証する追加データを含む名前と値のペアです。

GrantTokens

(オプション) キーを生成または使用するアクセス許可を提供する権限を示す、許可トークンのリストです。許可や許可トークンの詳細については、AWS Key Management Service デベロッパーガイドの「Authentication and access control for AWS KMS」を参照してください。

コマンドを認証すると、 は AWS KMS KMS キーに関連付けられた現在のアクティブな EKT を取得します。 AWS KMS ホストとドメイン内の HSM 間の保護されたセッションを介して、提供されたリクエストと暗号化コンテキストとともに EKT を HSM に渡します。

HSM は、次の操作を実行します。

  1. リクエストされたシークレットマテリアルを生成し、揮発性メモリに保持します。

  2. リクエストで定義された KMS キーのキー ID と一致する EKT を復号化し、アクティブな HBK = Decrypt(DKi, EKT) を取得します。

  3. ランダムなノンス N を生成します。

  4. HBK および N から、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 Service API リファレンスReEncrypt を参照してください。