始める前に、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(たとえば電子メールアドレス)からソルトを取得するよりも、データベースにソルトを保存する方が安全ですか?私の見方では、攻撃者が塩を含むデータベースのコピーを取得すると、ハッシュを解読しようとする彼の生活が少し楽になります。ただし、ソルトが保存されていない場合、攻撃者はソルトを作成するアルゴリズムも必要になります。私が間違っている場合は私を訂正してください。
私は自分自身を明確にしたと思います。よろしくお願いします。