5

私は Adam Griffiths の Authentication Library for CodeIgniter を使用しており、ユーザーモデルを微調整しています。

彼がトークンを生成するために使用する生成関数に出くわしました。

彼が好むアプローチは、random.org の値を参照することですが、私はそれは不必要だと考えました。私は 20 文字の長さの文字列をランダムに生成する彼のフォールバック アプローチを使用しています。

$length = 20;
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$token = '';    
for ($i = 0; $i < $length; $i++) {
 $token .= $characters[mt_rand(0, strlen($characters)-1)];
}

次に、ソルトを使用してこのトークンをハッシュします (さまざまな関数のコードを組み合わせています)。

sha1($this->CI->config->item('encryption_key').$str);

塩漬けハッシュを介してトークンを実行する理由があるかどうか疑問に思っていましたか?

文字列を単にランダムに生成するのは、ランダムなパスワードを作成するための単純な方法であると読みましたが、sh1 ハッシュとソルトは必要ですか?

注: https://www.grc.com/passwords.htm (63 個のランダムな英数字)から暗号化キーを取得しました。

4

2 に答える 2

7

ハッシュのソルトは、衝突の可能性を減らし、データベースでハッシュが見つからないようにするために使用されます(このように)-全員がmd5()パスワードの保存に使用している場合、パスワードファイル/データベースを「ハッシュ解除」することができます"パスワードのmd5'd値を検索します。

ソルトを使用すると、ハッシュに未知の要素が追加されます。つまり、ソルトを生成するためのコードも、ハッシュをブルートフォース攻撃するために既知である必要があります。ランダムなパスワードを生成するという状況では、パスワードデータはとにかくランダムであるため、ハッシュをソルトする意味がわかりません。

于 2010-03-19T20:45:01.897 に答える
3

ハッシュ関数をソルティングする主な理由は、辞書攻撃を複雑にすることです。また、ソルティングは同じハッシュを生成するため、同じパスワードの検出を回避します。

ハッシュ関数のもう 1 つの用途は、コードが実行しようとしている疑似乱数ジェネレーターです。

真のランダム性を実現するのは簡単なことではなく、疑似ランダムの生成には注意が必要です。あなたが説明したコードは、random.org から「最高の」ランダム性を取得しようとしているようであり、フォールバック疑似生成は正しいことをしようとしています。

于 2010-03-19T21:12:55.593 に答える