

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

# データキーの生成
<a name="generating-data-keys"></a>

承認されたユーザーであれば GenerateDataKey API (および関連 API) を使用して、特定のタイプのデータキーまたは任意の長さのランダムキーをリクエストできます。このトピックでは、この API オペレーションの簡略化されたビューを提供します。詳細については、*AWS Key Management Service API リファレンス*の GenerateDataKey API を参照してください。
+ [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)
+ [GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)
+ [GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html)
+ [GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html)

次に示すのは、`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](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html)」を参照してください。

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

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

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

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

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

1. *HBK* および *N* から、256 ビットの AES-GCM 導出暗号化キー *K* を生成します。

1. シークレットマテリアル *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](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/)。

データキーは任意の頻度でローテーションできます。さらに、データキーは、`ReEncrypt` API オペレーションを使用して、異なる KMS キーまたはローテーションされる KMS キーに再暗号化することができます。詳細については、*AWS Key Management Service API リファレンス*の [ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) を参照してください。