web-dev-qa-db-ja.com

ユーザーの複数のハッシュに同じソルトを使用するリスクはありますか?

現在、usersテーブルにsaltpassword_hashを格納しています(かなり標準的なもの)。

ユーザーのために別のフィールドの安全なハッシュを取得する必要が生じました。パスワードに使用されているのと同じソルトを再利用することでリスクはありますか?言い換えると、複数のハッシュで同じソルトを使用すると、攻撃者が1つのソルトに加えてすべてのハッシュを持っていると想定して、クラックが容易になりますか?もしそうなら?

ありがとう!

16
Brian Armstrong

ソルトのポイント、そして唯一の使用法は、攻撃者がいくつかの[〜#〜] n [〜#〜]要素をより少なく攻撃することを防ぐことです[〜#〜] n [〜#〜]に1を攻撃するコストの倍以上。ここで、「攻撃」とは、「既知のハッシュ値と一致する値が見つかるまで可能な値を試行する」ことを意味します。ソルトがなければ、攻撃者はハッシュされた推測をいくつかのハッシュ値と比較し、ハッシュを計算するコストを共有することができます。例えば攻撃者は、同時に攻撃するいくつかのハッシュ値を持っているか、または高速ルックアップのためにハッシュ値の事前計算済みテーブルを作成します(空間/時間のスワップを法として、両方の攻撃は同じです)。

ユーザーのパスワードと別のフィールドに同じソルトを使用している場合、攻撃者はそれらの両方を攻撃する可能性があります。これは、他のフィールドの潜在的な値が潜在的なパスワードでもあり、その逆の場合にのみ、攻撃者にとって有利になります。これは、コンテキストに当てはまる場合と当てはまらない場合があります。

一般的に、再利用の結果を徹底的に詳しく説明することが容易でない場合に限り、塩を再利用してはなりません。塩の再利用はお控えください。

13
Thomas Pornin