

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

# ラップされたマテリアルプロバイダー
<a name="wrapped-provider"></a>

**注記**  
クライアント側の暗号化ライブラリの名前が [AWS Database Encryption SDK](DDBEC-rename.md) に変更されました。次のトピックには、DynamoDB Encryption Client for Java のバージョン 1.x～2.x および DynamoDB Encryption Client for Python のバージョン 1.x～3.x に関する情報が記載されています。詳細については、「[AWS Database Encryption SDK for DynamoDB バージョンのサポート](legacy-dynamodb-encryption-client.md#legacy-support)」を参照してください。

*ラップされたマテリアルプロバイダー* (ラップされた CMP) では、DynamoDB 暗号化クライアントを使用して任意のソースからラッピングおよび署名キーを使用できます。ラップされた CMP はどの AWS サービスにも依存しません。ただし、クライアントの外部にあるラップキーと署名キーを生成して管理する必要があります。これには、項目を検証および復号するための正しいキーを提供することが含まれます。

ラップされた CMP は、項目ごとに固有の項目暗号化キーを生成します。項目暗号化キーを指定したラップキーでラップし、ラップされた項目暗号化キーを項目の[マテリアル説明属性](DDBEC-legacy-concepts.md#legacy-material-description)に保存します。ラップキーと署名キーを指定するため、ラップキーと署名キーの生成方法と、それらが各項目に固有のものか再利用されたものかを判断します。

ラップされた CMP は、安全な実装であり、暗号化マテリアルを管理できるアプリケーションに適しています。

ラップされた CMP は、DynamoDB 暗号化クライアントがサポートしている複数の[暗号化マテリアルプロバイダー](DDBEC-legacy-concepts.md#concept-material-provider) (CMP) の 1 つです。他の CMP の詳細については、「[暗号マテリアルプロバイダー](crypto-materials-providers.md)」を参照してください。

**サンプルコードについては、以下を参照してください。**
+ Java: [AsymmetricEncryptedItem](https://github.com/aws/aws-dynamodb-encryption-java/blob/master/examples/src/main/java/com/amazonaws/examples/AsymmetricEncryptedItem.java)
+ Python: [wrapped-rsa-encrypted-table](https://github.com/aws/aws-dynamodb-encryption-python/blob/master/examples/src/dynamodb_encryption_sdk_examples/wrapped_rsa_encrypted_table.py)、[wrapped-symmetric-encrypted-table](https://github.com/aws/aws-dynamodb-encryption-python/blob/master/examples/src/dynamodb_encryption_sdk_examples/wrapped_symmetric_encrypted_table.py)

**Topics**
+ [使用方法](#wrapped-cmp-how-to-use)
+ [仕組み](#wrapped-cmp-how-it-works)

## 使用方法
<a name="wrapped-cmp-how-to-use"></a>

ラップされた CMP を作成するには、ラップキー (暗号化に必要)、ラップ解除キー (復号に必要)、および署名キーを指定します。項目を暗号化および復号するときには、キーを指定する必要があります。

ラップキー、ラップ解除キー、および署名キーは、対称キーまたは非対称キーペアにすることができます。

------
#### [ Java ]

```
// This example uses asymmetric wrapping and signing key pairs
final KeyPair wrappingKeys = ...
final KeyPair signingKeys = ...

final WrappedMaterialsProvider cmp = 
    new WrappedMaterialsProvider(wrappingKeys.getPublic(),
                                 wrappingKeys.getPrivate(),
                                 signingKeys);
```

------
#### [ Python ]

```
# This example uses symmetric wrapping and signing keys
wrapping_key = ...
signing_key  = ...

wrapped_cmp = WrappedCryptographicMaterialsProvider(
    wrapping_key=wrapping_key,
    unwrapping_key=wrapping_key,
    signing_key=signing_key
)
```

------

## 仕組み
<a name="wrapped-cmp-how-it-works"></a>

ラップされた CMP は、すべての項目に新しい項目暗号化キーを生成します。次の図に示すように、ラップキー、ラップ解除キー、および署名キーを使用します。

![\[DynamoDB 暗号化クライアントでのラップされたマテリアルプロバイダーの入力、処理、および出力\]](http://docs.aws.amazon.com/ja_jp/database-encryption-sdk/latest/devguide/images/wrappedCMP.png)


### 暗号化マテリアルを取得する
<a name="wrapped-cmp-get-encryption-materials"></a>

このセクションでは、暗号化マテリアルのリクエストを受け取る際のラップされたマテリアルプロバイダー (ラップされた CMP) の入力、出力、処理の詳細について説明します。

**入力** (アプリケーションから)
+ ラップされたキー: [Advanced Encryption Standard](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) (AES) 対称キー、または [RSA](https://en.wikipedia.org/wiki/RSA_(cryptosystem)) パブリックキー。属性値が暗号化されている場合は必須です。それ以外の場合はオプションであり、無視されます。
+ ラップ解除キー: オプションで無視されます。
+ 署名キー

**入力** (項目エンクリプタから)
+ [DynamoDB 暗号化コンテキスト](concepts.md#encryption-context)

**出力** (項目エンクリプタへ):
+ プレーンテキスト項目暗号化キー
+ 署名キー (変更されません)
+ [実際のマテリアル説明](DDBEC-legacy-concepts.md#legacy-material-description): これらの値は、クライアントが項目に追加する[マテリアル説明属性](DDBEC-legacy-concepts.md#legacy-material-description)に保存されます。
  + `amzn-ddb-env-key`: Base64 でエンコードされたラップされた項目暗号化キー
  + `amzn-ddb-env-alg`: 項目を暗号化するために使用される暗号化アルゴリズム。デフォルトは AES-256-CBC です。
  + `amzn-ddb-wrap-alg`: ラップされた CMP が項目暗号化キーをラップするために使用したラップアルゴリズム。ラッピングキーが AES キーの場合、[RFC 3394](https://tools.ietf.org/html/rfc3394.html) で定義されているように、キーは埋め込みなしの `AES-Keywrap` を使用してラップされます。ラップキーが RSA キーの場合、キーは MGF1 パディング付き RSA OAEP を使用して暗号化されます。

**Processing**

項目を暗号化する際は、ラップキーと署名キーで渡します。ラップ解除キーは、オプションで無視されます。

1. ラップされた CMP は、テーブル項目に固有の対称項目暗号化キーを生成します。

1. 項目暗号化キーをラップするために指定したラップキーを使用します。次に、可能な限り早く、メモリより削除されます。

1. これは、プレーンテキスト項目暗号化キー、指定した署名キー、[実際のマテリアル説明](DDBEC-legacy-concepts.md#legacy-material-description) (ラップされた項目暗号化キー、暗号化およびラップアルゴリズムを含む) を返します。

1. 項目エンクリプタは、プレーンテキスト暗号化キーを使用して項目を暗号化します。項目に署名するために指定した署名キーを使用します。次に、可能な限り早く、メモリよりプレーンテキストキーが削除されます。ラップされた暗号化キー (`amzn-ddb-env-key`) を含む、実際のマテリアル記述のフィールドを項目のマテリアル記述属性にコピーします。

### 復号マテリアルを取得する
<a name="wrapped-cmp-get-decryption-materials"></a>

このセクションでは、復号マテリアルのリクエストを受け取る際のラップされたマテリアルプロバイダー (ラップされた CMP) の入力、出力、処理の詳細について説明します。

**入力** (アプリケーションから)
+ ラップキー: オプションで無視されます。
+ ラップ解除キー: 同じ [Advanced Encryption Standard](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) (AES) 対称キーまたは [RSA](https://en.wikipedia.org/wiki/RSA_(cryptosystem)) 暗号化に使用された RSA パブリックキーに対応するプライベートキー。属性値が暗号化されている場合は必須です。それ以外の場合はオプションであり、無視されます。
+ 署名キー

**入力** (項目エンクリプタから)
+ [DynamoDB 暗号化コンテキスト](concepts.md#encryption-context)のコピー (マテリアル説明属性の内容を含む)。

**出力** (項目エンクリプタへ)
+ プレーンテキスト項目暗号化キー
+ 署名キー (変更されません)

**Processing**

項目を復号する際は、ラップ解除キーと署名キーで渡します。ラップキーは、オプションで無視されます。

1. ラップされた CMP は、項目のマテリアル記述属性からラップされた項目暗号化キーを取得します。

1. 項目暗号化キーをラップ解除するためにラップ解除キーとアルゴリズムを使用します。

1. それは、項目エンクリプタにプレーンテキスト項目暗号化キー、署名キー、および暗号化および署名アルゴリズムを返します。

1. 項目エンクリプタは、署名キーを使用して項目を検証します。成功すると、項目暗号化キーを使用して項目を復号します。次に、可能な限り早く、メモリよりプレーンテキストキーが削除されます。