4

私の学校の作品の 1 つで、いくつかのフィールドを暗号化するために決定論的アルゴリズム (http://en.wikipedia.org/wiki/Deterministic_encryption) を使用する必要があります。

この特定のケースでは、テーブルをブール値で暗号化する必要があります。これは問題ありませんが、決定論的アルゴリズムを使用してもほとんど役に立ちません。

どうしてこんなことに?(あなたは尋ねるかもしれません)

たとえば、値「true」を暗号化すると、常に「AB1」の暗号文が取得され、値 false を暗号化すると、常に「SQ2」の暗号文が取得されます。したがって、値「true」と「false」で満たされたテーブルを持つ代わりに、値「AB1」と「SQ2」で満たされたテーブルがあります。攻撃者は、テーブルにブール値が格納されていることをすぐに理解し、AB1=true および SQ2=false であると理解するのにそれほど時間はかかりません。

これは私が宿題で防ぎたいことです。この問題を回避するために、特定のプロパティを持つ数値を使用してみました。たとえば、「true」の値は素数に置き換えられ、「false」の値は非素数に置き換えられます。したがって、私のテーブルは多くの異なる素数と非素数でいっぱいになります。

計算できる素数の数が「限られている」 (大きな素数を計算するには非常に長い時間がかかる) という小さな問題がなければ、これは許容できる解決策です。10000000 の間隔で、素数は 664579 のみです (6.64579% のみ)。

そこで、素数の代わりに奇数を使用することを検討しましたが、奇数の品質についてはわかりません。攻撃者は暗号から「奇数」という性質を取り出して攻撃できると思います。

奇妙さについての私の仮定は正しいですか?他の解決策はありますか?何かアイデアはありますか?

事前にペドロに感謝します。

4

4 に答える 4

3

論文によると、CryptDBは、実行されるクエリに応じて暗号化レベルを調整することで機能します。

Randomクエリが実行されない場合、すべての値は暗号化と呼ばれるものを使用して保存されます。これは基本的に、ランダムIVを使用したCBCモードのAESです。IVはすべてのフィールドで異なるため、すべてのフィールドの暗号化が異なります。

列に対して同等性チェックを実行する必要がある場合(JOIN、GROUP BYなどの場合)、暗号化をDeterministic暗号化にダウングレードします。このレベルの暗号化の主な要件は、特定の平文が常に同じ暗号文に暗号化されることです。したがって、このレベルの場合、ブール列には暗号文の2つの可能な値しかありません。はい、これはテーブルを監視できる攻撃者に情報を漏らしますが、それを回避する方法はありません。代わりに素数/非素数の保存は機能しません。データベースは必要な操作を実行できなくなります。

申し訳ありませんが、宿題の別のアイデアを見つける必要があります。

于 2013-01-27T19:31:51.623 に答える
1

ブール値のグループを取り、それらを2進数として扱うことができます

于 2013-01-26T19:41:40.993 に答える
1

ここでの最も重大な誤解は、各値を独自に暗号化しないことです。実行する必要があるのは、すべての値をある種のデータ構造(たとえば、の配列bool)にパックしてから、データ構造全体を暗号化することです(まだ実行していない場合は、CBCモードを使用します)。

選択したデータ構造(つまり、テーブルを単一のバイナリエンティティにパックする方法)は、暗号化に関する限り重要ではありません。

于 2013-01-26T19:41:54.987 に答える
0

さて、これが皆さんの役に立つかどうかはわかりませんが、私の最終的な結論は、私が持っていたものとあなたの提案のいくつかを組み合わせたものです.

次の割り当てを行うことで問題を解決しました。

true = ランダムな int PRIME 番号

false = 乱数の整数 (素数ではない)

そして今、明らかな質問が来ます:

Q: 乱数を選択している場合、生成された各数値を保存せずに乱数が繰り返されないようにするにはどうすればよいですか?

A: 乱数をバイトに変換し、同じテーブルの ID と混ぜます。このように、ランダムな繰り返し番号を生成したかどうかは問題ではありません。これは、ID (一意) と混合したときに出力が台無しになったためです。

ただし、素数の計算は非常に重くなる可能性があるため、他の提案を含むレポートの一部をここに投稿します。

Although we selected the property of being prime as an equivalent to the boolean of true, we could have also used other properties, such as:
  <li>
    <ul>
        Representing a true boolean by a random odd number and 
        a false boolean by a random even value
    </ul>
    <ul>
        Representing a true boolean by a sequence of numbers 
        that belongs to PI and a false boolean by a random 
        number sequence that doesn't belong to PI
    </ul>
  </li>

これは私にとって非常に興味深く、予想外の挑戦でした。これほど単純なことに、これほどの創意工夫が必要になるとは思いもしませんでした。

私のソリューションが皆さんのお役に立てば幸いです。暗号化が好きなら、プロジェクトを見てください :P

于 2013-01-28T18:40:16.683 に答える