12

重複の可能性:
PHPパスワードの安全なハッシュとソルト

Iv'eは、stackoverflowと他のWebサイトの両方でWebセキュリティについて話している多くの投稿を読んでいます。塩漬けの暗号化など。そして、私はそれを取得していないので、簡単な説明が本当に役に立ちます。

これが私がこれまでに知っていることです。ユーザーがログインすると、ユーザー名とパスワードが入力されます。次に、入力はプロセスを通過します。たとえば、ユーザー名とパスワードが次のように組み合わされているとします。

$username = (USERS USERNAME INPUT);
$password = (USERS PASSWORD INPUT);
$userinput = $username . $password;

次に塩を加えます。

$salt1 = "13$13aVc!kd";
$salt2 = "4kr$!vlmeoc";

$salted = $salt1 . $userinput . $salt2;

次に、それを暗号化します。

$encrypted = encrypt($salted);

次に、データベースを確認し、適切なユーザーがログインしているかどうかを確認します。

それが正しく機能する方法ですか?しかし、Iv'eはブルートフォース攻撃について読みました。入力値を正しく推測しますか?上記の手順で。攻撃者が侵入するには、$userinput情報を正しく取得するだけでよいことを示しているのではないでしょうか。彼は長い$encrypted文字列を正しく推測する必要はありませんか?

注:この状況では、キャプチャ、試行回数の制限、ロックアウト、上記のもの以外はありません。

注:私はまだ学んでいるので、優しくしてください。

4

5 に答える 5

8

キャプチャを除外する場合は、制限、ロックアウトなどを試してください...そうです。プレーンテキストの文字列を総当たり攻撃する必要があります。

ただし、これには時間がかかります。少なくとも、サーバーがログイン要求に応答する速度によって制限されます。開発者がブルートフォースを防ぐための対策を追加しなくても、サーバー自体は暗号化と検証のプロセスを非常に迅速に実行することしかできず、非常に多くの並列要求しか処理できません。

そうは言っても、これが重要な理由です

  • ユーザーとして、強力でブルートフォース攻撃が難しいパスワードを使用する
  • 開発者として、ログインプロセスのブルートフォースを防ぐための適切な対策を講じてください

パスワードのハッシュとソルトは、自然なログインプロセスを総当たり攻撃する人々から保護するためのものではありません(それを防ぐものは他にもあります)。代わりに、パスワードストレージ自体の潜在的な侵害(たとえば、誰かがデータベースのコンテンツをダンプする)から保護するためのものです。

ハッシュとソルティングはどちらも保存されたパスワードにアクセスできる人が、パスワードが一般的にサイト間で共有されます)ブルートフォース防止のセキュリティ対策を講じることはありません。

于 2013-01-21T04:50:55.250 に答える
2

ハッシュとソルトの考え方は、データベース自体が危険にさらされた場合に誰かがユーザーパスワードを取得するのを防ぐためのものです。パスワードがソルトされハッシュされた文字列として保存されている場合、攻撃者はパスワードを使用して別のサイトのユーザーのアカウントにアクセスすることはできません。

于 2013-01-21T04:53:05.460 に答える
1

パスワードの暗号化は一方向の暗号化です(または、安全なサイトにあると想定されています)。つまり、パスワードを取得し、それからハッシュを作成します。たとえば、bcryptは、今日これを行うための許容可能な標準です。

一方向の暗号化の場合、多くの人がパスワードを確認する方法を考えています。ただし、ユーザーが送信したパスワードをハッシュして、データベースに保存したハッシュと比較するだけです。このように、データベースが盗まれた場合、攻撃者はもっと一生懸命働かなければなりません。

パスワードをハッシュするだけの問題は、ブルートフォース攻撃やレインボーテーブルで簡単に発生します。あなたはそれについてもっと学ぶためにレインボーテーブルをグーグルすることができます。しかし、本質的には、これらのハッシュをパスワードに戻す方法です。

塩漬けを入力してください。ソルトとは、基本的にすべてのパスワードにランダムなデータを追加することです。これはレインボーテーブルよりも優れています。侵害されたデータベースを意味することは、ブルートフォースを意味します。bcryptのようなハッシュシステムを使用している場合、攻撃者には多くの時間と労力がかかります。

そうは言っても。車輪の再発明をしないのが最善です。可能であれば、既知の適切な認証システムを使用してください。

于 2013-01-21T04:53:56.687 に答える
0

ここで私の答えを参照してください

また、ハッシュを作成するときに、エントリごとに一意のソルトを生成する必要があります。

于 2013-01-21T05:02:21.810 に答える
0

ブルートフォース攻撃の問題の1つは、SHA1やMD5などの高速暗号化を使用する場合です。これらの関数は、アルゴリズムを介してパスワードを高速に実行するように構築されています。代わりに、専門家ではないBlowfishメソッドを使用できますが、簡単に言うと、SHA1やMD5よりも戻り値の計算に多くの時間がかかります。これは、計算時間のためにBlowfishでハッシュされたパスワードをブルートフォースするのに5年かかる可能性があることを意味します。

次の例はSHA1とMD5で作成されているため、ブルートフォース攻撃に対して脆弱ですが、ソルト部分は使用しても問題ありません。

$salt = md5(microtime().uniqueid());

これにより、一意の32文字のソルトが出力され、パスワードと一緒に入力されます。

$passwod = $_POST['password'];
$hashed_password = sha1($password.$salt);

次に、パスワードとソルトの両方をデータベースに保存する必要があります。そして、ユーザーの入力パスワードを確認すると、ソルトを取得し、すべてをハッシュします。

$temp_pass = $_POST['temp_pass'];
$salt = //from database;
$database_pass = //hashed pass from database;

$hashed_temp_pass = sha1($temp_pass.$salt);

if(hashed_temp_pass == $database_pass){
//Welcome user!
}
else{
//go away
}
于 2013-01-21T06:43:27.030 に答える