1

ユーザーのパスワードを保護する方法を常に探しています。現在、ハッシュアルゴリズムとランダムソルトの組み合わせを使用しています。

この問題の主な原因は、ユーザーが非常に脆弱なパスワードを設定した場合です。混同されたハッシュアルゴリズムがどれほど難しくても、ソルトがどれだけ長くても、1年以内にクラックできると思います.

新しい方法を考えてきました。古いハッシュ化されたパスワードにランダムなソルトを追加して、ユーザーがサインアウトするたびにパスワードを再暗号化し、再度暗号化するスクリプトを作成しました。したがって、ユーザーが戻ってくるたびに、暗号化されたパスワードは異なります。それを得る?

しかし、このアイデアの主な問題は、ユーザーがサインアウトするたびに新しいソルトを保存しなければならないことです。ユーザーが毎日サインインとサインアウトを行っている場合、私のコードは次のようになると想像してください。

何か案が?

ああ、私は考えがあります。毎年新しい暗号化パスワードを再生成するのはどうですか?

4

3 に答える 3

3

再暗号化は問題の解決にはなりません。

あなたができる唯一のことは、マルチパート ハッシュを作成することであり、攻撃者がそれらすべてを取得しないことを願っています。私は通常、2つの部分からなる塩を使用します。

1 つの部分は、パスワードと一緒にデータベースに格納されているユーザーごとのランダムな値です。

他の部分は、アプリケーションごとの塩です。アプリケーション構成またはOSが提供する特別なパスワードストアに保存できます。

この分割の利点は、攻撃者がデータベースにアクセスするだけでは十分ではなく、アプリケーションのソルトが保存されている場所にアクセスする必要があることです。したがって、たとえば、データベースを盗む単純な sql インジェクションでは十分ではありません。攻撃者がコードを実行できる場合、おそらくまったく役に立ちません。


また、ハッシュを遅くするために何らかの方法を使用する必要があります。典型的なハッシュ関数は高速なので、ブルートフォースも高速です。しかし、ハッシュ関数を100万回繰り返しても、有効なログインはそれほど遅くはなりませんが、ブルートフォースは大幅に遅くなります。

これは、PBKDF2 などのパスワード ベースのキー導出関数を使用して実現できます。

于 2011-02-27T13:48:07.180 に答える
1

「キーストレッチング」を使用できます。ソルティング後に、たとえば100万回ハッシュを繰り返します。次に、ハッシュ値、ソルト、反復回数を保存します。その後、攻撃者は、1 回ハッシュした場合よりも、1 秒間に 100 万分の 1 のパスワードしかチェックできなくなります。ただし、非常に短いパスワードでも同様です。正当なパスワードを確認するには、自分で同じ操作を行う必要があることに注意してください。自分で確認する時間を 1 秒として受け入れると仮定すると、攻撃者は同様のマシンで、パスワードごとに 1 秒でパスワードをチェックすることもできます (より多くのまたはより高速なマシンを使用した場合はさらに!)。また、パスワードごとに 1 秒あれば、脆弱で短いパスワード、標準的な辞書などをチェックするのに十分な場合があります。

于 2011-02-27T19:14:38.370 に答える
0

あなたの主な仮定には2つの問題があります。一つ目は、塩の保管の問題についてです。ソルト化されたパスワード ソリューションについては、既に行っています。あなたの新しいアプローチでは、塩は時間の経過とともに変化します。それだけです。したがって、この方法を使用することもできますが、唯一の追加コストは、ログインごとにハッシュ値を再計算することです (実際にパスワード文字列自体を持っている場合)。

2 番目の問題は、より重要な問題です。再ハッシュしても何も変わりません。攻撃者が 1 つのソルト化されたハッシュ値を取得するとすぐに、辞書攻撃を仕掛けるのに十分です。データベースのソルトとハッシュを変更しても、それが難しくなることはありません。したがって、最初のハッシュが作成された後にハッシュを再計算する必要はありません。

于 2011-02-27T13:39:15.480 に答える