社会保障番号のハッシュに対して原像攻撃を実行するコストについて質問しました。私が得た優れた答えは、社会保障番号の種類には3億6600万のハッシュしかないため、原像攻撃を簡単に実行できるというものでした。
私の質問は、原像攻撃を完全に回避できるかどうかです。私のシナリオでは、複数のクライアントが社会保障番号を中央サーバーに保存する必要があります。ハッシュはクライアント間で一貫している必要があります。クライアントはオンラインWebサービスと通信できます。
あなたの問題は、パスワードを使用するときにしなければならないことと似ています。パスワードは人間の脳に適合しているため、推測するのはそれほど難しいことではありません。
低エントロピーシークレットを使用する場合、リスクを軽減するための2つの補完的な方法があります。
ハッシュをより高価にする1つの方法は、データのn個のコピーの連結をハッシュし、nを可能な限り大きくすることです(クライアントの計算能力、そして最終的にはユーザーの忍耐力によって異なります)。たとえば、(ダミーの)SSN "123456789"の場合、H(123456789123456789123456789 ... 123456789)を使用します。ここではnを数百万単位で数えます。基本的なPCでは、SHA-256は1秒あたり100メガバイトを簡単に処理できます。
ソルトは、ハッシュするデータ(SSN)に沿って使用される公開データの一部であり、ユーザーごとに異なります。塩は秘密である必要はありませんが、再利用するべきではありません(または少なくとも頻繁に)。SSNは永続的である傾向があるため(個人は生涯にわたって一意のSSNを持っています)、ユーザー名をソルトとして使用できます(これは、ユーザーがパスワードを変更できるパスワードとは対照的であり、すべてのユーザーに新しいソルトを使用する必要があります新しいパスワード)。したがって、ユーザーBobSmithがSSN123456789を持っている場合、プロセスを十分に遅くするのに十分な繰り返しでH( "Bob Smith 123456789 Bob Smith 123456789 Bob Smith 123456789 ... Smith 123456789")を使用することになります。
それほど新しいコンピュータではユーザーを1秒間待たせることができると仮定すると(ユーザーをそれ以上待たせることは困難です)、決心した攻撃者でさえ数百以上のSSNを試すのに苦労することが予想されます。毎秒。単一のSSNをクラックするコストは数週間でカウントされ、ユーザー名をソルトとして使用するため、攻撃者にはショートカットがありません(たとえば、ソルトは、大人気の「レインボーテーブル」を含む事前計算されたテーブルを打ち負かします)。 。