MD5/SHA1は近年壊れやすいことが示されているため、私は上司からWebアプリケーションの暗号化システムをMD5からPBKDF2に変更するように依頼されました。
私はそれに反対し、ユーザーに最大200回のログインを試みる 1日を許可する必要があると考えました。それ以上の場合、ユーザーアカウントがロックされます。私の理論的根拠は、PBKDF2は数年後にはすぐに壊れ、暗号化システムを再度変更する必要があるため、ユーザーがログインを試行できる回数を制限しない理由です。しかし、私の上司は私にPBKDF2の実装を主張しています
これらは私の次の質問です:
1)ユーザーがログインできる試行回数を制限したいという私の論理的根拠は妥当ですか?
2)私の議論に欠陥はありますか
3)私の上司は正しいですか?
1)ユーザーがログインできる試行回数を制限したいという私の論理的根拠は妥当ですか?
いいえ、あなたがそれを説明する方法では絶対にありません。短期間にfailedの試行回数を制限し、そこからスケールアップすることは問題ありませんが、長い間ハード制限を設定しないでください。一日のような期間。今日201回目のアカウントにログインできないと誰に言ってくれますか?
2)私の議論に欠陥はありますか
はい。 MD5/SHA1/SHA256/SHA512などは、パスワードハッシュに関して愚かな欠陥があります。また、PBKDF2
はかなりの年数の間広く使用されてきました。 「数年以内に」壊れてしまう兆候はありません。詳細については、 この回答 を参照してください。
3)私の上司は正しいですか?
はいぜったいに。
ここで混乱しているのは、オンラインとオフラインブルートフォース攻撃の違いだと思います。基本的に、あなたが見ている2つのコントロールは異なる攻撃用に設計されており、両方を適用する必要があります(つまり、どちらか一方ではありません)
ロックアウトの前にユーザーのログインを制限するというあなたの考えは、オンラインのブルートフォース攻撃を指します。これは、攻撃者がアプリケーションを介してパスワードを推測しようとした場合に発生します。通常、ロックアウトの前に10回の誤ったログインをお勧めします。その理由は、ユーザーが10回の試行でパスワードを推測できない場合、パスワードを忘れてしまったためです:)。
パスワードの保存に使用されるハッシュアルゴリズムは、主にオフラインのブルートフォース攻撃から防御します。これらは、攻撃者がハッシュされたパスワードにアクセスし、それらを直接解読しようとする可能性がある場合に発生します(たとえば、アプリケーションを介さずに)。ここでは、PBKDF2(またはbcryptまたはscrypt)を使用するのが正しいでしょう。これらはこの目的のために特別に設計されており、攻撃者の推測プロセスを遅くするからです。
MD5またはSHA-1を使用する場合の問題は、これらがパスワードの保存用に設計されていないことです。これらは(部分的に)高速になるように設計されています。これは、オフラインのブルートフォース攻撃を防ぐときに望ましくないプロパティです。
1)ユーザーがログインできる試行回数を制限したいという私の論理的根拠は妥当ですか?
2)私の議論に欠陥はありますか?
かなりですが、完全ではありません。まず、200回の試行は膨大な数です。ほとんどの人は、1日あたり20回未満に抑えます。妥当な試行回数として、50回と考えています。
しかし、あなたの「合理的」の欠陥は、人々を彼らのアカウントから締め出している。誰かがすでに気づいたように、この脆弱性を知っている攻撃者はそれを使用して人々をアカウントから締め出す可能性があります(これは攻撃というよりはトロールです)。私が自分のウェブサイトに実装したものは次のとおりです。
- 試行回数をファイル(試行されたユーザー名のmd5ハッシュ)に保存し、必要に応じて更新します
- 現在の試行回数を取得します。たとえば3より大きい場合は、最初にCAPTCHAに回答するようにユーザーに依頼します。
この種のアルゴリズムに従う必要があると思います。つまり、Allow a reasonable number of "free" attempts, then challenge or otherwise slow down the user before logging him in
。
3)上司は正しいですか?
なぜ特定のアルゴリズムに固執するのかわかりませんが、はい、彼は正しいです-PBKDF2は現在安全な機能です(攻撃は予測されていません)。さらに、「必要な反復回数」を持つことは、ハッシュ(実際にはキー)が配布されるスペースを増やすため、非常に優れた機能です[この機能は、ユーザーがサービスに登録できる場合はほとんど役に立ちません]。
セキュリティがパフォーマンスよりも優先される高セキュリティ環境の場合は、本当に採用することをお勧めします。 パラノイドElGamalキー生成 のような強力なものとbcrypt。