

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

# AWS Database Encryption SDK の仕組み
<a name="how-it-works"></a>


****  

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

 AWS Database Encryption SDK は、データベースに保存するデータを保護するために特別に設計されたクライアント側の暗号化ライブラリを提供します。ライブラリには、拡張が可能でまた変更なしで使用できる安全な実装が含まれています。カスタムコンポーネントの定義と使用の詳細については、データベース実装の GitHub リポジトリを参照してください。

このセクションのワークフローでは、 AWS Database Encryption SDK がデータベース内のデータを暗号化、署名、復号、検証する方法について説明します。これらのワークフローは、抽象的な要素とデフォルト機能を使用した基本的なプロセスを表します。 AWS Database Encryption SDK がデータベース実装と連携する方法の詳細については、「データベースの*暗号化された内容*」トピックを参照してください。

 AWS Database Encryption SDK は、エン[ベロープ暗号化](concepts.md#envelope-encryption)を使用してデータを保護します。各レコードは一意の[データキー](concepts.md#data-key)で暗号化されます。データキーは、暗号化アクションで `ENCRYPT_AND_SIGN` とマークされた各フィールドの一意のデータ暗号化キーを導出するために使用されます。その後、データキーのコピーが、指定したラッピングキーによって暗号化されます。暗号化されたレコードを復号するために、 AWS Database Encryption SDK は、指定したラッピングキーを使用して、少なくとも 1 つの暗号化されたデータキーを復号します。その後、暗号文を復号し、プレーンテキストのエントリを返すことができます。

 AWS Database Encryption SDK で使用される用語の詳細については、「」を参照してください[AWS Database Encryption SDK の概念](concepts.md)。

## 暗号化および署名
<a name="encrypt-and-sign"></a>

 AWS Database Encryption SDK は、データベース内のレコードを暗号化、署名、検証、復号するレコードエンクリプタです。レコードに関する情報と、暗号化して署名するフィールドに関する指示が取り込まれます。指定したラッピングキーから設定された[暗号マテリアルマネージャー](concepts.md#crypt-materials-manager)から、暗号マテリアルとその使用方法に関する指示を取得します。

次のチュートリアルでは、 AWS Database Encryption SDK がデータエントリを暗号化して署名する方法について説明します。

1. 暗号化マテリアルマネージャーは、 AWS Database Encryption SDK に 1 つのプレーンテキストデータキー、指定されたラッピング[キー](concepts.md#data-key)で暗号化されたデータキーのコピー、MAC キーという一意のデータ暗号化キーを提供します。 [ラッピングキー](concepts.md#wrapping-key)
**注記**  
複数のラッピングキーでデータキーを暗号化できます。各ラッピングキーは、データキーの個別のコピーを暗号化します。 AWS Database Encryption SDK は、暗号化されたすべてのデータキーを[マテリアルの説明](concepts.md#material-description)に保存します。 AWS Database Encryption SDK は、マテリアルの説明を格納するレコードに新しいフィールド (`aws_dbe_head`) を追加します。  
MAC キーは、データキーの暗号化された各コピーについて導出されます。MAC キーは、マテリアルの説明には格納されません。代わりに、復号メソッドは、ラッピングキーを使用して MAC キーを再度導出します。

1. 暗号化メソッドは、指定した[暗号化アクション](concepts.md#crypt-actions)で `ENCRYPT_AND_SIGN` とマークされた各フィールドを暗号化します。

1. 暗号化メソッドは、データキーから `commitKey` を導出し、それを使用して[キーコミットメントの値](concepts.md#key-commitment)を生成して、その後にデータキーを破棄します。

1. 暗号化メソッドは、[マテリアルの説明](concepts.md#material-description)をレコードに追加します。マテリアルの説明には、暗号化されたデータキーと、暗号化されたレコードに関する他の情報が含まれます。マテリアルの説明に含まれる情報の詳細なリストについては、「[マテリアルの説明の形式](reference.md#material-description-format)」を参照してください。

1. 暗号化メソッドは、**ステップ 1 **で返された MAC キーを使用して、マテリアルの説明、[暗号化コンテキスト](concepts.md#encryption-context)、および暗号化アクション`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`で `ENCRYPT_AND_SIGN`、`SIGN_ONLY`、または とマークされた各フィールドの正規化におけるハッシュベースのメッセージ認証コード (HMAC) 値を計算します。HMAC の値は、暗号化メソッドがレコードに追加する新しいフィールド (`aws_dbe_foot`) に格納されます。

1. 暗号化メソッドは、マテリアルの説明、暗号化コンテキスト、および `ENCRYPT_AND_SIGN`、、または とマークされた各フィールドの正規化にわたって [ECDSA](concepts.md#digital-sigs) 署名を計算`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`し`SIGN_ONLY`、ECDSA 署名を `aws_dbe_foot`フィールドに保存します。
**注記**  
ECDSA 署名はデフォルトで有効になっていますが、必須ではありません。

1. 暗号化メソッドは、暗号化および署名されたレコードをデータベースに格納します。

## 復号および検証
<a name="decrypt-and-verify"></a>

1. 暗号マテリアルマネージャー (CMM) は、プレーンテキストの[データキー](concepts.md#data-key)および関連付けられた MAC キーを含む、マテリアルの説明に格納されている復号マテリアルを復号メソッドに提供します。

   1. CMM は、指定されたキーリング内の[ラッピングキー](concepts.md#wrapping-key)を使用して暗号化されたデータキーを復号し、プレーンテキストのデータキーを返します。

1. 復号メソッドは、マテリアルの説明内のキーコミットメントの値を比較および検証します。

1. 復号メソッドは、署名フィールド内の署名を検証します。

   これは`ENCRYPT_AND_SIGN`、定義した許可された認証されていないフィールドの`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`リストから、、`SIGN_ONLY`、または とマークされているフィールドを識別します。 [Allowed unsigned attributes](ddb-java-using.md#allowed-unauth)復号メソッドは、**ステップ 1 **で返された MAC キーを使用して、`ENCRYPT_AND_SIGN`、、`SIGN_ONLY`または とマークされたフィールドの HMAC 値を再計算して比較します`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`。その後、[暗号化コンテキスト](concepts.md#encryption-context)に格納されているパブリックキーを使用して [ECDSA 署名](concepts.md#digital-sigs)を検証します。

1. 復号メソッドは、プレーンテキストデータキーを使用して、`ENCRYPT_AND_SIGN` とマークされた各値を復号します。 AWS Database Encryption SDK は、プレーンテキストのデータキーを破棄します。

1. 復号方法は、プレーンテキストレコードを返します。