web-dev-qa-db-ja.com

パスワード強度の妥当性を検証するためにhaveibeenpwnedを使用していますか?

haveibeenpwned password list は、パスワードが十分に強力であるかどうかを確認するのに適した方法であると、ますます耳にしています。

私はこれに混乱しています。 haveibeenpwnedリストは、プレーンテキストで保存されているため、弱い暗号を使用しているなど、何らかの理由で侵害されたアカウントからのものであると私は理解しています。これは私にとってパスワードの強度とはほとんど関係がないようです。プレーンテキストで保存された非常に強力なパスワードが存在する可能性があるため、侵害され、元の電子メール/ユーザー名と組み合わせて使用​​されない限り、実際に使用しても問題はありません。それらのハッシュが既知であるという事実(そう、特定のパスワードのハッシュは既知です!)は、それらを格納している場所がソルト化されているかどうかには関係ありません。これらのパスワードを除外することは実際には害にはなりませんが、おそらくハッカーはブルートフォースのときにこのリストから始め、別のパスワードを選択するのは簡単です。

しかし、私が懸念しているのはその逆です。リストにないパスワードは常に非常に簡単に解読されます。現時点で「longishpassword」は、このパスワードを使用してリークされたアカウントを持っていません。これは、ハッシュの漏洩が発生したという意味ではありません。このパスワードは安全です。壊れるのはとても簡単でしょう。

パスワード(電子メール/ユーザー名なし)をhaveibeenpwnedリストと照合して使用する価値があるかどうかを確認する理由は何ですか?これはリストの良い使い方ですか、それとも見当違いですか?

編集:

質問の範囲を変更するのは遅すぎますが、はっきりさせておきたいのですが、この質問は他の人のパスワードをチェックするという観点から来ました(たとえば、ユーザーがWebサイトに登録したとき、または組織内の人が与えられたとき) ADアカウント)個人パスワードの強度を検証するためではありません。したがって、「パスワードマネージャを使用する」というコメントは役に立ちませんでした。

これは間違いなく検証手順の1つですが、完全に信頼することはできません。

ほとんどのユーザーがパスワードを再利用し、比較的小さな語のベースを使用してパスワードを作成するという事実を考えると、辞書攻撃はパスワードを推測する特に効果的な手段です。 HIBPは定期的に更新されるため、頻繁に使用される多くのパスワードがあり、辞書攻撃者が試みる可能性の高い候補になります。したがって、これはチェックするための良い出発点です。ただし、パスワードがリストにないからといって、パスワードが簡単に推測されないわけではありません。既知のパスワードは、インターネットからマイニングされたテキスト、単語と数字/記号の組み合わせ、転置などと一緒に試すために、パスワードのリストの上位にあるだけです。より多くのパスワードリークが発生すると、HIBPおよびその他のそのようなツールがより便利になります。そしてハッカーのパスワードのリストは、彼らにとってもより効果的になります。

私が知っているいくつかのパスワードが非常に簡単に推測され、HIBPリストにない複数のサイトで確実に使用されているのを見て驚いたので、(質問の例のように)パスワードの強度の決定要因ではないことを保証できます)。ただし、強力なパスワードだと思い、それがリストにある場合は、絶対に使用しません。

27

「強い」は常に「推測できない」を意味するつもりでした。長さと複雑さは、パスワードを「推測できない」ようにするのに役立ちますが、長くて複雑だが一般的に使用されるパスワードは、Pa$$w0rdと同じくらい弱いです。

パスワードがHIBPリストにある場合、攻撃者はそのパスワードが人によって選択される可能性が高いことを知っているため、再度使用される可能性があります。したがって、これらのリストが最初にヒットします。

したがって、パスワードがリストにある場合、それは「推測可能」です。

あなたのパスワードがリストにない場合、辞書攻撃アプローチから、それは推測されにくく、他の人が選択したものではなく、含意(それだけの価値があるため)により、「推測されにくい」 」もちろん、他の多くの要因により、パスワードがHIBPリストにない場合でも、「推測されやすく」なる可能性があります。

いつものように、ランダムに生成されたパスワードは最も「推測できない」ものであり、最大長でランダムに生成されたパスワードは総当たりすることが非常に困難です。そして、ランダムに生成している場合は、最大長にしてみませんか?

69
schroeder

この質問に正しく答えるには、パスワードを解読したいハッカーのように考える必要があります。

しかし、数学的な考え方に直接飛び込む必要がないように、代わりに、レゴムービーゲームショー「私のパンツはどこですか?」で競合他社について考えることから始めましょう。

明らかに、競争相手が自分の服を見つけたい場合、彼らが最初に行うことは自分のワードローブに行くことです。それが実を結ばない場合は、引き出しを確認し、部屋の隅にある椅子、ランドリーバスケット、そして犬がいたずらなパンツを盗む種類の場合は犬のバスケットを確認します。彼らが冷蔵庫の中を探し始める前に、それはすべて起こります。

もちろん、ここで起こっていることは、競合他社が最も可能性の高い場所を最初に調べるということです。彼らはグリッド内の家のすべての平方フィートを体系的に処理できたでしょう。その場合、平均して家の半分をチェックする必要があります。一方、この戦略では、彼らは最初にそれを手に入れる可能性が高く、家の半分をカバーすることは期待できません。

ハッカーは理想的には同じことをしたいと考えています。彼らが使用しているパスワードの長さが8文字の小文字であることを知っているとします。彼らは一度に1つずつ試してみることができますが、208,827,064,576の可能なオプションがあるので、与えられた完全にランダムな推測は、正しい可能性が約2,080億分の1です。一方、「パスワード」が最も一般的なパスワードであることはよく知られています。 (禁止されている場合を除きます)実際、habebeenpwnedからのデータを見ると、正しい答えが「パスワード」である確率は151分の1です。1510億ではなく、151です。これは、ランダムな推測よりも10倍以上高い可能性があります。 、彼らはそれから始めないのはばかげているでしょう。 (そして、明らかに、あなたはあなたのパスワードを見つけられないようにしたいので、あなたはそれらが何で始まるかを選ぶことを避けたいです)

さて、問題はそれが「パスワード」を超えて一般化するかどうかです。漏洩したパスワードのリストを処理する間、彼らの価値はありますか?少し情報が必要な場合は、 元のリリースのまとめ からのこの引用を検討してください。

私は457,962,538個の一意の電子メールアドレスを持つ562,077,488行を含むAnti Publicリストに移動しました。これにより、Exploit.inデータにまだ含まれていない、さらに96,684,629個の一意のパスワードが得られました。逆に見ると、そのセットのパスワードの83%は以前に見られたものです。

おおまかに言って、ランダムに選択されたパスワードは、リストに掲載される可能性が80%より高いということです。リストには数億のエントリがありますが、ランダムな8文字のパスワードには数千億のオプションがあります。つまり、ハッカーが8文字のパスワードを試した場合、大まかに言えば、リストが80%の確率でリストに到達しなかった場合、リストがなければ0.1%の確率になります。明らかに彼らはそれを使いたいのです。そして再び、あなたはそれを避けた方がよいでしょう。結局のところ、あなたはまだ何千億もの選択肢から選ぶことができます、そしてあなたは9つの手紙に行くことによって何千億も得ることができます!

それがリストをチェックする理由です。

ここで最初に心配することは、「リストにないパスワードはいつでも非常に簡単に解読できる」ということです。それは本当かもしれません。たとえば、「kvym」はリストに含まれていません。たった4文字です。小文字が4文字以下の50万個のパスワードしかないので、人々が短いパスワードを好む可能性が高い場合、ハッカーはリークリストを完了するのにかかる時間のほんのわずかな時間でそれらを突破します。彼らは両方をしようとする可能性が高いです。

その答えは明白です。両方のルールを使用します。違反したパスワードは使用しないでください。また、非常に短いパスワードは使用しないでください。重要な長さのランダムなパスワードを持っている場合、ハッカーがショートカットを見つける方法がないほど十分なオプションがあります。

30
Josiah

他の人は、なぜそれが良いアイデアなのかについて考えます。別の方向に進みます。

コンプライアンスの観点から、関連するNIST標準 NIST Special Publication 800-63、Digital Identity Guidelines は、ユーザーがパスワードを設定するときに shall がリストに対してチェックされることを具体的に要求します以前に侵害されたパスワードの。関連セクションは SP 800-63B、認証とライフサイクル管理、セクション5.1.1.2 で、

記憶されたシークレットを確立および変更する要求を処理するとき、検証者は、予想されるシークレットを、一般的に使用、期待、または侵害されていることがわかっている値を含むリストと比較する必要があります(SHALL)。たとえば、リストには以下が含まれる場合がありますが、これらに限定されません。

  • 以前の違反コーパスから取得したパスワード。
  • 辞書の単語。
  • 反復または連続する文字(「aaaaaa」、「1234abcd」など)。
  • サービスの名前、ユーザー名、およびそれらの派生語などのコンテキスト固有の単語。

選択したシークレットがリストにある場合、CSPまたは検証者は、別のシークレットを選択する必要があることをサブスクライバーに通知し(SHALL)、拒否の理由を提供し(SHALL)、サブスクライバーに別の値を選択するように要求する必要があります(SHALL)。

定義により、Pwned Passwords APIを介して見つかったものはすべて、「侵害されていることがわかっている値...」です。

組織がコンプライアンスについて心配する必要がある場合は、パスワードの2つの主な標準に互換性がないことに注意してください。 Payment Card Industry Digital Security Standard(PCI-DSS)では、パスワードは30日ごとに変更する必要があり、大文字、小文字、数字、記号などを組み合わせたものでなければならない、NIST標準ではパスワードを日付に基づいて任意に有効期限が切れ、許可される文字のクラスに関する複雑なルールは必要ありませんが、ユーザーが文字クラスの任意の組み合わせを使用できるように十分に柔軟でなければなりません。

もちろん、準拠する標準を決定するのは組織の責任です。

米国商務省の代理店向けに開発している場合は、NIST標準に完全に従う必要があります。それは法律です。 (そして法律に関するすべてのもので、あなたの組織の法務部門に確認してください、私を盲目的に信用しないでください。)

支払い情報を処理するシステムで作業している場合は、PCI-DSSに従うことを強くお勧めします。ウェブストアをお持ちで、サードパーティの支払いプロセッサを使用している場合、これは当てはまりません。法の重さはありませんが、PCI-DSSに従わないと、問題が発生した場合に過失に見舞われる可能性があるため、弁護士に確認する必要があります。

これらのいずれにも当てはまらない場合、私にとっては、NIST標準が最も理にかなっています。セキュリティチームと徹底的に話し合い、調査を行い、自分にとって最も意味のあるものを見つけ出します。

私の組織では、あなたにとって最も意味のあるものを理解する例として、Pwned Passwords APIで10未満のヒットがあったパスワードを拒否しません。パスワードが違反で見られたとしても、それを受け入れたことをユーザーに知らせる警告メッセージを引き続き表示します。また、パスワードマネージャーを使用してランダムなパスワードを生成するように切り替えることを検討する必要があります。私はユーザーと話をすることができる組織にいることができて幸運です、そしてパスワード管理について正直な議論をすることができます。他の組織は、組織のニーズに合わせてアプローチを調整する必要があります。

14
Ghedipunk

計算してみましょう:

地球上のすべての人がこれまでに約1000個のパスワードを使用したとしましょう。これにより、約10兆のパスワードが作成されます。43 もし私の考え違いでなければ。したがって、anyの既存のパスワードをランダムに選択することは、真にランダムな8-9文字の大文字と小文字を区別する文字のパスワードとほぼ同じです。あまりよくない。 この答え を参照してください。

つまり、理論的には、パスワードを再利用しないだけでなく、これまで誰もが使用していたパスワードを再利用してはなりません以前に使用されたパスワードは、基本的に、発生するのを待っている1つの大きな辞書攻撃です。

4
kutschkem

今日の強い意味が少し失われていることを認めざるを得ません。強力なとは、複雑で長いパスワードを意味すると思います。しかし、簡単に推測できる可能性があるため、これでは適切なパスワードにはなりません。

すでにお気づきのように、「ブルートフォースの場合、ハッカーはこのリストから始めます」。したがって、このリストにパスワードが含まれている場合、パスワードはすぐに推測され、適切なパスワードではありません。

リストにない文字列を入力すると、Webサイトに説明が表示されます。

このパスワードは、「Iwn I Be Pwned」にロードされたどのPwned Passwordsにも見つかりませんでした。これは、必ずしもこのサイトが適切なパスワードであることを意味しているわけではなく、このサイトでインデックスに登録されていないだけです。

HIBPリストを使用することは、パスワードが簡単に推測されることを確認する方法の1つですが、その強さを示すものではありません。このためには、パスワード強度チェッカーを使用する必要があります。これは、漏洩したパスワードリストをチェックしないことがよくあります。 HIBPパスワードリストとパスワード強度チェッカーは互いに補完します。

2
LVDV

パスワードがランダムなパスワードチェックサイトに送信されると、それは安全ではなくなりますになります。そのようなサイトを使用することは、あなたが使用する(これから使用する)パスワードを使用するのは間違いなく良い考えではありません。

テストしたパスワードをワードリストに直接追加して、ハッカーに販売することを妨げるようなものはありません。

繰り返しますが、実際のパスワードでそのようなサイトを使用することは私見です非常に悪い考え

1
Firzen

このページには多くの良い答えがありますが、 credential stuffing の概念を検討している人はいません。

多くのユーザーが複数のサイトで同じユーザー名(実際にはメールアドレス)とパスワードを持っているという事実に依存しています。したがって、ユーザー名/パスワードのリスト(HIBPが使用するものと同様)を取得し、侵入したいWebサイトに対してリスト上のすべてのペアを発射することができます。

HIBPが認識しているリストにパスワードが存在しないようにすることで、この攻撃を非常に効果的にブロックできます。

1
Geir Emblemsvag

しかし、私が懸念しているのはその逆です。リストにないパスワードは常に非常に簡単に解読されます。現時点で「longishpassword」は、このパスワードを使用してリークされたアカウントを持っていません。これは、ハッシュの漏洩が発生したという意味ではありません。このパスワードは安全です。壊れるのはとても簡単でしょう。

HIBPのPwned Passwordsデータベースに存在しないからといって、パスワードが強力であるとは限りません。ただし、HIBPデータベースと照合してパスワードをチェックすることの莫大な価値を過小評価していると思います。重要なのは、あなたが懸念しているケース(HIBPのデータベースにない弱いパスワード)は、リストにあるareの弱いパスワードよりも一般的ではないということです。

Troy Hunt(HIBPの作成者)は彼のプロジェクトについて幅広く書いています 彼の2018ブログエントリ "86%of Passwords Terrible(and Other Statistics)" は、私が非常に目を見張るべきであると思うものを与えます例(簡潔にするために編集):

しかし、私はいつも疑問に思っていました-[Pwned Passwords]が実際にブロックするパスワードの割合はどのくらいですか?つまり、システムに100万人がいる場合、その4分の1は以前に違反したパスワードを使用していますか?半分?もっと?この理論をテストするために必要なのは、プレーンテキストのパスワードを含み、大量のパスワードがあり、かつて見たことのないものであり、Pwnedの作成に使用したソースの一部を構成していないデータ侵害でした。そもそもパスワードのリスト。

そして、CashCrate [大きな違反と漏洩]が起こりました。

これらの6.8Mレコードのうち、2,232,284個のパスワードがプレーンテキストでした。それで、以前に出された大きな質問に、これらのうちいくつがすでにPwned Passwordsにあったのでしょうか?言い換えれば、侵害されたことがすでにわかっている恐ろしいパスワードを使用していたCashCrateサブスクライバーの数は?

合計で、2,232,284のうち1,910,144のパスワードがすでにPwned Passwordsセットにありました。つまり、86%のサブスクライバーが、他のデータ侵害で既に漏えいしており、攻撃者がプレーンテキストで入手できるパスワードを使用していたのです。

したがって、Pwned Passwordsが問題全体を解決するわけではないと考えるのは当然のことですが、対処する手間がかからない果物の量は膨大です。 zxcvbn のような科学的に十分に根拠のあるパスワード強度チェッカーと組み合わせて、別の大きなチャンクをかき消します。

password:               longishpassword
guesses_log10:          8.09552
score:                  3 / 4
function runtime (ms):  2
guess times:
100 / hour:   centuries (throttled online attack)
10  / second: 5 months (unthrottled online attack)
10k / second: 3 hours (offline attack, slow hash, many cores)
10B / second: less than a second (offline attack, fast hash, many cores)

そして、低位の果物を打ち倒した後、あなたはおそらく急速に減少するリターンを打つでしょう。

1
Luis Casillas