View a markdown version of this page

検索可能な暗号化 - AWS データベース暗号化 SDK

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

検索可能な暗号化

クライアント側の暗号化ライブラリの名前が AWS Database Encryption SDK に変更されました。このデベロッパーガイドでは、引き続き DynamoDB Encryption Client に関する情報を提供します。

検索可能な暗号化を使用すると、データベース全体を復号することなく、暗号化されたレコードを検索できます。これはビーコンを使用して実現されます。ビーコンは、フィールドに書き込まれるプレーンテキストの値と、実際にデータベースに格納される暗号化された値との間のマップを作成します。 AWS Database Encryption SDK は、レコードに追加する新しいフィールドにビーコンを保存します。使用するビーコンのタイプに応じて、暗号化されたデータに対して、完全一致検索や、よりカスタマイズされた複雑なクエリを実行できます。

注記

AWS Database Encryption SDK の検索可能な暗号化は、検索可能な対称暗号化など、学術研究で定義された検索可能な対称暗号化とは異なります

ビーコンは、プレーンテキストのフィールド値を暗号化された検索可能な識別子にマッピングする、切り捨てられたハッシュベースのメッセージ認証コード (HMAC) タグです。検索可能な暗号化用に設定された暗号化されたフィールドに値を書き込むと、 AWS Database Encryption SDK はプレーンテキスト値で HMAC を計算します。この HMAC 出力は、そのフィールドのプレーンテキストの値と 1 対 1 (1:1) で一致します。SDK は、複数の個別のプレーンテキスト値が同じビーコン上で衝突するように、意図的に HMAC 出力を切り捨てます。これらの衝突 (誤検出) は、権限のないユーザーが頻度パターンから機密情報を推測する能力を制限します。ビーコンをクエリすると、 AWS Database Encryption SDK はこれらの誤検出を自動的に除外し、クエリのプレーンテキストの結果を返します。この周波数漏洩の問題にさらに対応するために、ビーコンはパーティション分割され、同じプレーンテキスト値がパーティション間で異なるビーコン値を生成できます。テーブルが 1 つのパーティションのみを使用する場合、この動作はパーティション化されていない従来のビーコンと自然に一致します。

各ビーコンの平均誤検出数は、切り捨て後の残りのビーコンの長さとパーティションの数によって異なります。実装に適切なビーコンの長さを決定する方法については、「ビーコンの長さの決定」を参照してください。

注記

検索可能な暗号化は、データが入力されていない新しいデータベースで実装されるように設計されています。既存のデータベースで設定されたビーコンは、データベースにアップロードされた新しいレコードのみをマッピングします。ビーコンは既存のデータをマッピングできなくなります。

ビーコンが適しているデータセット

ビーコンを使用して、暗号化されたデータをクエリすると、クライアント側の暗号化されたデータベースに関連するパフォーマンスコストが削減されます。ビーコンを使用する場合、クエリの効率性と、データの分布に関して明らかになる情報の量との間には、固有のトレードオフが存在します。ビーコンはフィールドの暗号化状態を変更しません。 AWS Database Encryption SDK を使用してフィールドを暗号化して署名すると、フィールドのプレーンテキスト値がデータベースに公開されることはありません。データベースには、フィールドのランダム化および暗号化された値が格納されます。

ビーコンは、計算元の暗号化されたフィールドと一緒に保存されます。これは、不正ユーザーが暗号化されたフィールドのプレーンテキストの値を表示できない場合でも、ビーコンに対して統計分析を実行してデータセットの分布の詳細を知ることができ、極端な場合には、ビーコンがマッピングするプレーンテキストの値を識別できる場合があることを意味します。これらのリスクを軽減するには、適切なビーコン設定が不可欠です。適切なビーコンの長さとパーティショニングスキームを選択すると、十分な衝突を確保し、単一のビーコンの値の濃度を制限して頻度ベースの攻撃を軽減することで、機密性が維持されます。

セキュリティとパフォーマンス
  • ビーコンの長さを短くし、パーティション数を増やすと、衝突が増加し、周波数漏洩が減少し、セキュリティが向上します。

  • ビーコンの長さが長くパーティションが少ないほど、誤検出とクエリファンアウトを減らすことでパフォーマンスが向上します。

多くの実用的なシナリオでは、適切に選択された設定により、これらの競合する目標のバランスを取ることができます。ただし、検索可能な暗号化では、すべてのデータセットに対して必要なレベルのセキュリティとパフォーマンスの両方を提供できない場合があります。

ビーコンを設定する前に、脅威モデル、セキュリティ要件、パフォーマンスのニーズを注意深く確認し、データセットの一意性の特性を考慮して、検索可能な暗号化が適切な選択であるかどうかを判断します。

ディストリビューション

ビーコンのセキュリティプロパティは、基になるデータの分布と、使用されるパーティションの数など、ビーコンの設定方法の両方によって異なります。検索可能な暗号化用に暗号化フィールドを設定すると、 AWS Database Encryption SDK はそのフィールドに書き込まれた各プレーンテキスト値に対して HMAC を計算し、暗号化キーを使用してビーコンを取得します。ビーコンはパーティションのコンテキストで計算され、同じプレーンテキスト値を使用してパーティション間で異なるビーコン値を生成できます。テーブルが単一のパーティションのみを使用する場合、同一のプレーンテキスト値は、常に同じ切り捨てられた HMAC タグにマッピングされ、元のデータセットからの頻度パターンを保持できます。

分散が非常に歪んだフィールドには、特別な注意が必要です。たとえば、イリノイ州のすべての居住者の居住都市を保存するデータベースを考えてみましょう。暗号化Cityされたフィールドからビーコンを構築する場合、値「シカゴ」は他の都市よりもはるかに頻繁に発生します。権限のないユーザーが暗号化された項目とビーコン値にのみアクセスできる場合でも、この不均衡により、過剰なビーコンを観察することで、シカゴの居住者に対応するレコードを推測できる可能性があります。ビーコンを切り捨てると、より多くの衝突を強制することでこの漏洩を減らすことができますが、重大なスキューを十分に隠すために必要なビーコンの長さは、誤検出の増加によるパフォーマンスの大幅なオーバーヘッドを引き起こす可能性があります。

ビーコンを安全に設定するには、データの頻度分布を分析し、切り捨てとパーティショニングがどのように相互作用するかを理解する必要があります。ビーコンに保持されるビット数は、公開される統計情報の量を決定しますが、パーティションの数は、単一のビーコン値がどの程度集中するかを制限します。ビーコンの長さを短くしてパーティションを増やすと、頻度の漏洩は軽減されますが、誤検出とクエリファンアウトが増加します。ビーコンの長さが長くパーティションが少ないほどクエリ効率が向上しますが、基盤となるディストリビューションに関する詳細情報が公開されます。

極端なケースでは、テーブルが 1 つのパーティションのみを使用している場合、ワークロードを実行できないことがあります。否定的な値が優勢な医療テスト結果など、非常に少数の母集団や非常に不均衡なバイナリ結果を持つ属性は、切り捨てだけでは保護できません。1 つのパーティションでは、ディストリビューションを非表示にするのに十分なビーコンが短いと、すべての値が 1 つのタグに折りたたまれ、ビーコンが長いほど、まれな値を識別しやすくなります。このような場合、検索可能な暗号化を可能にするには、パーティション分割されたビーコンが必要です。このアプローチでは、過剰に表される値を複数のパーティションに分散することで、同等性クラスのサイズを縮小し、単一のパーティションを使用する場合に不可能な方法で周波数漏洩を制限します。

相関関係

相関する値を持つフィールドから個別のビーコンを構築しないことを強くお勧めします。相関するフィールドから構築されたビーコンでは、各データセットの分布に関して、不正ユーザーに対して明らかになる情報の量を十分かつ最小限に抑えるために、ビーコンをより短くする必要があります。ビーコンをどの程度切り詰める必要があるかを判断するには、エントロピーや相関する値の結合分布などのデータセットを注意深く分析する必要があります。結果として得られるビーコンの長さがパフォーマンスのニーズを満たさない場合、ビーコンはデータセットに適していない可能性があります。

例えば、郵便番号は 1 つの都市にのみ関連付けられている可能性が高いため、City フィールドと ZIPCode フィールドから 2 つの別個のビーコンを構築すべきではありません。通常、ビーコンによって生成される誤検知により、不正ユーザーは、データセットに関する特徴的な情報を識別しにくくなります。ただし、City および ZIPCode フィールド間の相関関係を知ることで、不正ユーザーは、どの結果が誤検知であるかを簡単に特定し、異なる郵便番号を区別できます。

また、同じプレーンテキストの値を含むフィールドからビーコンを構築することも避けてください。例えば、mobilePhone および preferredPhone フィールドは同じ値を保持する可能性が高いため、これらのフィールドからビーコンを構築すべきではありません。両方のフィールドから異なるビーコンを構築すると、 AWS Database Encryption SDK は異なるキーで各フィールドのビーコンを作成します。これにより、同じプレーンテキストの値について 2 つの異なる HMAC タグが作成されます。2 つの異なるビーコンに同じ誤検知が発生する可能性は低く、不正ユーザーは異なる電話番号を区別できる可能性があります。

相関するフィールドがデータセットに含まれている場合や、分布が不均一である場合でも、ビーコンをより短くすることで、データセットの機密性を維持するビーコンを構築できる場合があります。ただし、ビーコンの長さは、データセット内のすべての一意の値が多数の誤検知を生成し、データセットに関して明らかになる特徴的な情報の量を効果的かつ最小限に抑えることを保証するものではありません。ビーコンの長さによって推定されるのは、生成される誤検知の平均数のみです。データセットが不均一に分布しているほど、生成される誤検知の平均数を決定する際のビーコンの長さの有効性は低くなります。

ビーコン処理するフィールドの分布を慎重に評価し、セキュリティ要件を満たすために必要な切り捨て量を決定します。この章の以下のトピックでは、各パーティション内でビーコン値が均一に分散され、基盤となるデータがこれらの仮定を弱める相関を引き起こさないことを前提としています。

検索可能な暗号化のシナリオ

次の例は、検索可能な暗号化ソリューションと、この章で説明する主要な概念を示しています。このシナリオでは、特定のフィールド値が非常に頻繁に発生するため、1 つのパーティションを使用すると、大きな等価クラスが発生し、頻度リークが増加します。これに対処するために、設定では複数のパーティションが使用されるため、高頻度の値がより均等に分散され、効率的な等価検索の実行能力を維持しながら漏洩が軽減されます。

会社の従業員データを追跡する Employees という名前のデータベースについて考えてみましょう。データベース内の各レコードには、EmployeeID、LastName、FirstName、および Address と呼ばれるフィールドが含まれています。Employees データベース内の各フィールドは、プライマリキー EmployeeID によって識別されます。

データベース内のプレーンテキストレコードの例を次に示します。

{ "EmployeeID": 101, "LastName": "Jones", "FirstName": "Mary", "Address": { "Street": "123 Main", "City": "Anytown", "State": "OH", "ZIPCode": 12345 } }

暗号化アクションLastName フィールドと FirstName フィールドを ENCRYPT_AND_SIGN とマークした場合、これらのフィールドの値は、データベースにアップロードされる前にローカルで暗号化されます。アップロードされる暗号化データは完全にランダム化されており、データベースはこのデータが保護されているとは認識しません。典型的なデータエントリを検出するだけです。つまり、実際にデータベースに格納されるレコードは次のようになります。

{ "PersonID": 101, "LastName": "1d76e94a2063578637d51371b363c9682bad926cbd", "FirstName": "21d6d54b0aaabc411e9f9b34b6d53aa4ef3b0a35", "Address": { "Street": "123 Main", "City": "Anytown", "State": "OH", "ZIPCode": 12345 } }

LastName フィールド内の完全一致を検索するために、データベースをクエリする必要がある場合は、LastName フィールドに書き込まれるプレーンテキストの値を、データベースに格納される暗号化された値にマッピングするように、LastName という名前の標準ビーコンを設定します。

このビーコンは、LastName フィールド内のプレーンテキストの値から HMAC を計算します。各 HMAC 出力は切り詰められるため、プレーンテキストの値と完全に一致しなくなります。例えば、Jones の完全なハッシュと切り詰められたハッシュは次のようになります。

完全なハッシュ

2aa4e9b404c68182562b6ec761fcca5306de527826a69468885e59dc36d0c3f824bdd44cab45526f70a2a18322000264f5451acf75f9f817e2b35099d408c833

切り詰められたハッシュ

b35099d408c833

従業員が多いデータセットでは、JonesSmithJohnson などの特定の姓が他の姓よりもはるかに頻繁に発生する可能性があります。頻度の漏洩を減らし、ビーコン同等性クラスのサイズを制限するには、複数のパーティションを使用するように LastName ビーコンを設定する必要があります。

パーティションを有効にすると、書き込み時に各項目がパーティションに割り当てられ、パーティション番号がビーコン取得に組み込まれます。その結果、同じ姓を持つ従業員は、パーティション間で異なるビーコン値にマッピングされる可能性があります。これにより、頻度の高い名前が複数のパーティションに分散され、単一のビーコン値の過剰表現が軽減されます。

標準ビーコンを設定した後、LastName フィールド上で一致検索を実行できます。例えば、Jones を検索する場合は、LastName ビーコンを使用して次のクエリを実行します。

LastName = Jones

Jones などの特定の高頻度の姓をクエリする場合、アプリケーションは LastName ビーコンを使用してパーティションごとに 1 つのクエリを発行する必要があります。次に、 AWS Database Encryption SDK は結果を復号し、誤検出を自動的に除外して、正しいプレーンテキストレコードを返します。