1

各レコードを暗号化するために一意の初期化ベクトルを使用することをお勧めしますが、そのフィールドを検索するにはどうすればよいですか?

現在、私は単一の IV を使用しています。つまり、暗号化された検索文字列を再構築して、たとえば電子メール アドレスを検索し、データベース内のそのフィールドをクエリできます。一意の初期化ベクトルを使い始めると、暗号化された検索文字列を再構築できなくなります。

私の環境は、ASP.NET、Entity Framework、SQL Server です。おそらく、これはデータベースで直接行う方が簡単ですが、私のクエリは LINQ-to-Entities を経由しています。

[私の最初の質問 - 最終的に SO で答えが見つかりません!]

4

1 に答える 1

1

一意の IV を使用すると、暗号化されたコンテンツを照合するためにすべてのレコードを復号化する必要があります。これは、ご存知のように、同じレコードを暗号化するたびに異なる値が得られるためです。

これが受け入れられないと仮定すると (小さなテーブルでは問題ありませんが、適切な数のレコードがあるものでは問題ありません)、1 つの代替方法は、値をハッシュし、ハッシュをデータベースの別の列に格納することです。ハッシュで検索し、一致するレコードのみを復号化して、それが本当に一致することを確認します。

暗号化しているものをハッシュ化する際の問題は、暗号化する価値のあるほとんどのもの (クレジット カード、口座番号など) には、可能な入力の数が決まっていることです。ハッシュに一意のソルトが添付されていても、たとえばクレジットカードではハッシングは良くありません.X億または兆または可能な限りのカード番号しかないため、ソルト、ハッシュ、および適切なプロセッサがあれば、かなり短い時間でカード番号をリバース エンジニアリングします。

ただし、可能な入力が多数あるものを扱っている場合は、このソリューションが機能する可能性があります。

もう 1 つの方法は、暗号化されたデータの一部がかなり一意的であるが、必ずしも秘密であるとは限らない場合 (たとえば、クレジット カード番号の最後の 4 つ)、その部分をプレーンテキストで保存し、それを使用してフィルター処理することです。大規模なデータセットを非常に小さな結果セットに変換し、その結果セット内の各レコードを復号化して検索基準と比較します。

于 2013-04-19T16:48:00.463 に答える