よくある質問 - AWS Encryption SDK

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

よくある質問

AWS Encryption SDK と AWS SDK の違いはなんですか?

AWS SDK は、AWS Key Management Service (AWS KMS) を含む Amazon Web Services (AWS) とやり取りするためのライブラリを提供します。.NET 用 AWS Encryption SDK などの AWS Encryption SDK の一部の言語実装では、常に同じプログラミング言語の AWS SDK が必要です。他の言語実装では、キーリングまたはマスターキープロバイダで AWS KMS キーを使用する場合にのみ、対応する AWS SDK が必要になります。詳細については、AWS Encryption SDK のプログラミング言語 のプログラミング言語のトピックを参照してください。

AWS SDK を使用して、少量のデータ (対称暗号化キーでは最大 4,096 バイト) の暗号化と復号化、クライアント側の暗号化用のデータキーの生成など、AWS KMS とのやり取りを行うことができます。ただし、データキーを生成する場合、AWS KMS の外部でデータキーを使用してデータを暗号化し、プレーンテキストのデータキーを安全に破棄し、暗号化されたデータキーを保存すし、データキーを復号化してデータを復号化するなど、暗号化と復号化のプロセス全体を管理する必要があります。AWS Encryption SDK が、このプロセスを処理します。

AWS Encryption SDK は、業界標準とベストプラクティスを使用して、データを暗号化・復号化する ライブラリを提供しています。データキーを生成し、指定したラッピングキーで暗号化し、暗号化されたメッセージ、暗号化されたデータと復号化に必要な暗号化データキーを含むポータブル・データ・オブジェクトを返します。復号化するときは、暗号化されたメッセージと少なくとも 1 つのラッピングキー (オプション) を渡すと、AWS Encryption SDK はプレーンテキストデータが返されます。

「AWS Encryption SDK」ではラッピングキーとして AWS KMS keys を使用できますが、必須ではありません。自分で生成した暗号化キーと、キーマネージャまたはオンプレミスのハードウェアセキュリティモジュールから生成した暗号化キーを使用できます。  AWS アカウントをお持ちでない場合でも、AWS Encryption SDK を使用できます。

AWS Encryption SDK と Amazon S3 暗号化クライアントの違いはなんですか?

「AWS SDK」の Amazon S3 暗号化クライアント では、Amazon Simple Storage Service (Amazon S3) に保存したデータの暗号化と復号化を行います。これらのクライアントは、Amazon S3 と緊密に連携しており、そこに格納されているデータにのみ使用されることを意図しています。

AWS Encryption SDK は、どこに保存したデータでも暗号化と復号を行うことができます。AWS Encryption SDK と Amazon S3 の暗号化クライアントは、これらが異なるデータ形式で暗号化テキストを生成するため、互換性がありません。

AWS Encryption SDK では、どのような暗号化アルゴリズムがサポートされていますか? また、デフォルトは何ですか?

AWS Encryption SDK では、AES-GCM として知られるガロア/カウンター モード(GCM)の高度暗号化標準(AES)対称アルゴリズムを使用して、データを暗号化します。データを暗号化するデータキーは、複数ある対称および非対称のアルゴリズムから選択することができます。

AES-GCM では、デフォルトのアルゴリズムスイートは、256 ビットキー、キー派生 (HKDF)、デジタル署名、および キーコミットメント を含む AES-GCM です。また、AWS Encryption SDK は 192 ビット、128 ビットの暗号化キー、およびデジタル署名やキーコミットメントなしの暗号化アルゴリズムをサポートしています。

すべてのケースで、初期化ベクター (IV) の長さは 12 バイトで、認証タグの長さは 16 バイトです。デフォルトでは、SDK はデータキーを HMAC ベースの抽出および展開キー取得関数 (HKDF) への入力として使用して AES-GCM 暗号化キーを取得します。また、Elliptic Curve Digital 署名アルゴリズム (ECDSA) 署名を追加します。

使用するアルゴリズムの選択については、「サポートされているアルゴリズムスイート」を参照してください。

サポートされているアルゴリズムの実装の詳細については、「アルゴリズムのリファレンス」を参照してください。

初期化ベクター (IV) はどのように生成され、どこに保存されますか?

AWS Encryption SDK は、決定的メソッドを使用して、フレームごとに異なる IV 値を構築します。この手順により、メッセージ内で IV が繰り返されないことが保証されます。(AWS Encryption SDK for Java および AWS Encryption SDK for Python のバージョン 1.3.0 以前のバージョンでは、AWS Encryption SDK は各フレームごとに固有の IV 値をランダムに生成していました。)

IV は AWS Encryption SDK が返す暗号化されたメッセージに保存されます。詳細については、「AWS Encryption SDK のメッセージ形式のリファレンス」を参照してください。

各データキーはどのように生成、暗号化、および復号されますか?

この方法は、使用するキーリングまたはマスターキープロバイダーによって異なります。 

AWS Encryption SDK の AWS KMS キーリングとマスターキープロバイダーは AWS KMS GenerateDataKey API オペレーションを使用して各データキーを生成し、ラッピングキーで暗号化します。追加の KMS キーでデータキーのコピーを暗号化するには、AWS KMS Encrypt オペレーションを使用します。データキーを復号するには、AWS KMS Decrypt オペレーションを使用します。詳細については、GitHub の AWS Encryption SDK 仕様にある「AWS KMS キーリング」を参照してください。

他のキーリングは、各プログラミング言語のベストプラクティスメソッドを使用して、データキーを生成、暗号化、復号化します。詳細については、GitHub の AWS Encryption SDK 仕様の「フレームワークセクション」にあるキーリングプロバイダーまたはマスターキープロバイダーの仕様を参照してください。

データを暗号化するために使用されたデータキーを追跡するにはどうすればよいですか?

これは、AWS Encryption SDK によって行われます。データを暗号化する場合、SDK によってデータキーが暗号化され、返された暗号化されたメッセージの暗号化されたデータと共に暗号化されたキーが保存されます。データを復号する場合、AWS Encryption SDK は暗号化されたメッセージから暗号化されたデータキーを抽出し、それを復号してデータの復号に使用します。

AWS Encryption SDK は、暗号化されたデータと暗号化されたデータキーをどのように保存しますか?

AWS Encryption SDK の暗号化オペレーションでは、暗号化されたデータとその暗号化されたデータキーを含む単一のデータ構造である暗号化されたメッセージが返されます。メッセージ形式は少なくとも 2 つの部分 (ヘッダー本文) で構成されます。メッセージヘッダーには、暗号化されたデータキーと、メッセージ本文の構成に関する情報が含まれています。メッセージ本文には、暗号化データが含まれます。アルゴリズムスイートにデジタル署名が含まれる場合、メッセージ形式には、署名を含むフッターが含まれます。詳細については、「AWS Encryption SDK のメッセージ形式のリファレンス」を参照してください。

AWS Encryption SDK のメッセージ形式によって、暗号化されたデータに生じるオーバーヘッドはどのくらいですか?

AWS Encryption SDK によって生じるオーバーヘッドの大きさは、以下のようないくつかの要因によって異なります。

  • プレーンテキストデータのサイズ

  • どのサポートされているアルゴリズムが使用されているか

  • 追加認証データ (AAD) が提供されているかどうか、およびその AAD の長さ

  • ラッピングキーまたはマスターキーの数と種類

  • フレームサイズ (フレームデータが使用される場合)

AWS Encryption SDK をデフォルト設定 (ラッピングキー (またはマスターキー) として 1 個の AWS KMS key、AAD なし、フレーム化されていないデータ、署名付き暗号化アルゴリズム) で使用する場合、オーバーヘッドは約 600 バイトです。一般的に、AWS Encryption SDK で生じるオーバーヘッドは、AAD がない場合で 1 KB 以下と考えることができます。詳細については、「AWS Encryption SDK のメッセージ形式のリファレンス」を参照してください。

独自のマスターキープロバイダーを使用できますか?

はい。実装の詳細は、どのサポートされているプログラミング言語を使用するかによって異なります。ただし、サポートされているすべての言語で、カスタムの暗号化マテリアルマネージャー (CMM)、マスターキープロバイダー、キーリング、マスターキー、およびラッピングキーを定義できます。

複数のラッピングキーでデータを暗号化できますか?

はい。追加のラッピングキー (またはマスターキー) を使用してデータキーを暗号化することで、キーが別のリージョンにある場合や復号のために使用できない場合に備えて冗長性を保つことができます。

複数のラッピングキーでデータを暗号化するには、複数のラッピングキーを使用してキーリングまたはマスターキープロバイダーを作成します。キーリングを使用する場合は、複数のラッピングキーを持つ 1 つのキーリングマルチキーリングを作成できます。

複数のラッピングキーでデータを暗号化する場合、AWS Encryption SDK は 1 つのラッピングキーを使用してプレーンテキストのデータキーを生成します。データキーは固有で、ラッピングキーとは数学的に無関係です。このオペレーションでは、プレーンテキストデータキーとラッピングキーで暗号化されたデータキーのコピーが返されます。次に暗号化メソッドは、データキーを他のラッピングキーで暗号化します。結果として得られる暗号化されたメッセージには、暗号化されたデータと各ラッピングキーで 1 つずつ暗号化された一組のデータキーが含まれます。

暗号化されたメッセージは、暗号化オペレーションで使用されるラッピングキーのいずれかを使用して復号できます。AWS Encryption SDK は、ラッピングキーを使用して暗号化されたデータキーを復号します。次に、そのプレーンテキストのデータキーを使用してデータを復号します。 

AWS Encryption SDK では、どのデータ型を暗号化できますか?

AWS Encryption SDK のほとんどのプログラミング言語実装では、raw バイト (バイト配列)、I/O ストリーム (バイトストリーム)、文字列を暗号化できます。.NET 用 AWS Encryption SDK は I/O ストリームをサポートしていません。サポートされている各プログラミング言語 のサンプルコードを提供します。

AWS Encryption SDK はどのように入力/出力 (I/O) ストリームの暗号化と復号を行いますか?

AWS Encryption SDK は元の I/O ストリームをラップする暗号化ストリームまたは復号ストリームを作成します。暗号化や復号のストリームは、読み取りまたは書き込みの呼び出しに対して暗号化オペレーションを実行します。たとえば、基盤となるストリームでプレーンテキストのデータを読み取り、結果を返す前に暗号化できます。または、基盤となるストリームから暗号化テキストを読み取り、結果を返す前に復号できます。ストリーミングをサポートする サポートされている各プログラミング言語 のストリームを暗号化および復号するためにサンプルコードを提供します。

.NET 用 AWS Encryption SDK は I/O ストリームをサポートしていません。