2

始める前に、MD5が危険にさらされており(衝突攻撃とハッシュの速度)、パスワードのハッシュに使用すべきではないことを知っていますが、それだけのために、我慢してください。

私の質問は次のとおりです。md5でハッシュするときのソルト位置は、ハッシュの「品質」または「強度」にどのように影響しますか?

次のコードがあるとします。これは、ユーザーの電子メールアドレスの一部をソルトとして使用してユーザーのパスワードをハッシュします。

<?php
    $email = 'user@emailservice.ex';
    $password = 'RandomPassWithChars';

    $segments = explode('@', $email);
    list($saltPart1, $saltPart2, $saltPart3) = $segments;

    $hash = md5($saltPart1.$password.$saltPart3.$saltPart2);
?>

そのコードは、ブルートフォース/辞書/レインボーテーブル攻撃を遅くするだろうか?

<?php
    $password = 'RandomPass';
    $salt     = 'RandomSaltStoredInTheDatabase';
    $hash = md5($password, $salt);
?>

最初のコードのようにパスワードをソルトする価値がありますか、それとも2番目のコードと同じ結果が得られますか?それから何かメリットはありますか?最初のコードは、2番目の方法よりも、その方法でハッシュされたパスワードのリストのクラッキングを遅らせますか?

これは私に2番目の質問につながります:ユーザーID(たとえば電子メールアドレス)からソルトを取得するよりも、データベースにソルトを保存する方が安全ですか?私の見方では、攻撃者が塩を含むデータベースのコピーを取得すると、ハッシュを解読しようとする彼の生活が少し楽になります。ただし、ソルトが保存されていない場合、攻撃者はソルトを作成するアルゴリズムも必要になります。私が間違っている場合は私を訂正してください。

私は自分自身を明確にしたと思います。よろしくお願いします。

4

3 に答える 3

8

最初の質問:

ソルトの位置は、特定のハッシュのセキュリティには影響しません。優れたハッシュ関数は完全なエントロピーを備えており、変化するすべての入力ビットに対して、各出力ビットが変化する可能性が 50% あります。

特定の順序によるセキュリティ上の利点はすべて、salt と予想されるパスワードを連結するために使用されるアルゴリズムの相対的な遅さによるものです (たとえば、"password" . "salt"が よりも遅い場合は"salt" . "password"、前者を使用してください)。ただし、ほとんどのプログラミング言語には、そのようなパフォーマンスの「問題」はありません。

2 番目の質問:

ソルトがデータベースに明示的に格納されている場合、攻撃者はソルトを知り、ブルート フォース ハッシュ攻撃を開始できます。ソルトが不明な場合でも、ブルート フォース パスワード攻撃を使用できます (ただし、試行間に遅延を挿入することで簡単に無効にすることができます)。また、攻撃者はプログラムをリバース エンジニアリングして、ハッシュ フィールドを取得できる可能性があります。

ハッシュのセキュリティに関しては、ユーザーが 2 つの異なる場所で同じメール アドレスとパスワードを使用している場合、同じハッシュが両方の場所で表示されるという点で、ランダム ソルトの利点の 1 つが無効になります。

個人的には、ハッシュ化の最良の方法は次の方法を使用することだと思います。

"password" . "salt" . "internalconstantvalue"

これには、単純であり、他のほとんどのセキュリティ方法と同じくらい安全であるという利点があります。

于 2012-06-20T12:34:27.877 に答える
1

攻撃者がセキュリティをバイパスしようとするか、パスワードを見つけようとするかによって異なります。

攻撃者が、ハッシュ アルゴリズムの暗号化の弱点のおかげで、データベースの特定のハッシュとの衝突を見つけることに依存している場合、salt は何の効果もありません。出力に同じビットの束を与えるXXXハッシュアルゴリズム。

彼が可能な組み合わせのそれぞれを試してパスワードをブルートフォースしようとしている場合は、元のパスワードについて収集できる情報が役立ちます。

  • 長さ
  • 構成(英数字、特殊記号など)
  • ...

独自のソルト アルゴリズムを作成することで、実際には難読化によってセキュリティを確保しようとしています。これにより、アルゴリズムを知らない人がパスワードを総当たり攻撃することは実際に制限されますが、ハッシュ アルゴリズムは強化されません。

于 2012-06-20T12:30:46.703 に答える
0

パスワードのセキュリティに取り組むときは、攻撃者がデータベースにアクセスできる場合は、コードにアクセスできると常に想定してください。

したがって、ソルティングに関しては、ランダムな値のハッシュ(たとえば、mcirotime())を生成し、それを使用してハッシュする前にパスワードをソルトし、データベースのパスワードの隣の列に保存します.

パスワードにハッシュを追加する場合、私の個人的な意見では、ハッシュを最初に追加するか、最後に追加するか、途中に追加するかは問題ではありません。

セキュリティが欲しいですか?PHPassはデフォルトのハッシュ アルゴリズムとして (Blowfish ベースの) を使用するため、 PHPassを強くお勧めします。bcrypt

于 2012-06-20T12:28:42.133 に答える