1

この回答を参照しています: https://stackoverflow.com/a/4766811/1114105

パスワードを再ハッシュしますが、実際にはハッシュに対して何も行いません (CheckPassword 関数で POST 送信された平文のパスワードを使用して認証します)。ハッカーは再ハッシュ部分をバイパスできませんか?

これが私の擬似コードです。

パスワード/ユーザー名が POST によって送信され、$row['password'] が sql のハッシュされた pword である場合。

$t_hasher = new PasswordHash(13, FALSE);
$hash = $t_hasher->HashPassword($_POST['password']);
$check = $t_hasher->CheckPassword($_POST['password'], $row['password']);
if($check) Great success else Wrong credentials`

注: CheckPassword の実行にかかる時間は、ワーク ファクターによって違いは生じないことがわかりました。HashPassword の時間が増えるだけです。

4

3 に答える 3

1

パスワードに対する攻撃には、次の 2 種類があります。

  1. 攻撃者は、データベースに保存されているパスワード ハッシュを何らかの形で読み取ることができます (SQL インジェクションまたはシステムへのアクセスを取得するその他の方法)。攻撃者は、元のパスワードを取得したいと考えています (ハッシュ化されたパスワードではうまくいかないため)。
  2. 攻撃者はログイン フォームを異なるパスワードで繰り返し使用します (ブルート フォース)。

ケース 1 の場合、彼はすでにあなたのログイン フォームを回避しており、システムへの 1 回のログインにどれだけの時間が必要かは気にしません。しかし、彼は自分のシステムでパスワードを総当たり攻撃するのにどれだけの時間がかかるかを気にしています。そのため、すべての組み合わせを試して、システムと同じアルゴリズムでパスワードをハッシュすることで、パスワードのブルート フォース攻撃が難しくなります。この場合、ログインプロセスを長くするためにパスワードを「再ハッシュ」しても役に立ちません。

ただし、ケース 2 の場合、システムでパスワードを試すのにどれだけの時間が必要かをにします。これは、正しいログインに到達するために何度もパスワードを試行する必要があるためです (さらに、それが見つからない場合は、おそらくユーザー名を推測する必要があります)。攻撃者は痕跡を残し、時間を浪費するため、非常に愚かでなければなりません。ログインに一定回数失敗した後、彼の IP をブロックすることで、彼の生活をより悲惨なものにすることができます。さらに、無効なログインごとに追加することもできsleepます (スリープは、CPU を集中的に使用するハッシュ操作ほど多くのリソースを必要としません)。

于 2011-12-27T06:52:52.037 に答える
-2

安全なハッシュ アルゴリズムは IMO ではありませんが、ハッカーの速度を低下させるアルゴリズムがいくつかあります。

于 2011-12-27T06:15:02.613 に答える