web-dev-qa-db-ja.com

試行回数を制限した場合、短いパスワードは安全ではありませんか?

Gmailのようなパスワードを必要とするすべてのWebサービスでは、長いパスワードを設定するように求められます。 8文字以上。

その理由は、より高いセキュリティです。

ただし、同じサービスでは、アカウントをロックして詳細情報を要求する前に、ログインの試行回数を3〜4回に制限しています。非常に迷惑なことですが、それは別のトピックです。

それでは、ログインの試行を制限する場合、短いパスワードはどのように安全ではありませんか?パスワードに5文字が含まれている場合、3回の試行ですべての組み合わせを試すことはできません。

32
Alex

パスワードを長くランダムにする必要がある主な理由(つまり、高いエントロピー)は、オフラインのブルートフォース攻撃から保護するためです。

パスワードは通常、プレーンテキストでは保存されません。代わりに、それらは ハッシュ化 です。誰かがハッシュ化されたパスワードでデータベースを盗んだ場合(これは 驚くほど一般的です )、パスワードを直接読み取ることはできません。代わりに、ハッシュに一致するパスワードを見つけるために、大量のパスワードを試す必要があります。パスワードハッシュが盗まれたので、これは攻撃者のマシンで実行でき、Webサイト自体では実行できません(したがってoffline攻撃)。つまり、Webページでの再試行の制限は適用されません。

長くてランダムなパスワードは推測が多くなるため、データベースが盗まれたとしても、パスワードを解読することは困難です。それが彼らがウェブ上で奨励されている理由です。

74
Anders

それはそれほど単純ではありません...

オンラインブルートフォースについて

3回の試行後にアカウントが完全にロックされた場合、すべてのアカウントをロックすることで DOS(Deny Of Service) を作成するのは簡単です!

サーバーは、不正な試行の回数だけでなく、IPアドレス、ブラウザID、およびロックにdurationを使用してロックの決定を行う必要があるため、誰かが間違ったキーボードを使用した場合、それらは一部の遅延で再接続できます...

そこから、botnetsを考えると、攻撃者は多くの異なるIPアドレスを使用し、さまざまな試行を行う可能性があります。いくつかのsmoothオプションと長い遅延により、短いパスワードは弱くなります。

  • サンプル:

    a-z, A-Z, 0-9, $+"*/%&()_で選択された5文字に対する総当り攻撃を考慮:72文字

    72^5                 => 1'934'917'632 # all possible combination
    72^5 / 300000        =>         6'449 # botnet
    72^5*900/300000/3    =>     1'934'917 # 3 attemps -> 15' penalty
    

    秒単位:これは、すべての組み合わせをテストするために〜22日を表します。

注意:300000マシンは Botnet @Wikipedia から任意の平均値を計算します。 6Mボットネットの場合、ジョブは1日未満で終了します。

オフラインブルートフォースについて

パスワードは一般的にハッシュされて保存されます。誰かが(リモートエクスプロイト、ソーシャルエンジニアリングなどを使用して)パスワードファイルを盗んだ場合、ブルートフォースに対して使用できますパスワードファイルに格納されているハッシュ

そこから、攻撃者は3回の試行に制限されなくなりました!!

パスワードが12文字より長い場合:72^12 => 2'435'196'222'894'505'984。これはボットネットを介しても重くなります...

しかし、任意の john like password cracker は、盗まれたパスワードファイルを参照し、すべての一般的なWordベースのパスワードとすべての短いパスワードをすばやく抽出します。

長いパスワードとパスフレーズについて

私は(可能な限り)パスワードの代わりにパスフレーズを使用することを好むので、私は本当にこれが好きです XKCDのストリップ

enter image description here

だから小さな数学のデモがあります:

  • 72文字の束を持つ12文字のパスワードを検討します。

    $ printf "%'.u\n" $[(72**12)]
    2'435'196'222'894'505'984
    
  • 5〜9個のプレーン文字(a〜z、アクセントなし)を含むWordのアメリカの辞書で選択された4ワードランダムを考慮:

    $ printf "%'u\n" $[$(
        LANG=C grep '^[a-z]\{5,9\}$' /usr/share/dict/american-english|
            wc -l) ** 4]
    2'945'898'655'785'685'681
    

    ほぼ同じ数の組み合わせ

    最小フレーズ長:5x4 = 20のアルファベット文字:

    $ printf "%'.u\n" $[(26**20)]
    5'350'152'024'406'097'920
    

    (ノートブルートフォースクラッキングパスフレーズは文字の組み合わせを暗示する、これは全体の組み合わせを減らしますが、41'429 ^ 4よりも高いままです... 41429は私の前のテストでのwc -lの結果です)

    そして、あなたはそれらを覚えていることができる間、キャップ、数字、および/または特別な文字を追加することによって、いくつかのを追加することさえできます!

35
F. Hauri

誰かが多くのアカウントに対して共通のパスワードを試す「パスワードスプレー」を防ぐため。

9
paj28