

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

# キーリング
<a name="choose-keyring"></a>

サポートされているプログラミング言語の実装では*、キーリング*を使用して[エンベロープ暗号化](concepts.md#envelope-encryption)を実行します。データキーの生成、暗号化、復号は、キーリングによって行われます。キーリングは、それぞれのメッセージを保護する一意のデータキーのソースと、そのデータキーを暗号化する [ラッピングキー](concepts.md#master-key) を決定します。キーリングは暗号化時に指定し、復号時には同じキーリングか別のキーリングを指定します。SDK で提供されるキーリングを使用するか、互換性のある独自のカスタムキーリングを作成できます。

各キーリングを個別に使用するか、キーリングを組み合わせて[マルチキーリング](use-multi-keyring.md)にすることができます。ほとんどのキーリングではデータキーを生成、暗号化、および復号することができますが、特定のオペレーションを 1 つのみ実行するキーリング (例: データキーのみを生成するキーリング) を作成し、他のキーリングと組み合わせて使用することができます。

ラッピングキーを保護し、 [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/) (AWS KMS) を暗号化しないままにしない AWS KMS keys を使用するキーリングなど、安全な境界内で暗号化オペレーションを実行する AWS KMS キーリングを使用することをお勧めします。また、ハードウェアセキュリティモジュール (HSM) に保存されているラッピングキーや他のマスターキーサービスによって保護されているラッピングキーを使用するキーリングを作成することもできます。詳細については、*AWS Encryption SDK 仕様*のトピック「[Keyring Interface](https://github.com/awslabs/aws-encryption-sdk-specification/blob/master/framework/keyring-interface.md)」を参照してください。

キーリングは、他のプログラミング言語の実装で使用される[マスターキー](concepts.md#master-key)と[マスターキープロバイダー](concepts.md#master-key-provider)の役割を果たします。 AWS Encryption SDK の異なる言語実装を使用してデータを暗号化および復号する場合は、必ず互換性のあるキーリングとマスターキープロバイダを使用してください。詳細については、「[キーリングの互換性](#keyring-compatibility)」を参照してください。

このトピックでは、 のキーリング機能を使用する方法 AWS Encryption SDK と、キーリングを選択する方法について説明します。

## キーリングのしくみ
<a name="using-keyrings"></a>

データを暗号化すると、 AWS Encryption SDK はキーリングに暗号化マテリアルを要求します。キーリングは、プレーンテキストデータのキーと、キーリングの各ラッピングキーによって暗号化されたデータキーのコピーを返します。 AWS Encryption SDK は、プレーンテキストキーを使用してデータを暗号化し、プレーンテキストのデータキーを破棄します。次に、 は、[暗号化されたデータキーと暗号化されたデータを含む暗号化されたメッセージ](concepts.md#message) AWS Encryption SDK を返します。

![\[複数のラッピングキーを持つキーリングによる暗号化。\]](http://docs.aws.amazon.com/ja_jp/encryption-sdk/latest/developer-guide/images/keyring-encrypt.png)


データを復号する場合、データの暗号化に使用したのと同じキーリングを使用することも、別のキーリングを使用することもできます。データを復号するには、復号化キーリングが暗号化キーリングの少なくとも 1 つのラッピングキーを含んでいる (またはアクセスできる) 必要があります。

は、暗号化されたデータキーを暗号化されたメッセージからキーリングに AWS Encryption SDK 渡し、キーリングのいずれかを復号するよう求めます。キーリングは、ラッピングキーを使用して暗号化されたデータキーのいずれかを復号し、プレーンテキストのデータキーを返します。 AWS Encryption SDK は、プレーンテキストのデータキーを使用してデータを復号します。キーリングのラッピングキーのいずれも暗号化されたデータキーを復号できない場合は、復号は失敗します。

![\[キーリングを使用した復号。\]](http://docs.aws.amazon.com/ja_jp/encryption-sdk/latest/developer-guide/images/keyring-decrypt.png)


単一のキーリングを使用するか、同じタイプまたは異なるタイプのキーリングを組み合わせて[マルチキーリング](use-multi-keyring.md)にすることもできます。データを暗号化すると、マルチキーリングは、マルチキーリングを構成するすべてのキーリングのすべてのラッピングキーで暗号化されたデータキーのコピーを返します。データは、マルチキーリングのラッピングキーのいずれかでキーリングを使用して復号できます。

## キーリングの互換性
<a name="keyring-compatibility"></a>

の異なる言語実装 AWS Encryption SDK にはいくつかのアーキテクチャ上の違いがありますが、言語の制約により、完全に互換性があります。ある言語実装によってデータを暗号化し、それを他の言語実装で復号することができます。ただし、データキーの暗号化と復号には、同じまたは対応するラッピングキーを使用する必要があります。言語の制約の詳細については、 トピックの など、各言語[の互換性 AWS Encryption SDK for JavaScript](javascript-compatibility.md)の実装に関する AWS Encryption SDK for JavaScript トピックを参照してください。

キーリングは、次のプログラミング言語でサポートされています。
+ AWS Encryption SDK for C
+ AWS Encryption SDK for JavaScript
+ AWS Encryption SDK .NET 用
+ のバージョン 3.*x* AWS Encryption SDK for Java
+ オプションの [Cryptographic Material Providers Library](https://github.com/aws/aws-cryptographic-material-providers-library) (MPL) 依存関係とともに使用する場合の AWS Encryption SDK for Pythonのバージョン 4.*x*。
+ AWS Encryption SDK Rust 用
+ AWS Encryption SDK Go 用

### 暗号化キーリングのさまざまな要件
<a name="encrypt-keyring-requirements"></a>

以外の AWS Encryption SDK 言語実装では AWS Encryption SDK for C、暗号化キーリング (またはマルチキーリング) またはマスターキープロバイダーのすべてのラッピングキーがデータキーを暗号化できる必要があります。いずれかのラッピングキーが暗号化に失敗すると、暗号化メソッドは失敗します。そのため、呼び出し元は、キーリング内のすべてのキーについて[必要な許可](use-kms-keyring.md#kms-keyring-permissions)を持っている必要があります。検出キーリングを使用して、単独またはマルチキーリングでデータを暗号化すると、暗号化操作は失敗します。

例外は です。 AWS Encryption SDK for C暗号化オペレーションでは標準検出キーリングは無視されますが、マルチリージョン検出キーリングを単独で指定するか、マルチキーリングで指定すると失敗します。

### 互換性があるキーリングおよびマスターキープロバイダー
<a name="keyring-compat-table"></a>

次の表は、 が提供するキーリングと互換性のあるマスターキーとマスターキープロバイダーを示しています AWS Encryption SDK 。言語の制約によるマイナーな非互換性については、言語実装に関するトピックで説明されています。


| キーリング: | マスターキープロバイダー: | 
| --- | --- | 
| [AWS KMS キーリング](use-kms-keyring.md) |  [KMSMasterKey (Java)](https://aws.github.io/aws-encryption-sdk-java/com/amazonaws/encryptionsdk/kms/KmsMasterKey.html) [KMSMasterKeyProvider (Java)](https://aws.github.io/aws-encryption-sdk-java/com/amazonaws/encryptionsdk/kms/KmsMasterKeyProvider.html) [KMSMasterKey (Python)](https://aws-encryption-sdk-python.readthedocs.io/en/latest/generated/aws_encryption_sdk.key_providers.kms.html) [KMSMasterKeyProvider (Python)](https://aws-encryption-sdk-python.readthedocs.io/en/latest/generated/aws_encryption_sdk.key_providers.kms.html#aws_encryption_sdk.key_providers.kms.KMSMasterKeyProvider)   AWS Encryption SDK for Python および には、[AWS KMS リージョン検出キーリングに相当するマスターキーまたはマスターキー](use-kms-keyring.md#kms-keyring-regional)プロバイダー AWS Encryption SDK for Java は含まれません。   | 
| [AWS KMS 階層キーリング](use-hierarchical-keyring.md) | 次のプログラミング言語とバージョンでサポートされています。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/encryption-sdk/latest/developer-guide/choose-keyring.html) | 
| [AWS KMS ECDH キーリング](use-kms-ecdh-keyring.md) | 次のプログラミング言語とバージョンでサポートされています。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/encryption-sdk/latest/developer-guide/choose-keyring.html) | 
| [Raw AES キーリング](use-raw-aes-keyring.md) | 対称暗号化キーと一緒に使用する場合:[JceMasterKey](https://aws.github.io/aws-encryption-sdk-java/com/amazonaws/encryptionsdk/jce/JceMasterKey.html) (Java)[RawMasterKey](https://aws-encryption-sdk-python.readthedocs.io/en/latest/generated/aws_encryption_sdk.key_providers.raw.html#aws_encryption_sdk.key_providers.raw.RawMasterKey) (Python) | 
| [Raw RSA キーリング](use-raw-rsa-keyring.md) | 非対称暗号化キーと一緒に使用する場合:[JceMasterKey](https://aws.github.io/aws-encryption-sdk-java/com/amazonaws/encryptionsdk/jce/JceMasterKey.html) (Java)[RawMasterKey](https://aws-encryption-sdk-python.readthedocs.io/en/latest/generated/aws_encryption_sdk.key_providers.raw.html#aws_encryption_sdk.key_providers.raw.RawMasterKey) (Python) Raw RSA キーリングは、非対称 KMS キーをサポートしません。非対称 RSA KMS キーを使用する場合、.NET AWS Encryption SDK 用 のバージョン 4.*x* 以降では、対称暗号化 (`SYMMETRIC_DEFAULT`) または非対称 RSA を使用する AWS KMS キーリングがサポートされています AWS KMS keys。  | 
| [Raw ECDH キーリング](use-raw-ecdh-keyring.md) | 次のプログラミング言語とバージョンでサポートされています。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/encryption-sdk/latest/developer-guide/choose-keyring.html) | 