質問

私は、社会保障番号のハッシュに対するプリイメージ攻撃を実行するコストについて尋ねました。 優れた答え 私が得たのは、社会保障番号のタイプには366,000,000のハッシュしかないため、プリイメージ攻撃を簡単に実行できるようになりました。

私の質問は、前イメージ攻撃を完全に回避できるかどうかです。私のシナリオでは、いくつかのクライアントが中央サーバーに社会保障番号を保存する必要があるということです。ハッシュはクライアント間で一貫している必要があります。クライアントは、オンラインWebサービスと通信できます。

役に立ちましたか?

解決

あなたの問題は、パスワードを使用するときに行う必要があることに似ています。パスワードは人間の脳に適合しているため、推測するのはそれほど難しくありません。

低エントロピーの秘密を使用する場合、リスクを軽減する2つの補完的な方法があります。

  • 攻撃者にとって、各「推測」をより高価にするために、反復/繰り返しハッシュを使用します。
  • 塩を使用して、コストの共有を防ぎます。攻撃者は、攻撃されたパスワード/SSNごとに完全な辞書検索攻撃を支払うものとします。

ハッシュをより高価にする1つの方法は、の連結をハッシュすることです n データのコピー、a n できるだけ大きい(クライアントのコンピューティング能力、および最終的にはユーザーの忍耐に応じて)。たとえば、(ダミー)ssn "123456789"の場合、使用してください H(123456789123456789123456789 ... 123456789). 。あなたは数えるでしょう n ここに何百万人も。基本的なPCでは、SHA-256は1秒あたり100メガバイトを簡単に処理できます。

a ハッシュ(SSN)にデータに沿って使用されるパブリックデータであり、ユーザーごとに異なります。塩は秘密ではありませんが、再利用するべきではありません(または少なくとも頻繁にそうではありません)。 SSNは永続的である傾向があるため(個人は生涯にわたって一意のSSNを持っています)、ユーザー名をSALTとして使用できます(これはパスワードとは対照的で、ユーザーはパスワードを変更でき、すべてに新しい塩を使用する必要があります。新しいパスワード)。したがって、ユーザーBob SmithがSSN 123456789を持っている場合、次のことを使用することになります。 H( "ボブ・スミス123456789ボブ・スミス123456789ボブ・スミス123456789 ...スミス123456789") プロセスを十分に遅くするのに十分な繰り返しがあります。

それほど新しいコンピューターでユーザーに1秒間待つことができると仮定すると(ユーザーがもっと待機させることは困難です)、決定された攻撃者でさえ数百SSNを試すのに苦労することが予想されます毎秒。単一のSSNを割るコストは数週間でカウントされ、ユーザー名を塩として使用したことのおかげで、攻撃者にはショートカットがありません(たとえば、塩漬けの「レインボーテーブル」を含む塩漬けの敗北を事前に計算したテーブルなど) 。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top