AWS Encryption SDK のベストプラクティス - AWS Encryption SDK

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

AWS Encryption SDK のベストプラクティス

-AWS Encryption SDKは、業界標準とベストプラクティスを使用して、データを簡単に保護できるように設計されています。多くのベストプラクティスが既定値で選択されていますが、いくつかのプラクティスはオプションですが、実用的であればいつでも推奨されています。

最新バージョンを使用する

使用を開始すると、AWS Encryption SDKの最新バージョンを使用するには、ご希望のプログラム言語。あなたが使用していた場合AWS Encryption SDKその後、できるだけ早く各バージョンにアップグレードしてください。これにより、推奨される構成を使用し、新しいセキュリティプロパティを活用してデータを保護できます。移行と展開のガイダンスなど、サポートされているバージョンの詳細については、バージョン 2.0 への移行。x

新しいバージョンがコード内の要素を非推奨にする場合は、できるだけ早く置き換えてください。非推奨の警告とコードコメントは、通常、良い代替案をお勧めします。

大幅なアップグレードを容易にし、エラーを起こしにくくするために、一時的または移行的なリリースを提供することがあります。これらのリリースおよびそれに付随するドキュメントを使用して、本番ワークフローを中断することなくアプリケーションをアップグレードできます。

デフォルト値の使用

-AWS Encryption SDKは、ベストプラクティスをデフォルト値に設計します。可能な限り、それらを使用してください。デフォルトが実用的でない場合、署名なしのアルゴリズムスイートなどの代替案を提供します。また、カスタムキーリング、マスターキープロバイダ、暗号化材料マネージャ(CMM)など、高度なユーザーにもカスタマイズの機会を提供します。これらの高度な選択肢を慎重に使用し、可能な場合はセキュリティエンジニアによって選択を確認してもらいます。

暗号化コンテキストを使用する

暗号化操作のセキュリティを向上させるには、以下のようにします。暗号化コンテキストは、データを暗号化するすべてのリクエストで意味のある値に置き換えます。暗号化コンテキストの使用はオプションですが、暗号化のベストプラクティスとして使用することをお勧めします。暗号化コンテキストは、認証された暗号化用の追加の認証データ (AAD) を、AWS Encryption SDK。暗号化コンテキストは、秘密ではありませんが、暗号化コンテキストは、以下の場合に役立ちます。完全性と信頼性を保護するを暗号化します。

左AWS Encryption SDKでは、暗号化時にのみ暗号化コンテキストを指定します。復号化の際、AWS Encryption SDKは、暗号化されたメッセージのヘッダーに暗号化コンテキストを使用し、AWS Encryption SDKはを返します。アプリケーションでプレーンテキストのデータを返す前に、メッセージの暗号化に使用した暗号化コンテキストがメッセージの復号に使用された暗号化コンテキストに含まれていることを確認します。詳細については、使用しているプログラミング言語の例を参照してください。

コマンドラインインターフェイスを使用する場合、AWS Encryption SDK暗号化コンテキストを検証します。

ラッピングキーを保護

-AWS Encryption SDKは、プレーンテキストのメッセージを暗号化する一意のデータキーを生成します。次に、指定したラップキーを使用してデータキーを暗号化します。ラッピングキーが失われたり削除されたりすると、暗号化されたデータは回復できなくなります。鍵が保護されていない場合は、データが脆弱である可能性があります。

安全なキーインフラストラクチャによって保護されているラッピングキーを使用する (AWS Key Management Service(AWS KMS). raw AES または raw RSA キーを使用する場合は、セキュリティ要件を満たすランダム性と耐久性のあるストレージを使用します。ハードウェアセキュリティモジュール (HSM)、または HSM を提供するサービス (AWS CloudHSMは、ベストプラクティスです。

キーインフラストラクチャの承認メカニズムを使用して、ラッピングキーへのアクセスを必要とするユーザーのみに制限します。最小特権などのベストプラクティスの原則を実装します。を使用する場合AWS KMSカスタマーマスターキー、使用するキーポリシーと IAM ポリシーを使用するベストプラクティスの原則

ラッピングキーを指定する

暗号化だけでなく、復号時にラッピングキーを明示的に指定することは、常にベストプラクティスです。そうすると、AWS Encryption SDKでは、指定したキーのみが使用されます。この方法では、意図した暗号化キーのみを使用することが保証されます。を使用する場合AWS KMSキーをラップすると、誤って別のAWSアカウントまたはリージョン、または使用する権限のないキーで復号化を試行しています。

暗号化するとき、キーリングおよびマスターキープロバイダーはAWS Encryption SDKサプライでは、ラッピングキーを指定する必要があります。指定したすべてのラッピングキーのみを使用します。また、未加工の AES キーリング、未加工の RSA キーリング、および JceMasterKeysを使用して暗号化および復号化するときに、ラップキーを指定する必要があります。

ただし、AWS KMSキーリングおよびマスターキープロバイダーを使用する場合、ラッピングキーを指定する必要はありません。-AWS Encryption SDKは、暗号化されたデータキーのメタデータからキー識別子を取得できます。ただし、ラップキーを指定することは、推奨されるベストプラクティスです。

で作業するときにこのベストプラクティスをサポートするにはAWS KMSキーをラップするには、以下のことをお勧めします。

  • を使用するAWS KMSラッピングキーを指定するキーリング。暗号化および復号化の際、これらのキーリングは、指定したラッピングキーのみを使用します。

  • を使用する場合AWS KMSマスターキーとマスターキープロバイダを使用する場合は、バージョン 1.7.xのAWS Encryption SDK。これらのプロバイダーは、指定したラッピングキーでのみ暗号化および復号化するプロバイダーを作成します。常にラップキーで復号化するマスターキープロバイダのコンストラクタは、バージョン 1.7 では非推奨です。xそして、バージョン 2.0 で削除されました。x

指定する場合AWS KMS復号化のためにキーをラップすることは実用的ではないので、探索プロバイダを使用することができます。-AWS Encryption SDKCとJavaScriptのサポートAWS KMS検出キーリング。検出モードのマスターキープロバイダは、バージョン 1.7 の Java および Python で使用できます。x以降. これらの検出プロバイダーは、AWS KMSラッピングキー、明示的にAWS Encryption SDKを使用して、データキーを暗号化したラッピングキーを使用します。

探索プロバイダーを使用する必要がある場合は、フィルター機能を使用して、使用する折り返しキーを制限します。たとえば、AWS KMSリージョン検出キーリングは特定のラッピングキーのみを使用しますAWSリージョン。また、以下のオプションを設定することもできます。AWS KMSキーリングとAWS KMS マスターキープロバイダーのみを使用するようにキーをラップする特に、AWSアカウント. また、いつものように、キーポリシーと IAM ポリシーを使用して、AWS KMSキーをラッピングします。

デジタル署名を使用する

署名付きのアルゴリズムスイートを使用するのがベストプラクティスです。デジタル署名メッセージの送信者がメッセージを送信し、メッセージの整合性を保護する権限があることを確認します。のすべてのバージョンAWS Encryption SDKは、デフォルトで署名付きのアルゴリズムスイートを使用します。

セキュリティ要件にデジタル署名が含まれていない場合は、デジタル署名なしのアルゴリズムスイートを選択できます。ただし、特に、あるユーザーのグループがデータを暗号化し、別のユーザーのセットがそのデータを復号化する場合は、デジタル署名を使用することをお勧めします。

キーのコミットメントを使用する

重要なコミットメントセキュリティ機能を使用するのがベストプラクティスです。一意のデータキーあなたのデータを暗号化しコミットメント値を使用すると、複数の平文メッセージを生成する可能性のある暗号文を復号化できなくなります。

-AWS Encryption SDKは、暗号化と復号化を完全にサポートします。キーコミットメントはバージョン 2.0.x。デフォルトでは、すべてのメッセージは暗号化され、キーのコミットメントで復号化されます。バージョン 1.7。xのAWS Encryption SDKは、鍵のコミットメントで暗号文を復号化できます。これは、以前のバージョンのユーザーがバージョン 2.0 を展開できるように設計されています。x成功しました。

主なコミットメントSupport には、新しいアルゴリズムスイート新しいメッセージ形式キーコミットメントなしで暗号文よりもわずか30バイト大きい暗号文を生成する。このデザインは、パフォーマンスへの影響を最小限に抑えるため、ほとんどのユーザーが重要なコミットメントのメリットを享受できます。アプリケーションのサイズやパフォーマンスに非常に敏感な場合は、コミットメントポリシー設定を使用してキーのコミットメントを無効にするか、AWS Encryption SDKを使用して、コミットメントなしでメッセージを復号化できますが、必要な場合にのみ復号化できます。

暗号化されたデータキーの数を制限する

復号化するメッセージ (特に信頼できないソースからのメッセージ) の暗号化されたデータキーの数を制限することをお勧めします。復号化できない多数の暗号化されたデータキーを使用してメッセージを復号化すると、遅延が長くなり、費用がかさみ、アカウントを共有するアプリケーションやその他のユーザーを制限し、キーインフラストラクチャを使い果たす可能性があります。制限なしで、暗号化されたメッセージには最大 65,535 (2^16-1) の暗号化されたデータキーを含めることができます。詳細については、「暗号化されたデータキーの制限」を参照してください。

の詳細については、「」を参照してください。AWS Encryption SDKこれらのベストプラクティスの基礎となるセキュリティ機能については、を参照してください。クライアント側の暗号化の向上:明示的なキー ID とキーのコミットメント()AWSセキュリティブログ