翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Cryptographic Computing for Clean Rooms を使用する際の考慮事項
Cryptographic Computing for Clean Rooms (C3R) は、データ保護を最大限に強化することを目的としています。ただし、一部のユースケースでは、追加機能と引き換えにデータの保護レベルを下げることでメリットが得られる場合があります。こうした特定のトレードオフは、C3R を最も安全な設定から変更することで実現できます。ユーザーは、これらのトレードオフを認識し、それが自身のユースケースに適しているかどうかを判断する必要があります。考慮すべきトレードオフは次のとおりです。
トピック
これらのシナリオでのパラメータの使用方法の詳細については、「暗号コンピューティングパラメータ」を参照してください。
テーブル内でcleartextデータと暗号化データの混在を許可する
すべてのデータをクライアント側で暗号化することで、最大限のデータ保護が可能になります。ただし、これにより特定の種類のクエリ (SUM 集約関数など) が制限されます。cleartextデータを許可することのリスクは、暗号化されたテーブルにアクセスできる人なら誰でも暗号化された値に関する情報を推測できるようになることです。これは、cleartextおよび関連するデータを統計的に分析することで可能になります。
例えば、City
と State
の列があるとします。City
列はcleartextで、State
列は暗号化されています。City
列の値 Chicago
を見れば、State
の値がIllinois
であることを高い確率で特定できます。逆に、一方の列が City
で、もう一方の列が EmailAddress
の場合、暗号化されている EmailAddress
の情報がcleartext City
によって明らかになることはまずありません。
このシナリオのパラメータの詳細については、「[cleartext 列を許可] パラメータ」を参照してください。
fingerprint列で値の繰り返しを許可する
最も安全な方法では、どのfingerprint列にも変数のインスタンスが 1 つだけ含まれていると想定されてます。1 つのfingerprint列で項目を繰り返すことはできません。C3R 暗号化クライアントは、これらのcleartext値をランダム値と見分けがつかない一意の値にマッピングします。したがって、これらのランダム値からcleartextに関する情報を推測することはできません。
fingerprint列で値が繰り返される場合のリスクは、値が繰り返されるとランダムに見える値も繰り返されることです。したがって理論的には、暗号化されたテーブルにアクセスできる人なら誰でもfingerprint列の統計分析を行って、cleartext値に関する情報を明らかにできる可能性があります。
例えば、fingerprint列が State
で、テーブルのすべての行が米国の世帯に対応しているとします。頻度分析を行うことで、どの州が California
でどの州が Wyoming
であるかを高い確率で推測できます。この推測が可能なのは、California
の方が Wyoming
よりも住民の数がはるかに多いからです。逆に、fingerprint列が世帯識別子に関するもので、数百万件のエントリからなるデータベースの中で各世帯が 1 ~ 4 回出現したとします。この場合、頻度分析によって有用な情報が明らかになることはまずありません。
このシナリオのパラメータの詳細については、「[複製を許可] パラメータ」を参照してください。
fingerprint列の命名方法に関する制限を緩和する
デフォルトでは、暗号化されたfingerprint列を使用して 2 つのテーブルが結合される場合、各テーブルのそれらの列は名前が同じであると想定されます。この結果の技術的な理由は、デフォルトでは、各fingerprint列を暗号化するために異なる暗号キーを派生させるからです。このキーは、コラボレーションの共有シークレットキーと列名の組み合わせから派生します。列名の異なる 2 つの列を結合しようとすると、異なるキーが派生し、有効な結合を処理できません。
この問題に対処するには、各列名からキーを派生させる機能をオフにします。すると、C3R 暗号化クライアントはすべてのfingerprint列に 1 つの派生キーを使用します。リスクは、別の種類の頻度分析を行うと、情報が明らかになる可能性があることです。
もう一度 City
と State
の例を使ってみましょう。各fingerprint列で同じランダム値を派生させる (列名を組み込まない) 場合、New York
では City
列と State
列のランダム値が同じになります。ニューヨークは、米国でも数少ない、City
と State
の名前が同じ都市の 1 つです。逆に、データセットの各列の値がまったく異なれば、情報が漏れることはありません。
このシナリオのパラメータの詳細については、「[名前の異なる列の JOIN を許可] パラメータ」を参照してください。
NULL 値の表現方法を決定する
選択肢は、NULL 値を他の値と同様に暗号化処理 (暗号化と HMAC) するかどうかです。NULL 値を他の値と同様に処理しないと、情報が漏洩する可能性があります。
例えば、Middle Name
列のcleartextの NULL が、ミドルネームのない人を示しているとします。これらの値を暗号化しないと、暗号化されたテーブルのどの行がミドルネームを持たない人に使われているかが漏れてしまいます。そうした情報は、一部の集団の一部の人々にとっては、ある種の識別信号となる可能性があります。しかし、NULL 値を暗号化処理すると、特定の SQL クエリが異なる動作になります。例えば GROUP BY 句では、fingerprint列内のfingerprint NULL 値がまとめてグループ化されなくなります。
このシナリオのパラメータの詳細については、「[NULL 値を保存] パラメータ」を参照してください。