1

掲示板では、パスワードマッチングを使用して、複数の登録を持つメンバーを検出し、悪意のあるパペットアカウントに対してルールを適用します。SHA256ハッシュとサイトごとのソルトがある場合にうまく機能しました。しかし、最近、多くのパスワードハッシュが辞書攻撃に陥るという謙虚なセキュリティ違反が発生しました。そこで、パスワードを強制的に変更し、bcrypt+ユーザーごとのソルトに切り替えました。

もちろん、パスワードマッチングは機能しなくなりました。私は暗号学やコンピュータサイエンスの正式な教育を受けていないので、この問題を克服するための安全な方法があるかどうかを尋ねたいと思いました。私が一緒に働いている誰かが、意図的に多くの衝突を起こすルーズハッシュアルゴリズムを使用して2番目のパスワードフィールドを提案しましたが、これは大量の誤検知につながるか、検索スペースを減らしすぎて安全ではないようです。私のアイデアはbcryptを使い続けることでしたが、サイトごとのソルトと非常に高い反復回数(たとえば、最新のハードウェアで生成するのに10秒以上)を使用する2番目のパスワードハッシュを保存します。そうすれば、同じパスワードを持つユーザーは同じハッシュを使用できますが、辞書攻撃で簡単に推測することはできません。

これに明らかな問題があるのか​​、それとも私よりも知識のある人が物事にアプローチするためのより良い方法について何か提案があるのか​​、私はただ疑問に思っていますか?うまくいくように思えますが、セキュリティに関しては、多くの隠れた落とし穴がある可能性があることを学びました。:Pありがとう!

4

2 に答える 2

1

上記の簡単な回答は、攻撃者が常にサーバーと同じアクセス権を持っていることを前提としていますが、これはおそらく妥当ではありません。サーバーが恒久的に侵害された場合 (攻撃者が所有)、どのスキームもあなたを救うことはできません。攻撃者は、ユーザーが設定したすべてのパスワードを取得できます。このモデルは通常、攻撃者がサーバーが稼働した後の一定期間、サーバーにアクセスできるというものです。これにより、攻撃者にとって有用な情報を提供することなく、質問したパスワード マッチングを実行する機会が生じます。

サインアップまたはパスワードの変更時に、サーバーがプレーン テキストのパスワードにアクセスできる場合、サーバーはシステム上のすべてのユーザー アカウントを反復処理し、各ユーザーの個別のソルトを使用して新しいパスワードをハッシュし、それらが正しいかどうかをテストします。同じ。

これにより弱点が生じることはありませんが、複数の偽のアカウントを防止するアルゴリズムがこれを 1 回限りの入力 (「このパスワードはこれらのアカウントと一致する」) として使用できる場合にのみ役立ちます。

後で分析するためにその情報を保存することは、明らかに弱点になります (攻撃者がパスワードのデータベースを取得できる場合、同じパスワードを使用してこのアカウントのリストも取得できる可能性があります)。妥協点は、毎日の確認のために情報を保存することです。つまり、ストレージを一時的に侵害する攻撃者が利用できる有用な情報の合計を減らします。

ソルティングとハッシュがクライアント側で発生する場合、これはすべて意味がありません。サーバーはテストを実行できません。

于 2013-01-16T19:57:24.807 に答える
1

簡潔な答え

2 人のユーザーが同じパスワードを持っているかどうかを検出できるアルゴリズムは、攻撃者が 2 人のユーザーが同じパスワードを持っているかどうかを検出することもできます。これは事実上、事前計算攻撃です。したがって、問題は安全に解決できません。

  • 私があなたのパスワード データベースを侵害したとします。
  • あなたのハッシュがどのように計算されるかを理解したと仮定します。

あなたのパスワード変換アルゴリズムを "password" に適用して、どのユーザーが "password" をパスワードとして使用しているかをすぐに知ることができれば、システムは一種の事前計算攻撃に対して脆弱になります。

個々のユーザーごとにパスワードを決定するために高価な計算を行う必要があり、ユーザー A のパスワードを計算するために費やされた作業がユーザー B のパスワードの計算を容易にしない場合、システムは (この種の攻撃に対して) 安全です。

さらなる検討

サイトごとのソルトを bcrypt と高い反復回数で使用するというあなたのアイデアは、最初は魅力的に見えるかもしれませんが、スケーリングすることはできません。10 秒でさえ、1 分あたり 6 回、1 時間あたり 360 回、1 日あたり 8640 回、または 1 年あたり 3M のパスワード推測が行われます (これはかなりの数です)。そして、それはたった1台のマシンです。その問題、または一部の GPU でマシンのボットネットを投げると、突然その数が屋根を通り抜けます。わずか 300 のマシン/コア/GPU で、1 日で 250 万回の推測を打ち負かすことができます。

それぞれに同じソルトを使用することになるため、攻撃者がユーザーのすべてのパスワードを一度にクラックできるようになります。ユーザーごとのソルトのみに固執することで、攻撃者は一度に 1 人のユーザーのパスワードのクラックのみを効果的に試みることができます。

于 2013-01-15T20:51:56.283 に答える