0

PHPの各パスワードにランダムソルトを使用したパスワードのハッシュを2048ビットで保存および比較するためのアルゴリズムを実装するにはどうすればよいですか?

編集1:

私の質問では十分に明確ではなかったと思います。私が言いたいのは、暗号化アルゴリズムを作成しないということです。しかし、どうすればパスワードとソルトを保存できますか。各パスワードのランダムソルトであること。そうですね、パスワードと一緒にソルトをデータベースに保存するのは賢明ではありません。

編集2:

それは良いアプローチでしょうか?

1)ユーザーがパスワードを入力し、
2)システムがパスワードのハッシュを生成し、
3)システムがこのソルトのパスワードを生成します(私は時間()?を使用します)

ランダムソルトなので、パスワードにソルトをどこにどのように保存できますか?わからないので、パスワードと一緒にソルトを保存したくありません。

したがって、保存されたパスワードとユーザーがログインしたときの同じソルトの後で、ソルトと一緒に保存されたパスワードハッシュを取得し、保存されたソルトで提供されたパスワードのハッシュと比較します。

塩をどこに保存しますか?これはこれを行うための良いアプローチでしょうか?

4

1 に答える 1

5

「まあ、ソルトをパスワードと一緒にデータベースに保存するのは賢明ではありません。」

「私のデータベースが危険にさらされ、誰かがこのデータにアクセスできるようになった場合、パスワードごとに各パスワードのソルトが取得されるためです。これは正しくありません。ソルトを使用してそれを提供することは意味がないと思います。パスワードと一緒にブルートフォース。それが正しいから?」

これらの核となる仮定は間違っています。ソルトのポイントは、2 つの同一のパスワードが同じハッシュ値にハッシュされないように、各パスワードに一意の要素を追加することです。塩は秘密ではありません。繰り返しますが、塩は秘密ではありません。秘密はパスワードです。ソルトは一意性を追加するだけです。攻撃者は、考えられるすべての文字の組み合わせを試し、その結果をハッシュ値と比較して、パスワードをブルート フォースする必要があります。彼が塩も知っている場合、彼はまだそれを正確に行う必要があります.

攻撃者がソルトなしでパスワード「foobar」のブルート フォース攻撃に成功した場合、攻撃者はすべてのパスワード「foobar」をブルート フォース処理したことになります。一意のソルトを追加し、攻撃者がパスワード「foobar」+ソルトのブルート フォース攻撃に成功した場合、攻撃者はその 1 つのパスワードのみをブルート フォース処理したことになります。一意のソルトのおかげで、すべてのパスワードが異なる値にハッシュされるため、彼は他のすべてのパスワード「foobar」を個別に攻撃する必要があります。

それが塩のポイントです。はい、salt も秘密にしておくことができればさらに良いでしょう。なぜなら、攻撃者は本質的に何倍も長く値をブルート フォースする必要があるからです。しかし、パスワードを確認するためにもソルトにアクセスする必要があるため、これは実行不可能です。ハッシュとソルトにアクセスする必要がある場合、ハッシュにアクセスできる攻撃者はソルトにも同じアクセス権を持つ可能性があります。また、攻撃者がソルトにアクセスできる場合でも、セキュリティが損なわれることはありません。

于 2012-11-28T11:46:00.707 に答える