2

だから私はPHPでの暗号化についてたくさん読んでいます。ログイン情報を安全に保存するための本当に良い方法が何であるか正確にはわかりません。

ただし、次の関数は私が思いついたものです。

function loginHash($username, $password){
    $salt = str_split($password,(strlen($password)/2)+1);
    $hash = hash('whirlpool', $username.$salt[0].'centerSalt'.$salt[1]);
    return $hash;
}

私はそれを正しい方法でやっていますか?これは、ユーザー名と組み合わせたパスワードの認証、および生成されたハッシュをデータベースに保存されているハッシュと比較してログインを確認する機能に使用されます。

4

5 に答える 5

6

暗号化!=ハッシュ。どちらも一般的に暗号化のカテゴリに含まれると認められていますが、暗号化できる場合は復号化できますが、ハッシュの場合はそうではありません。ハッシュは単なるハッシュであり、それだけです。

塩は確かに適切に構築されていません。これは、fopen()呼び出しを使用して/ dev/urandomから読み取られるxバイトである必要があります。たとえば、私が個人的に使用しているのは16バイトのソルトです。これにより、レインボーテーブル攻撃を効果的に防ぐことができます。

物事をより安全にするために、秘密鍵も使用してください。例えば:

$hashedPassword = hash_hmac('whirlpool',$password.$salt,$key);

$keyは単なるランダムデータです。たとえば、ドキュメントルートの上の隠しフォルダに「key.bin」と呼ばれる64 kBのファイルを生成し、ハッシュプロセスの前にfile_get_contents()を使用できます。

なぜ秘密鍵を使うのですか?ハッシュとソルトをデータベースに保存し、キーをファイルシステムに保存すると、保存されているハッシュとソルトを入手した場合に、だれもがハッシュを解読するのを防ぐことができます。したがって、攻撃者はデータベースとファイルシステムの両方に侵入してハッシュを解読する必要がありますが、アプリケーション全体をすでに解読している場合、誰もがハッシュを解読することは無意味であることに注意してください。これは、ハッシュスキームが優れていることを意味します。

于 2009-06-21T10:05:18.190 に答える
6

私のアドバイスは、決して、決して、決して、あなた自身の暗号化とハッシュ関数を決して書かないことです。専門家でさえ常に間違っているので、自分で試してはいけません。

phpass(Openwall)は素晴らしいハッシュフレームワークだと聞いたので、それを使用することをお勧めします。

彼らはハッシュにソルトを使用し、ハッシュを微調整するためのかなりのパラメーターを持っています。

于 2009-06-21T09:17:47.397 に答える
5

あなたは実際に塩を使用していません。

Saltはランダムに生成された文字列であり、ハッシュ関数の入力に含まれています。そのため、毎回異なります。

ユーザーがパスワードを保存するときにソルトを生成し、このソルトがデータストレージに含まれるという考え方です。認証時に、ソルトと保存されたハッシュを取得し、指定されたパスワードに保存されたソルトをプレフィックスとして付け、2つを一緒にハッシュします。次に、結果を保存されているハッシュと比較します。

于 2009-06-21T09:19:43.820 に答える
1

上記のコードは2つのボックスをチェックしていると思います。

  • レインボーテーブル攻撃の回避(Salts経由)
  • 安全なログイン
于 2009-06-21T09:18:22.810 に答える
1

ソルトを使用すると、2つの問題が解決します。

  1. レインボーテーブル:レインボーテーブルは、事前に計算されたハッシュであり、ソース値とともに保存されます。ハッシュを比較することで、ハッシュされていない値(パスワード)を取得します。ソルトを追加することで、さらに複雑なレイヤーができます。攻撃者は、カスタムハッシュテーブルを生成するためのソルトを知っている必要があります。

  2. ハッシュ値の違い:ソルトなしで、同じ2つのパスワードが同じ2つのハッシュを生成します。これで、2人のユーザーが同じパスワードを使用しているかどうかを簡単に確認できます(ここでの弱点は、レインボーテーブルの場合とほぼ同じですが、それでも)。それはそれほど多くはないかもしれませんが、それでも懸念事項です。

さらに、パスワードハッシュに高速アルゴリズムを使用しないでください。md5は高速で、shaは高速です。遅いほど良い。

matsano Chargenブログは、セキュリティに関するヒントやヒントを提供する優れた(そして面白い)リソースです。

于 2009-06-21T11:02:20.183 に答える