

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

# 静的マテリアルプロバイダー
<a name="static-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) は、テスト、概念実証デモ、および従来の互換性を目的とした、非常にシンプルな[暗号化マテリアルプロバイダー](DDBEC-legacy-concepts.md#concept-material-provider) (CMP) です。

静的 CMP を使用してテーブル項目を暗号化するには、[Advanced Encryption Standard](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) (AES) 対称暗号化キーと署名キーまたはキーペアを指定します。暗号化された項目を復号するために同じキーを指定する必要があります。静的 CMP は暗号化オペレーションを実行しません。代わりに、項目エンクリプタに指定した暗号化キーをそのまま渡します。項目エンクリプタは、暗号化キーの直下の項目を暗号化します。次に、署名キーを直接使用して署名します。

静的 CMP は一意の暗号化マテリアルを生成しないため、処理するすべてのテーブル項目は同じ暗号化キーで暗号化され、同じ署名キーで署名されます。同じキーを使用して多数の項目の属性値を暗号化するか、同じキーまたはキーペアを使用してすべての項目に署名すると、キーの暗号化の制限を超える危険性があります。

**注記**  
Java ライブラリ内の[非対称静的プロバイダー](https://aws.github.io/aws-dynamodb-encryption-java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/providers/AsymmetricStaticProvider.html)は静的プロバイダーではありません。これは、[ラップされた CMP](wrapped-provider.md) の代替コンストラクタを指定するだけです。本稼働環境での使用は安全ですが、できるだけラップされた CMP を直接使用する必要があります。

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

**サンプルコードについては、以下を参照してください。**
+ Java: [SymmetricEncryptedItem](https://github.com/aws/aws-dynamodb-encryption-java/blob/master/examples/src/main/java/com/amazonaws/examples/SymmetricEncryptedItem.java)

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

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

静的なプロバイダーを作成するには、暗号化キーやキーペアおよび署名キーやキーペアを指定します。テーブル項目を暗号化および復号するには、キーマテリアルを指定する必要があります。

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

```
// To encrypt
SecretKey cek = ...;        // Encryption key
SecretKey macKey =  ...;    // Signing key
EncryptionMaterialsProvider provider = new SymmetricStaticProvider(cek, macKey);

// To decrypt
SecretKey cek = ...;        // Encryption key
SecretKey macKey =  ...;    // Verification key
EncryptionMaterialsProvider provider = new SymmetricStaticProvider(cek, macKey);
```

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

```
# You can provide encryption materials, decryption materials, or both
encrypt_keys = EncryptionMaterials(
    encryption_key = ...,
    signing_key = ...
)

decrypt_keys = DecryptionMaterials(
    decryption_key = ...,
    verification_key = ...
)

static_cmp = StaticCryptographicMaterialsProvider(
    encryption_materials=encrypt_keys
    decryption_materials=decrypt_keys
)
```

------

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

静的プロバイダーは、指定した暗号化キーと署名キーを項目エンクリプタに渡します。ここで、これらのアイテムは、テーブル項目の暗号化と署名に直接使用されます。各項目に異なるキーを指定しない限り、すべての項目で同じキーが使用されます。

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


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

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

**入力** (アプリケーションから)
+ 暗号化キー - これは、[Advanced Encryption Standard (AES) キー](https://tools.ietf.org/html/rfc3394.html)などの対称キーである必要があります。
+ 署名キー - これは、対称キーまたは非対称キーペアです。

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

**出力** (項目エンクリプタへ)
+ 入力として渡される暗号化キー。
+ 入力として渡される署名キー。
+ 実際のマテリアル説明: [リクエストされたマテリアル説明](DDBEC-legacy-concepts.md#legacy-material-description)。存在する場合は、変更されません。

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

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

暗号化マテリアルの取得と、復号マテリアルの取得のための異なるメソッドが含まれていますが、動作は同じです。

**入力** (アプリケーションから)
+ 暗号化キー - これは、[Advanced Encryption Standard (AES) キー](https://tools.ietf.org/html/rfc3394.html)などの対称キーである必要があります。
+ 署名キー - これは、対称キーまたは非対称キーペアです。

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

**出力** (項目エンクリプタへ)
+ 入力として渡される暗号化キー。
+ 入力として渡される署名キー。