AWS KMS ECDH キーリング - AWS データベース暗号化 SDK

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

AWS KMS ECDH キーリング

クライアント側の暗号化ライブラリの名前が AWS Database Encryption に変更されましたSDK。このデベロッパーガイドでは、引き続き DynamoDB Encryption Client に関する情報を提供します。
重要

AWS KMS ECDH キーリングは、マテリアルプロバイダーライブラリのバージョン 1.5.0 でのみ使用できます。

AWS KMS ECDH キーリングは、非対称キーアグリーメントAWS KMS keysを使用して、2 者間で共有対称ラッピングキーを取得します。まず、キーリングは楕円曲線 Diffie-Hellman (ECDH) キー契約アルゴリズムを使用して、送信者のKMSキーペアのプライベートキーと受信者のパブリックキーから共有シークレットを取得します。次に、キーリングは共有シークレットを使用して、データ暗号化キーを保護する共有ラッピングキーを取得します。 AWS Database Encryption が (KDF_CTR_HMAC_SHA384) SDKを使用して共有ラッピングキーを取得するキー取得関数は、NISTキー取得の推奨事項に準拠しています

キー取得関数は、64 バイトのキーマテリアルを返します。両者が正しいキーマテリアルを使用するように、 AWS Database Encryption SDKは最初の 32 バイトをコミットメントキーとして使用し、最後の 32 バイトを共有ラッピングキーとして使用します。復号時に、キーリングが暗号化されたレコードのマテリアルの説明フィールドに保存されているのと同じコミットメントキーと共有ラッピングキーを再現できない場合、オペレーションは失敗します。例えば、Alice のプライベートキーと Bob のパブリックキーで設定されたキーリングを使用してレコードを暗号化する場合、Bob のプライベートキーと Alice のパブリックキーで設定されたキーリングは、同じコミットメントキーと共有ラッピングキーを再現し、レコードを復号化できます。Bob のパブリックキーがKMSキーペアからでない場合、Bob は Raw ECDHキーリングを作成してレコードを復号できます。

AWS KMS ECDH キーリングは、AES- を使用して対称キーでレコードを暗号化しますGCM。次に、データキーは、 AES- を使用して派生した共有ラッピングキーでエンベロープ暗号化されますGCM。各 AWS KMS ECDHキーリングには共有ラッピングキーを 1 つだけ含めることができますが、マルチ AWS KMS ECDHキーリング には、単独で、または他のキーリングとともに複数のキーリングを含めることができます。

AWS KMS ECDH キーリングに必要なアクセス許可

AWS Database Encryption SDK には AWS アカウントは必要なく、どの AWS サービスにも依存しません。ただし、 キーリングを使用するには AWS KMS ECDH、 AWS アカウントと、キーリング AWS KMS keys の に対する以下の最小限のアクセス許可が必要です。アクセス許可は、使用するキーアグリーメントスキーマによって異なります。

  • KmsPrivateKeyToStaticPublicKey キーアグリーメントスキーマを使用してレコードを暗号化および復号するには、送信者の非対称KMSキーペアに kms:GetPublicKey および kms:DeriveSharedSecret が必要です。 キーリングをインスタンス化するときに送信者の DERエンコードされたパブリックキーを直接指定する場合、必要なのは送信者の非対称KMSキーペアに対する kms:DeriveSharedSecret アクセス許可のみです。

  • KmsPublicKeyDiscovery キーアグリーメントスキーマを使用してレコードを復号するには、指定された非対称KMSキーペアに対する kms:DeriveSharedSecret および kms:GetPublicKey アクセス許可が必要です。

AWS KMS ECDH キーリングの作成

データを暗号化および復号する キーリングを作成するには AWS KMS ECDH、KmsPrivateKeyToStaticPublicKeyキーアグリーメントスキーマを使用する必要があります。キーアグリーメントスキーマを使用して KmsPrivateKeyToStaticPublicKey キーリングを初期化 AWS KMS ECDHするには、次の値を指定します。

  • 送信者の AWS KMS key ID

    KeyUsage 値が の非対称 NIST- 推奨楕円曲線 (ECC)KMS キーペアを識別する必要がありますKEY_AGREEMENT。送信者のプライベートキーは、共有シークレットを取得するために使用されます。

  • (オプション) 送信者のパブリックキー

    5280 で定義されているように、 SubjectPublicKeyInfo (SPKI) DERとも呼ばれる エンコードされた X.509 パブリックキーである必要があります。 RFC

    オペレーションは AWS KMS GetPublicKey、非対称キーペアのパブリックKMSキーを、必要な DERエンコード形式で返します。

    キーリングが行う AWS KMS 呼び出しの数を減らすには、送信者のパブリックキーを直接指定できます。送信者のパブリックキーに値が指定されていない場合、キーリングは AWS KMS を呼び出して送信者のパブリックキーを取得します。

  • 受信者のパブリックキー

    5280 で定義されているように、受信者の DERでエンコードされた X.509 パブリックキーを指定する必要があります。これは SubjectPublicKeyInfo (SPKI) とも呼ばれます。 RFC

    オペレーションは AWS KMS GetPublicKey、非対称キーペアのパブリックKMSキーを、必要な DERエンコード形式で返します。

  • 曲線仕様

    指定されたキーペアの楕円曲線仕様を識別します。送信者と受信者の両方のキーペアは、同じ曲線仕様である必要があります。

    有効な値: ECC_NIST_P256ECC_NIS_P384ECC_NIST_P512

  • (オプション) 許可トークンのリスト

    許可 を使用してキーリング内のKMS AWS KMS ECDHキーへのアクセスを制御する場合は、キーリングを初期化するときに必要なすべての許可トークンを提供する必要があります。

C# / .NET

次の例では、 AWS KMS ECDH送信者のキー、送信者のパブリックKMSキー、受信者のパブリックキーを使用して キーリングを作成します。この例では、オプションの senderPublicKeyパラメータを使用して、送信者のパブリックキーを指定します。送信者のパブリックキーを指定しない場合、キーリングは AWS KMS を呼び出して送信者のパブリックキーを取得します。送信者と受信者の両方のキーペアがECC_NIST_P256曲線上にあります。

// Instantiate material providers var materialProviders = new MaterialProviders(new MaterialProvidersConfig()); // Must be DER-encoded X.509 public keys var BobPublicKey = new MemoryStream(new byte[] { }); var AlicePublicKey = new MemoryStream(new byte[] { }); // Create the AWS KMS ECDH static keyring var staticConfiguration = new KmsEcdhStaticConfigurations { KmsPrivateKeyToStaticPublicKey = new KmsPrivateKeyToStaticPublicKeyInput { SenderKmsIdentifier = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", SenderPublicKey = BobPublicKey, RecipientPublicKey = AlicePublicKey } }; var createKeyringInput = new CreateAwsKmsEcdhKeyringInput { CurveSpec = ECDHCurveSpec.ECC_NIST_P256, KmsClient = new AmazonKeyManagementServiceClient(), KeyAgreementScheme = staticConfiguration }; var keyring = materialProviders.CreateAwsKmsEcdhKeyring(createKeyringInput);
Java

次の例では、 AWS KMS ECDH送信者のキー、送信者のパブリックKMSキー、受信者のパブリックキーを使用して キーリングを作成します。この例では、オプションの senderPublicKeyパラメータを使用して、送信者のパブリックキーを指定します。送信者のパブリックキーを指定しない場合、キーリングは AWS KMS を呼び出して送信者のパブリックキーを取得します。送信者と受信者の両方のキーペアがECC_NIST_P256曲線上にあります。

// Retrieve public keys // Must be DER-encoded X.509 public keys ByteBuffer BobPublicKey = getPublicKeyBytes("arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"); ByteBuffer AlicePublicKey = getPublicKeyBytes("arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321"); // Create the AWS KMS ECDH static keyring final CreateAwsKmsEcdhKeyringInput senderKeyringInput = CreateAwsKmsEcdhKeyringInput.builder() .kmsClient(KmsClient.create()) .curveSpec(ECDHCurveSpec.ECC_NIST_P256) .KeyAgreementScheme( KmsEcdhStaticConfigurations.builder() .KmsPrivateKeyToStaticPublicKey( KmsPrivateKeyToStaticPublicKeyInput.builder() .senderKmsIdentifier("arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab") .senderPublicKey(BobPublicKey) .recipientPublicKey(AlicePublicKey) .build()).build()).build();

検出キーリングの作成 AWS KMS ECDH

復号するときは、 AWS Database Encryption がSDK使用できるキーを指定することがベストプラクティスです。このベストプラクティスに従うには、キーアグリーメントスキーマで KmsPrivateKeyToStaticPublicKey キーリングを使用します AWS KMS ECDH。ただし、検出キーリング、 AWS KMS ECDHつまり、 AWS KMS ECDH指定されたキーペアのパブリックキーが、暗号化されたレコードのマテリアル説明フィールドに保存されている受信者のパブリックキーと一致するレコードを復号できる KMS キーリングを作成することもできます。

重要

KmsPublicKeyDiscovery キーアグリーメントスキーマを使用してレコードを復号するときは、所有者に関係なく、すべてのパブリックキーを受け入れます。

キーアグリーメントスキーマを使用して KmsPublicKeyDiscovery キーリングを初期化 AWS KMS ECDHするには、次の値を指定します。

  • 受信者の AWS KMS key ID

    KeyUsage 値が の非対称 NIST- 推奨楕円曲線 (ECC)KMS キーペアを識別する必要がありますKEY_AGREEMENT

  • 曲線仕様

    受信者のKMSキーペアの楕円曲線仕様を識別します。

    有効な値: ECC_NIST_P256ECC_NIS_P384ECC_NIST_P512

  • (オプション) 許可トークンのリスト

    権限 を使用してキーリング内のKMS AWS KMS ECDHキーへのアクセスを制御する場合は、キーリングを初期化するときに必要なすべての付与トークンを提供する必要があります。

C# / .NET

次の例では、 AWS KMS ECDHECC_NIST_P256曲線にキーペアを持つ検出KMSキーリングを作成します。指定されたKMSキーペアに対する kms:GetPublicKey および kms:DeriveSharedSecret アクセス許可が必要です。このキーリングは、指定されたキーKMSペアのパブリックキーが、暗号化されたレコードのマテリアルの説明フィールドに保存されている受信者のパブリックキーと一致するレコードを復号できます。

// Instantiate material providers var materialProviders = new MaterialProviders(new MaterialProvidersConfig()); // Create the AWS KMS ECDH discovery keyring var discoveryConfiguration = new KmsEcdhStaticConfigurations { KmsPublicKeyDiscovery = new KmsPublicKeyDiscoveryInput { RecipientKmsIdentifier = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" } }; var createKeyringInput = new CreateAwsKmsEcdhKeyringInput { CurveSpec = ECDHCurveSpec.ECC_NIST_P256, KmsClient = new AmazonKeyManagementServiceClient(), KeyAgreementScheme = discoveryConfiguration }; var keyring = materialProviders.CreateAwsKmsEcdhKeyring(createKeyringInput);
Java

次の例では、 AWS KMS ECDHECC_NIST_P256曲線にキーペアを持つ検出KMSキーリングを作成します。指定されたKMSキーペアに対する kms:GetPublicKey および kms:DeriveSharedSecret アクセス許可が必要です。このキーリングは、指定されたキーKMSペアのパブリックキーが、暗号化されたレコードのマテリアルの説明フィールドに保存されている受信者のパブリックキーと一致するレコードを復号できます。

// Create the AWS KMS ECDH discovery keyring final CreateAwsKmsEcdhKeyringInput recipientKeyringInput = CreateAwsKmsEcdhKeyringInput.builder() .kmsClient(KmsClient.create()) .curveSpec(ECDHCurveSpec.ECC_NIST_P256) .KeyAgreementScheme( KmsEcdhStaticConfigurations.builder() .KmsPublicKeyDiscovery( KmsPublicKeyDiscoveryInput.builder() .recipientKmsIdentifier("arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321").build() ).build()) .build();