AWS データベース暗号化のSDK概念 - AWS データベース暗号化 SDK

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

AWS データベース暗号化のSDK概念

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

このトピックでは、 AWS データベース暗号化 で使用される概念と用語について説明しますSDK。

AWS Database Encryption のコンポーネントがどのようにSDK相互作用するかについては、「」を参照してくださいAWS Database Encryption SDK の仕組み

AWS データベース暗号化 の詳細についてはSDK、以下のトピックを参照してください。

  • AWS Database Encryption がエンベロープ暗号化SDKを使用してデータを保護する方法について説明します。

  • エンベロープ暗号化の要素、レコードを保護するデータキーおよびデータキーを保護するラッピングキーについての説明。

  • どのラッピングキーを使用するかを決めるキーリングについての説明。

  • 暗号化プロセスの整合性を向上させる暗号化コンテキストについての説明。

  • 暗号化メソッドがレコードに追加するマテリアルの説明について説明します。

  • AWS Database Encryption に暗号化して署名するSDKフィールドを指定する暗号化アクションについて説明します。

エンベロープ暗号化

暗号化されたデータのセキュリティは、復号できるデータキーを保護することによって部分的に異なります。1 つの受け入れられているデータキーを保護するベストプラクティスは暗号化することです。これを行うには、キー暗号化キーつまりラッピングキーと呼ばれる別の暗号化キーが必要です。データキーを暗号化するためにラッピングキーを使用するこの方法はエンベロープ暗号化と呼ばれています。

データキーの保護

AWS Database Encryption SDK は、一意のデータキーを使用して各フィールドを暗号化します。その後、指定したラッピングキーで各データキーを暗号化します。暗号化されたデータキーをマテリアルの説明に格納します。

ラッピングキーを指定するには、キーリングを使用します。

AWS データベース暗号化によるエンベロープ暗号化 SDK
複数のラッピングキーで同じデータを暗号化する

複数のラッピングキーを使用してデータキーを暗号化できます。ユーザーごとに異なるラッピングキーを指定したり、異なるタイプのラッピングキーを指定したり、場所ごとにそのように指定したい場合があります。各ラッピングキーでは、それぞれ同じデータキーを暗号化します。 AWS Database Encryption は、暗号化されたすべてのデータキーを、暗号化されたフィールドとともにマテリアル説明 にSDK保存します。

データを復号するには、この暗号化されたデータキーを復号できる少なくとも 1 つのラッピングキーを指定する必要があります。

複数のアルゴリズムの強度の結合

デフォルトでは、 AWS Database Encryption は AES-GCM 対称暗号化、 HMACベースのキー導出関数 (HKDF)、ECDSA署名 を含むアルゴリズムスイートSDKを使用します。データキーを暗号化するには、ラッピングキーに適した対称または非対称の暗号化アルゴリズムを指定できます。

一般的に、対称キー暗号化アルゴリズムは迅速で、非対称またはパブリックキー暗号化よりも小さい暗号化テキストが生成されます。ただし、パブリックキーアルゴリズムはロールの本質的な分離を提供します。それぞれの長所を組み合わせるために、パブリックキー暗号化を使用してデータキーを暗号化できます。

可能な限り、いずれかの AWS KMS キーリングを使用することをお勧めします。AWS KMS キーリング を使用する場合、ラッピングキーRSA AWS KMS key として非対称を指定することで、複数のアルゴリズムの長所を組み合わせることができます。対称暗号化KMSキーを使用することもできます。

データキー

データキーは、 AWS Database Encryption が暗号化アクション ENCRYPT_AND_SIGN でマークされたレコード内のフィールドを暗号化SDKするために使用する暗号化キーです。 暗号化アクション各データキーは、暗号化キーの要件に準拠したバイト配列です。 AWS データベース暗号化SDKは、一意のデータキーを使用して各属性を暗号化します。

データキーを指定、生成、実装、拡張、保護、使用する必要はありません。 AWS Database Encryption SDKは、暗号化および復号オペレーションを呼び出すときに機能します。

データキーを保護するために、 AWS Database Encryption SDKは、ラッピングキー と呼ばれる 1 つ以上のキー暗号化キーでデータキーを暗号化します。 ラッピングキー AWS Database Encryption SDKは、プレーンテキストデータキーを使用してデータを暗号化した後、できるだけ早くメモリからそれらを削除します。その後、暗号化されたデータキーをマテリアルの説明に格納します。詳細については、「AWS Database Encryption SDK の仕組み」を参照してください。

ヒント

AWS データベース暗号化 ではSDK、データキーデータ暗号化キーを区別します。ベストプラクティスとして、サポートされているすべてのアルゴリズムスイート鍵導出関数を使用します。鍵導出関数は、データキーを入力として受け取り、レコードの暗号化に実際に使用されたデータ暗号化キーを返します。そのため、データは、データキー「によって」暗号化されているというよりは、データキーの「下で」暗号化されていると言えます。

暗号化された各データキーには、暗号化したラッピングキーの識別子を含むメタデータが含まれます。このメタデータにより、 AWS データベース暗号化は復号時に有効なラッピングキーSDKを識別できます。

ラッピングキー

ラッピングキーは、 AWS データベース暗号化がレコードを暗号化するデータキーの暗号化SDKに使用するキー暗号化キーです。各データキーは、1 つまたは複数のラッピングキーで暗号化することができます。キーリングの設定時に、データの保護に使用するラッピングキーを決定します。

1 つのデータキーを複数のラッピングキーで暗号化する

AWS データベース暗号化は、 AWS Key Management Service (AWS KMS) 対称暗号化キー (マルチリージョン AWS KMS キーを含む) や非対称KMSキー 、 raw AES-GCM (アドバンスト暗号化標準/ガロアカウンターモード) RSA KMS キー、 raw キーなど、一般的に使用されるいくつかのラッピングRSAキーSDKをサポートしています。可能な限りKMSキーを使用することをお勧めします。どのラッピングキーを使用すべきかを知るには、「ラッピングキーの選択」を参照してください。

エンベロープ暗号化を使用する場合は、認可されていないアクセスからラッピングキーを保護する必要があります。これは、次のいずれかの方法で行うことができます。

キー管理システムがない場合は、 をお勧めします AWS KMS。 AWS Database Encryption は とSDK統合 AWS KMS され、ラッピングキーの保護と使用に役立ちます。

キーリング

暗号化と復号に使用するラッピングキーを指定するには、キーリングを使用します。 AWS Database Encryption が提供するキーリングを使用するSDKか、独自の実装を設計できます。

キーリングは、データキーの生成、暗号化、復号を行います。また、署名のハッシュベースのメッセージ認証コード (HMACs) の計算に使用されるMACキーも生成されます。キーリングを定義するとき、データキーを暗号化するラッピングキーを指定できます。ほとんどのキーリングは、少なくとも 1 つのラッピングキーを指定するか、ラッピングキーを提供および保護するサービスを指定します。暗号化すると、 AWS データベース暗号化はキーリングで指定されたすべてのラッピングキーSDKを使用してデータキーを暗号化します。 AWS Database Encryption がSDK定義するキーリングの選択と使用については、「キーリングの使用」を参照してください。

暗号化アクション

暗号化アクションは、レコード内の各フィールドに対してどのアクションを実行するかを暗号化プログラムに指示します。

暗号化アクションの値は次のいずれかになります。

  • [暗号化して署名] – フィールドを暗号化します。暗号化されたフィールドを署名に含めます。

  • [署名のみ] – 署名にフィールドを含めます。

  • 署名して暗号化コンテキストに含める – 署名コンテキストと暗号化コンテキスト に フィールドを含めます。

    デフォルトでは、パーティションキーとソートキーは、暗号化コンテキストに含まれる唯一の属性です。AWS KMS 階層キーリングのブランチキー ID サプライヤーSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXTが暗号化コンテキストからの復号に必要なブランチキーを識別できるように、追加のフィールドを定義することを検討できます。詳細については、「ブランチキー ID サプライヤー」を参照してください。

    注記

    SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT 暗号化アクションを使用するには、 AWS データベース暗号化 のバージョン 3.3 以降を使用する必要がありますSDK。データモデルを更新して を含める前に、新しいバージョンをすべてのリーダーにデプロイしますSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT

  • [何もしない] – フィールドを暗号化したり、署名に含めたりしません。

機密データを格納できるすべてのフィールドは、暗号化と署名を使用します。プライマリキー値 (DynamoDB テーブルのパーティションキーとソートキーなど) には、署名のみを使用するか、署名を使用して暗号化コンテキスト に含めます。署名を指定して暗号化コンテキスト属性に含める場合、パーティション属性とソート属性も署名して暗号化コンテキストに含める必要があります。マテリアルの説明に暗号化アクションを指定する必要はありません。 AWS Database Encryption は、マテリアルの説明が保存されているフィールドSDKに自動的に署名します。

暗号化アクションは慎重に選択してください。不確かな場合は、暗号化と署名を使用します。 AWS データベース暗号化を使用してレコードSDKを保護すると、既存の ENCRYPT_AND_SIGN、、SIGN_ONLYまたは SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXTフィールドを に変更したりDO_NOTHING、既存の DO_NOTHINGフィールドに割り当てられた暗号化アクションを変更したりすることはできません。ただし、データモデルに他の変更を加えることはできます。例えば、単一のデプロイで暗号化フィールドを追加または削除できます。

マテリアル記述

マテリアルの説明は、暗号化されたレコードのヘッダーとして機能します。 AWS Database Encryption を使用してフィールドを暗号化して署名するとSDK、暗号化者は暗号化マテリアルをアセンブルする際にマテリアルの説明を記録し、暗号化者がレコードに追加する新しいフィールド (aws_dbe_head) にマテリアルの説明を保存します。

マテリアルの説明は、データキーの暗号化されたコピーと、暗号化アルゴリズム、暗号化コンテキスト、暗号化と署名の命令などの他の情報を含む、ポータブルな形式のデータ構造です。暗号化プログラムは、暗号化および署名のために暗号マテリアルをアセンブルする際に、マテリアルの説明を記録します。後で、フィールドを検証および復号するために暗号マテリアルをアセンブルする必要がある場合は、そのマテリアルの説明をガイドとして使用します。

暗号化されたデータキーを暗号化されたフィールドと一緒に格納すると、復号オペレーションが合理化され、暗号化されたデータキーを、そのキーで暗号化したデータとは別に格納および管理する必要がなくなります。

マテリアルの説明に関する技術的な情報については、「マテリアルの説明の形式」を参照してください。

暗号化コンテキスト

暗号化オペレーションのセキュリティを向上させるために、 AWS データベース暗号化には、レコードを暗号化して署名するすべてのリクエストに暗号化コンテキストSDKが含まれます。

暗号化コンテキストは、任意のシークレットではない追加認証データを含む名前と値のペアのセットです。 AWS データベース暗号化SDKには、データベースの論理名と暗号化コンテキストのプライマリキー値 (DynamoDB テーブルのパーティションキーとソートキーなど) が含まれます。フィールドを暗号化して、これに署名する場合、暗号化コンテキストは暗号化されたレコードに暗号化されてバインドされます。これにより、フィールドを復号するために同じ暗号化コンテキストが必要になります。

AWS KMS キーリングを使用する場合、 AWS データベース暗号化SDKは暗号化コンテキストを使用して、キーリングが に対して行う呼び出しで追加の認証データ (AAD) も提供します AWS KMS。

デフォルトのアルゴリズムスイート を使用するたびに、暗号化マテリアルマネージャー (CMM) は、予約された名前、、aws-crypto-public-keyおよびパブリック検証キーを表す値で構成される名前と値のペアを暗号化コンテキストに追加します。パブリック検証キーはマテリアルの説明に格納されます。

暗号化マテリアルマネージャー

暗号化マテリアルマネージャー (CMM) は、データの暗号化、復号、署名に使用される暗号化マテリアルを組み立てます。デフォルトのアルゴリズムスイートを使用する場合、暗号マテリアルには、プレーンテキストおよび暗号化されたデータキー、対称署名キー、および非対称署名キーが含まれます。とCMM直接やり取りすることは決してありません。このためには、暗号化メソッドおよび復号メソッドを使用します。

は AWS 、データベース暗号化SDKとキーリングの間の連絡役CMMとして機能するため、ポリシー適用のサポートなど、カスタマイズと拡張に最適なポイントです。は明示的に指定できますがCMM、必須ではありません。キーリングを指定すると、 AWS データベース暗号化によってデフォルトSDKが作成されますCMM。デフォルトでは、指定したキーリングから暗号化または復号マテリアルCMMを取得します。これには、AWS Key Management Service (AWS KMS) などの暗号化サービスの呼び出しが含まれる場合があります。

対称暗号化と非対称暗号化

対称暗号化では、データの暗号化と復号化に同じキーが使用されます。

非対称暗号化では、数学的に関連するデータキーペアが使用されます。ペアの 1 つのキーでデータが暗号化され、ペアの他のキーだけでデータが復号されます。

AWS データベース暗号化では、エンベロープ暗号化 SDKを使用します。データは対称データキーで暗号化されます。対称データキーを 1 つ以上の対称または非対称のラッピングキーで暗号化します。データキーの暗号化されたコピーを少なくとも 1 つ含むマテリアルの説明をレコードに追加します。

データの暗号化 (対称暗号化)

データを暗号化するには、 AWS Database Encryption は対称データキーと対称暗号化アルゴリズムを含むアルゴリズムスイートSDKを使用します。データを復号化するために、 AWS データベース暗号化は同じデータキーと同じアルゴリズムスイートSDKを使用します。

データキーの暗号化 (対称暗号化または非対称暗号化)

暗号化および復号のオペレーションに指定するキーリングにより、対称データキーの暗号化および復号方法が決まります。対称暗号化キーを持つ AWS KMS キーリングなどの対称暗号化を使用するKMSキーリング、または非対称RSAKMSキーを持つキーリングなどの AWS KMS 非対称暗号化を使用するキーリングを選択できます。

キーコミットメント

AWS Database Encryption は、各暗号文を 1 つのプレーンテキストにのみ復号化できるセキュリティプロパティである、キーコミットメント (堅牢性 と呼ばれることもあります) SDKをサポートしています。これを実行するために、キーコミットメントを使用することで、レコードを暗号化したデータキーのみが復号に使用されるようになります。 AWS Database Encryption SDKには、すべての暗号化および復号オペレーションに対するキーコミットメントが含まれています。

ほとんどの最新の対称暗号 ( を含むAES) SDKは、 AWS Database Encryption がレコードENCRYPT_AND_SIGNにマークされた各プレーンテキストフィールドを暗号化するために使用する一意のデータキーなど、1 つのシークレットキーでプレーンテキストを暗号化します。同じデータキーでこのレコードを復号すると、元のデータと同じプレーンテキストが返されます。別のキーで復号化すると、通常は失敗します。2 つの異なるキーを使用して暗号文を復号することは難しいですが、技術的には可能です。まれに、数バイトの暗号化テキストを別の理解可能なプレーンテキストに部分的に複号できるキーを見つけることは可能です。

AWS Database Encryption SDKは、常に 1 つの一意のデータキーで各属性を暗号化します。複数のラッピングキーでそのデータキーを暗号化する場合がありますが、ラッピングキーは常に同じデータキーを暗号化します。ただし、手動で作成した高度な暗号化されたレコードには、実際には異なるデータキーが含まれて、それぞれ異なるラッピングキーによって暗号化されることがあります。例えば、あるユーザーが暗号化されたレコードを復号すると 0x0 (false) を返し、同じ暗号化されたレコードを別のユーザーが復号すると 0x1 (true) となることがあります。

このシナリオを防ぐために、 AWS データベース暗号化には暗号化と復号時のキーコミットメントSDKが含まれます。暗号化メソッドは、暗号文を生成した一意のデータキーを、キーコミットメント に暗号化的にバインドします。これは、データキーの派生を使用してマテリアルの説明で計算されたハッシュベースのメッセージ認証コード (HMAC) です。その後、キーコミットメントをマテリアルの説明に格納します。キーコミットメントを持つレコードを復号すると、 AWS データベース暗号化は、データキーが暗号化されたレコードの唯一のキーSDKであることを確認します。データキーの検証が失敗すると、復号オペレーションは失敗します。

デジタル署名

AWS Database Encryption SDK は、認証された暗号化アルゴリズム AES- を使用してデータを暗号化しGCM、復号プロセスは、デジタル署名を使用せずに暗号化されたメッセージの完全性と信頼性を検証します。ただし、 AES-GCM は対称キーを使用するため、暗号文の復号に使用されるデータキーを復号できるユーザーは、暗号化された新しい暗号文を手動で作成して、セキュリティ上の懸念が生じる可能性があります。例えば、 をラッピングキー AWS KMS key として使用すると、kms:Decryptアクセス許可を持つユーザーは、 を呼び出すことなく暗号化された暗号文を作成することができますkms:Encrypt

この問題を回避するため、デフォルトのアルゴリズムスイートでは、暗号化されたレコードに Elliptic Curve デジタル署名アルゴリズム (ECDSA) 署名を追加します。デフォルトのアルゴリズムスイートは、認証された暗号化アルゴリズム AES- ENCRYPT_AND_SIGNを使用してマークされたレコード内のフィールドを暗号化しますGCM。次に、、ENCRYPT_AND_SIGN、、 とマークされたレコードのフィールドで、ハッシュベースのメッセージ認証コード (HMACs) SIGN_ONLYと非対称ECDSA署名の両方を計算しますSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT。復号プロセスでは、署名を使用して、認可されたユーザーがレコードを暗号化したことを検証します。

デフォルトのアルゴリズムスイートを使用すると、 AWS Database Encryption は暗号化されたレコードごとに一時的なプライベートキーとパブリックキーのペアSDKを生成します。 AWS Database Encryption は、パブリックキーSDKをマテリアルの説明に保存し、プライベートキーを破棄します。これにより、パブリックキーで検証する別の署名を誰も作成できなくなります。アルゴリズムは、マテリアル説明で追加の認証済みデータとして暗号化されたデータキーにパブリックキーをバインドし、フィールドのみを復号化できるユーザーがパブリックキーを変更したり、署名の検証に影響を与えたりするのを防ぎます。

AWS データベース暗号化にはSDK、常にHMAC検証が含まれます。ECDSA デジタル署名はデフォルトで有効になっていますが、必須ではありません。データを暗号化するユーザーとデータを復号するユーザーが同等に信頼されている場合は、パフォーマンスを改善するためにデジタル署名を含まないアルゴリズムスイートの使用を検討することをお勧めします。代替アルゴリズムスイートの選択の詳細については、「アルゴリズムスイートの選択」を参照してください。

注記

キーリングが暗号化子と復号子の間で記述されていない場合、デジタル署名は暗号化値を提供しません。

非対称AWS KMS キーリングを含むRSA AWS KMS キーリング は、 AWS KMS キーポリシーとIAMポリシーに基づいて、暗号化子と復号子を区別できます。

暗号化の性質上、次のキーリングは暗号化子と復号子の間で記述できません。

  • AWS KMS 階層キーリング

  • AWS KMS ECDH キーリング

  • Raw AESキーリング

  • Raw RSAキーリング

  • Raw ECDHキーリング