7

よく知る前に、ハッシュアルゴリズムとしてmd5を使用してログインシステムを実装しました。よくわかったので、PHPassの使用に移りたいと思います。私の問題は、システムがすでに本番環境にあり、すべてのユーザーにパスワードの変更を求めることがすべての頭痛の種になるということです。

私は十分に単純な解決策を考え出しましたが、以前の間違いを考慮して、無知のために同じように深刻な間違いを犯していないことを確認したいと思います。

私の解決策は次のとおりです。

変化する

  1. md5($_POST['pass'])
  2. md5ハッシュパスワードをデータベース値と照合します

  1. md5($_POST['pass'])
  2. md5ハッシュパスワードをに渡す$hasher->HashPassword()
  3. $hasher->CheckPassword()再ハッシュされたパスワードをDBからの値と照合するために使用します

わかりやすくするために、md5バージョンを再ハッシュしているだけです。これは、すでにDBにあるバージョンだからです。これは、追加のセキュリティ対策として意図されたものではありません(ただし、そうであれば、それは素晴らしいことです!)。

4

4 に答える 4

4
  1. MD5()の問題は、この熱狂的なプログラマーコミュニティサイトではかなり誇張されています。特に通常の初心者アプリケーションの他の部分と比較して、このハッシュアルゴリズムで実際に悪いことは何もありません。通常のPHPサイトでphpass手法を使用することは、わら小屋の紙のドアに安全なロックを使用することに似ています。

  2. 他のサイト(ああ、私の!)で同じユーザーに対して盗まれたり使用されたりする可能性に対してパスワードを安全に保つために最も重要なことは、パスワードの強度とソルトです。アルゴリズム自体をハッシュしません。「1234」や「joe」のようなばかげたパスを保護するハッシュ手法はありません。
    だから、md5 + strong password + average saltより良いusual password + phpass

  3. 既存のmd5ハッシュをphpassする理由はありません
    。賢明な移行アルゴリズムは

    • このユーザーレコードで新しいハッシュフラグを確認してください。
    • 設定されている場合-
      • phpass認証に移動します
    • そうでない場合:
      • md5($ _ POST ['pass'])
      • md5ハッシュパスワードをデータベース値と照合します
      • 正しければ:
        • phpass($ _ POST ['pass'])
        • 結果をデータベースに保存
        • このレコードに新しいハッシュフラグを設定します
    • 終わり
于 2011-09-04T08:10:33.793 に答える
1

あなたが話している問題は、実際にはPHPassに固有のものではなく、一般的にパスワードをハッシュすることです。基本的にはダブルハッシュです。このトピックについては、別の質問ですでに説明されています。「ダブルハッシュ」パスワードは、一度だけハッシュするよりも安全性が低いのでしょうか。

そこを見ると、2番目(またはそれ以降)のハッシュ関数に渡される文字の範囲が狭くなるため、ダブルハッシュが悪いかどうかについてまだ議論が続いていることがわかります。ただし、ハッシュプロセスの速度が低下し、ブルートフォース攻撃に対抗しますが、2回実行するだけでは、スピードバンプとしてはあまり機能しません。

ダブルハッシュを処理する必要がない場合は、usersデータベーステーブルにフラグフィールドを追加しtrue、新しいPHPass形式のハッシュを設定した後に参加するすべての新規ユーザーに対してフラグフィールドを設定することを試みることができます。次に、ユーザーがログインするときにフラグフィールドが設定されていない場合は、古いハッシュシステム、または質問で詳しく説明した変更バージョンを使用します。フラグフィールドがある場合は、設定した新しいハッシュプロセスを使用できます。

更新:$_POST実際、それに基づいて試すことができるのは、そのフラグを設定することです。古いシステムでログインすると、一致する場合は、データにハッシュされていないパスワードが残っているので、次に、新しいハッシュ設定でそれを実行し、新しいハッシュを保存してから、フラグをに設定しtrueます。これは、新しいハッシュメソッドにアップグレードされているためです。それ以降、彼らは新しいハッシュ方式を使用するようになります。

于 2011-09-04T07:59:09.017 に答える
1

ここではかなり疑わしいアドバイスが寄せられているので、ITセキュリティについて質問することをお勧めします。一部の人々が言っ​​たこととは反対に、パスワードハッシュアルゴリズムは重要です。ソルトとbcrypt、scrypt、PBKDF2などの低速ハッシュを使用したい。参照:どのパスワードハッシュ方法を使用する必要がありますか?パスワードの保存にbcryptを推奨するセキュリティ専門家はいますか?パスワードを安全にハッシュする方法は?最も安全なパスワードハッシュアルゴリズム?。PHPassは優れたライブラリです。

ユーザーをPHPassに移行するには、2つのパスワードハッシュデータベースが必要になります。古いもの(MD5ハッシュを使用)と新しいデータベース(PHPassハッシュを使用)です。最初は、新しいものは空になります。ユーザーがログインしたら、古いパスワードハッシュデータベース(MD5ハッシュを使用)にエントリがあるかどうかを確認し、そこにエントリが見つからない場合は、新しいパスワードハッシュデータベース(PHPassハッシュを使用)を調べます。古いデータベースにエントリが見つかった場合は、MD5を使用してそれらのパスワードをハッシュおよび確認することをお勧めします。正しい場合は、PHPassを使用してクリアテキストのパスワードをハッシュし、それを新しいパスワードハッシュデータベースに挿入して、古いパスワードハッシュデータベースから削除することをお勧めします。古いデータベースにエントリが見つからない場合は、新しいデータベースのエントリを確認し、PHPassを使用してパスワードの有効性を確認できます。

于 2011-09-09T03:46:37.457 に答える
-1

私の方法では、パスワードの長さが8文字以上で、ランダムでないガベージ文字(「ガベージ」は印刷できない/ヌル文字の可能性があることを意味します)が含まれていることを確認します。

function pass_hash ($password) {
    # take first 8 characters of the raw md5 hash
    $hashslice = substr(md5($password, true), 0, 8);
    # add it to the password and hash again
    return md5($password . $hashslice);
}

気に入らない場合はmd5、を使用sha1してください。原則は同じです。

于 2011-09-04T11:37:11.530 に答える