2011-07-30 21 views
1

次のコードスニペットはphpですが、私は他のWebプログラミング言語の開発者が乱数をハッシュしているのを見てきました。なぜ乱数(塩を使わないで)乱数?

if ($loginValid=='yes') { 
    $token = sha256(generateRandomNumber()); 
    $_SESSION["token"] = $token; 
    $_SESSION["userid"] = $id; 
    setcookie("authenticationtoken", $token, ...) 
} 

sha256は、暗号化ハッシュ関数です。それはあなたがそれを与えるどんな入力でも、塩を使用しないので、同じ出力が出てくる。それを試してみてください:どのような文脈では

http://www.xorbin.com/tools/sha256-hash-calculator

がハッシングされたはいい習慣乱数(塩を使用せずに)?

答えて

4

私の推測は、generateRandomNumber()が返すサイズとは無関係に、既知のサイズのハッシュを取得する簡単な方法です。明らかにgenerateRandomNumber()に小さい範囲がある場合、それも返される明確なハッシュの数に反映されます。

+3

OMG!私はジョン・スケートが私の質問に答える日が来るとは思っていませんでした! 「Jon Skeet」バッジがあるはずです。それはプラチナであり、Jon Skeetがあなたの質問に答えるなら、あなたはそれを授与されます。 – user784637

+2

私は「今は価値がない」と思っています... http://www.youtube.com/watch?v=-FucbvoFFy0 – Spence

1

GenerateRandomNumberがランダムシードを持たないと仮定すると、つまり真に暗号で安全な乱数であると仮定すると、塩は必要ありません。 saltの目的は、同じ入力をハッシュ関数に使用する場合、2つの異なる結果を返すことを保証することです。

トークンが単純にクライアントに渡される秘密である必要がある場合、このハッシュをソルトすることは本当に役に立ちません。

参考のために、パスワードハッシュで塩を使用します。ユーザーパスワードを保存するのではなく、ハッシュを保存して、データベースに侵入された場合でも誰もユーザーのパスワードを盗むことができないようにします。ただし、同じパスワードを使用するユーザーが同じハッシュを取得しないようにするため、ハッシュされる前にパスワードに塩を追加して、2人のユーザーが同じパスワードを持っていても、別のハッシュを取得する必要があります。