web-dev-qa-db-ja.com

「よく引用されるXKCDスキーム[...]はもはや良いアドバイスではありませんか?」

私はつまずき、偶然 このエッセイ に遭遇しました XKCDパスワードスキーム は事実上死んだとBruce Schneierが主張しました。

現代のパスワードクラッカーは、辞書から異なる単語を組み合わせます:[...]

これが、パスワードを生成するためのよく引用されているXKCDスキーム(「correcthorsebatterystaple」のような個々の単語をつなぎ合わせる)が、もはや良いアドバイスではない理由です。パスワードクラッカーはこのトリックに取り組んでいます。

攻撃者は、パスワード作成者についてアクセスできる個人情報をパスワードクラッカーに送ります。優れたパスワードクラッカーは、アドレス帳の名前と住所、意味のある日付、その他の個人情報をテストします。 [...]プログラムがそれをメモリに保存した場合、このプロセスはそれを取得します。

彼の主張は、人々が攻撃を受けやすいようにパスワードを作成する可能性があることが知られているためですが、その強さは純粋に指数の力にあるようです。副詞や形容詞ではないものを取得するために数回再ロールしたので、彼は人々が本当にランダムに単語を選んでいないことをほのめかしていると思います。ただし、エントロピーを2〜10倍に下げることはそれほど重要ではないと思います(Wordリストを2倍の4000にすると、それほど難しくはなく、損失は回復する以上です)。

「プログラムがメモリに保存されている場合」に関するもう1つの問題は、少し戸惑うかもしれません...すべてのパスワードが一度にメモリに保存されているわけではありませんか?それ少し広範に見える;彼は実際に何を指しているのですか?

230
Nick T

聖戦

パスワードを生成する正しい方法は、各グループが他のグループが非常に単純な数学的誤りを犯している、またはポイントを逃していると考えている聖なる戦争を開始する可能性があることがわかるでしょう。部屋に10人のコンピュータセキュリティ専門家がいて、適切なパスワードを考え出す方法を尋ねると、11種類の答えが得られます。

誤解

パスワードについて一貫したアドバイスがない多くの理由の1つは、すべてが脅威モデリングの問題に帰着することです。何を防御しようとしていますか?

たとえば、あなたをターゲットにし、パスワードを生成するシステムを知っている攻撃者から保護しようとしていますか?それとも、リークされたデータベースの何百万ものユーザーの1人だけですか? GPUベースのパスワードクラッキングから防御していますか、それとも脆弱なWebサーバーだけですか?マルウェアに感染したホストにいますか[1]?

私は、攻撃者がパスワードを生成する正確な方法を知っていて、あなたを標的にしていると想定するべきだと思います。[2] xkcdコミックは、どちらの例でも世代のすべての詳細がわかっていることを前提としています。

数学

Xkcdコミックの数学は正しく、変更されることはありません。

パスワードを入力する必要があることを覚えておくと、本当にランダムなxkcdスタイルのパスワードを生成する python script を使用します。私は2 ^ 11(2048)の一般的で綴りやすい英語の単語の辞書を持っています。完全なソースコードと単語リストのコピーを攻撃者に渡すことができますが、2 ^ 44のパスワードが存在する可能性があります。

漫画が言うように:

1000 Guesses/Sec弱いリモートWebサービスへのもっともらしい攻撃。はい、盗まれたハッシュをクラックする方が高速ですが、平均的なユーザーが心配する必要はありません。

それは覚えやすいことと解読するのが難しいことの間の素晴らしいバランスを打ちます。

もっとパワーを試した場合

確かに2 ^ 44は大丈夫ですが、GPUクラッキングは高速であり、高速になるだけです。 Hashcat は、そのサイズの弱いハッシュ[3]を数年ではなく数日でクラックする可能性があります。また、覚えておくべきパスワードが何百もあります。 xkcdのスタイルでさえ、少し後には難しくなります。

これがパスワードマネージャーの出番です。私は KeePass が好きですが、基本的に同じものは他にもたくさんあります。次に、覚えやすい長めのxkcdパスフレーズを1つだけ生成できます(たとえば10ワード)。次に、アカウントごとに固有の128ビットの真にランダムなパスワードを作成します(16進数またはBase 64が適切です)。 128ビットは、長い間十分に強力です。偏執狂になりたい場合は、256ビットの16進パスワードを生成するのは余計な作業ではありません。


[1]侵害されたホスト上にいる場合、失ったメモリはここにあります。攻撃者がキーログを記録したりメモリを読み取ったりできる場合は、入力するか、KeePassなどのプログラムを使用してコピーして貼り付けるかは問題ではありません。

[2]攻撃者が "Top Passw0rdz 4realz 111!"と呼ばれるディクショナリを急流したという弱い(しかし可能性が高い)仮定ではなく。

[3]もちろん、すべてPBKDF2などを使用する必要がありますが、まだ多くのサイトがSHA1にあります。 (そしてそれらは良いものです)

225
Hybrid

シュナイアーはこれを書いています:

これが、パスワードを生成するためのよく引用されているXKCDスキーム(「correcthorsebatterystaple」のような個々の単語をつなぎ合わせる)が、もはや良いアドバイスではない理由です。パスワードクラッカーはこのトリックに取り組んでいます。

しかし、彼が実際に何を求めているのかを理解するための鍵は、彼のエッセイでもう少しです。

機能するスキームはまだ1つあります。 2008年に戻って、私は 記述 "シュナイアースキーム"

以上です。 Ole 'Bruceは、hisスキームが唯一無二、最高、勝者、究極のスキームであると主張したいと考えています。したがって、彼はそのような主張が科学的に正しいかどうかにかかわらず、「競争相手」について中傷的なことを言う必要があります。

この場合、パスワードの生成方法が攻撃者に知られていることが常に想定されています。これがエントロピー計算の要点です。 分析 を参照してください。攻撃者が「この手口に」変化している何もない(攻撃者がパスワード生成方法を知っている場合、エントロピー計算はexactlyパスワードの強度。攻撃者が無能であり、パスワードの生成方法がわからない場合、パスワードの強度は、定量化するのがほぼ不可能であるだけ高くなります)。

「メモリ内のパスワード」についての短所は、より一貫性のないとりとめです。パスワードは必ず入力するか、パスワードセーフからコピーして貼り付けるか、または同様のものにせよ、必ずRAMに移動します。

私の推測では、ブルースは酔っていました。

更新:2016年8月2日に行われた a Reddit AMA でのパスフレーズの非難についてコメントするようシュナイアーは特に求められました。シュナイアーは、彼のスキームは「他の方法よりも記憶に残る文字ごとのエントロピーを与える」と言っていました。これは、単語を構成する文字と比較すると当てはまります。ただし、システムが文字ではなく単語の記憶に依存しており、パスフレーズ全体に対して十分な「エントロピー」を生成するのに十分な単語を組み合わせることが許可されている場合も、これは無関係です。

152
Tom Leek

[開示:1PasswordのメーカーであるAgileBitsで働いている]

Toward Better Master Passwords で2011年にXKCDのようなスキーム(それが呼び出される前に)を提唱した理由の1つは、その強さは攻撃者がどのスキームを知っているかに依存しないためです中古。自分を引用してもよいか

Dicewareの優れた点は、攻撃者が使用するシステムを知っていると想定しても、どれほど安全かを正確に把握できることです。安全性は、サイコロを転がすという本物のランダムさから来ています。今後数年間にわたる可能性の高い攻撃に対しては、4〜5語を使用するだけで十分です パスワードクラッカーの観測速度を考慮した場合 [1Passwordマスターパスワードに対して]

XKCDコミックが効果的に伝えていないのは、単語の選択は(均一に)ランダムでなければならないということです。人間にランダムに単語を選択するように依頼すると、具体的な名詞に大きな偏りが生じます。このようなバイアスは悪用される可能性があり、悪用されることになります。

あなたが望むどのくらいの強さ

完璧な世界では、パスワードで保護しているキーと同じ強さのパスワードを使用したいと思います。 128ビットと言います。しかし、これらの技術にもかかわらず、人間はそれを達成するつもりはありません。それでは、攻撃と現実の攻撃を見てみましょう。

7776エントリの元のDiceware Wordリストでは、使用するWordごとに約12.9ビットを取得します。したがって、パスワードに少なくとも64ビットが必要な場合は、5ワードで実行できます。

パスワードの推測はキーの推測よりも遅い

このセクションでは、AESキーをテストするよりも、一定額のドルの場合にパスワードをテストする方が2 ^ 13倍遅いというエンベロープの概算の非常に大まかな裏に到達します。

パスワードのテストは、キーのテストよりもかなり遅いことに注意してください。適切な種類のパスワードハッシュスキームが使用されている場合、ほとんどの攻撃者が毎秒100,000推測未満に抑えることができます。したがって、50ビットのキーを使用することは決してないかもしれませんが、50ビットのパスワードを使用することには意味があります。

アーノルドラインホルトの1995年の 元のダイスウェアスキーム のようにサイコロを振るだけに限定しない場合は、より長い単語リストを使用できます。 1Password for Windowsの強力なパスワードジェネレーターは、4文字から8文字までの17679の英語の単語のリストを使用します(タブー単語とアポストロフィまたはハイフンを含む単語は取り除かれています)。これにより、1ワードあたり約14ビットになります。これらのうち4つで56ビット、5つで70ビットになります。

ここでも、クラッキング速度に注意を払う必要があります。 Deep Crack 1997年に戻ると、920億回DES= 1秒あたりのテスト数を実行できました。ハイエンドの特殊なPCが1秒あたり100万回の推測をかなりうまく実行できると仮定します。ハッシュされたパスワードは1秒あたり100万回の推測を行う可能性があり、今日のパスワードは、DESキーが1997年にあった場合よりも約16ビットクラックすることが困難です。

それでは、デュアルコア3.8GHzプロセッサの このStack Exchangeの見積もり を見てみましょう。ハードウェアで5000ドルと想定すると、毎秒100億キーを簡単に超える可能性があります。したがって、同様のハードウェアコストで、キークラッキングはパスワードクラッキングよりも2 ^ 13倍以上高速です。

パスワード強度の目標の改訂

十分にハッシュされたパスワードをテストすることは、AESキーをテストするよりも2 ^ 13倍高価であるという私の見積もりに基づいて、かなりうまくハッシュされたパスワードは、クラッキングに関して実際のエントロピーより13ビット強いと考える必要があります。 90ビットの「実効強度」を実現したい場合は、77ビットのパスワード強度で実現する必要があります。これは、元のリストの6つのワードダイスウェアパスワード(77.5ビット)と、17679ワードのリストから6つのワードを抽出した84.6ビットで実現されます。

ほとんどの人がそれほど長い間パスワードを使用することはないと思います。私は、人々が4語または5語の長さのものを使用することを期待しています。ただし、NSAがパスワードの後に​​続くことを本当に心配している場合は、適切なパスワードハッシュスキームを使用していると仮定すると、6語で十分です。

非常に大まかな見積もりの​​み

コストとベンチマークの調査に多くの時間を費やしませんでした。私の見積もりには、とんでもないことがたくさんあります。私は保守的になろうとしました(私が主張しているスキームについて悲観的です)。 「よくハッシュ化されたパスワード」についても漠然としている。繰り返しますが、私は1Passwordのパスワードハッシュに関して非常に保守的です。 (私たちの新しいデータ形式では、攻撃者は毎秒20,000推測未満に保たれ、以前のデータ形式では、マルチGPUマシンで毎秒300,000推測に達しました。ここでの推定では、100万推測を選択しました「適切にハッシュ化されたパスワード」の2番目。)

さらにいくつかの歴史的ノート

「XKCDのような」パスワードの全体的な考え方は、少なくとも1980年代初頭の S/Keyワンタイムパスワード にまでさかのぼります。これらは2048の1から4文字の単語のリストを使用しました。 6つのワードS/Keyパスワードで66ビットになりました。パスフレーズのリストからランダムに選択された単語を使用するというこのアイデアがS/Keyよりも古いかどうかはわかりません。

1995年、アーノルドラインホールドは Diceware を提案しました。当時、彼がS/Keyを知っていたかどうかはわかりません。ダイスウェアは、PGPのパスフレーズの開発に関連して提案されました。また、ほとんどのコンピュータが暗号的に適切な乱数ジェネレータを備える前でもありました。ですから、実際にはダイスを振ります。 (私は使用するマシンのCSPRNGを信頼していますが、「新しいパスワードのロールアップ」は今でも楽しんでいます)。

2011年6月、私は Toward Better Master Passwords にDicewareへの関心を呼び起こしました。これにより、15分の名声が得られました。 XKCDコミックが出た後、私は オタク版 を作成し、数学のいくつかを紹介しました。

2011年7月、Randall MonroeはDicewareのようなスキームを取り上げ、彼の今の 有名なコミック を公開しました。私はそのアイデアの発明者ではないので、漫画にうんざりすることはまったくありません。確かに、私が私の フォローアップ記事 で言ったように

技術的でない言葉で言うのに2000ワード近くかかったので、ランドールモンローはコミックで要約することができました。これは単に数学の力を示しています...

しかし、コミックがどのように解釈されたかについて、私を心配させることが1つあります。私とすでにこのスキームを理解している人には、単語が確実に均一なランダムプロセスで選択される必要があることは明らかです。 頭から「ランダムに」単語を選択することはではありません確実に均一なプロセスです

89

XKCDパスワードスキームは、これまでになく優れています。セキュリティは、不明であることには由来しませんが、大規模な検索スペースから覚えやすいパスワードを生成するための優れた方法であるためです。ただし、ランダムに生成するのではなく、使用する単語を選択すると、この利点は失われます。人間はランダムであることが得意ではありません。

メモリについての説明は不十分ですが、is懸念事項です。パスワードを盗むマルウェアがコンピュータに侵入すると、RAMからテキストのようにすべてが掃引されます。アカウントへの直接攻撃で使用するハードドライブ。

60
Mark

他の人が言ったように、ブルースシュナイアーが説明する攻撃は、ユーザーがツールを使用せずに自分で複数の単語を選択した場合に効果的です。シュナイアーは通常、一般に公開された聴衆に手紙を出しますが、自分で選んだ「ランダム」な言葉とプログラムが選んだランダムな言葉の違いを理解することはほとんどありません。

スクリプトや他のツールを使用して辞書から単語をランダムに選択する場合でも、これを追加します最初のシーケンスを使用する必要があります。 「好きじゃない」と決めたら、好きになるまで繰り返し実行しますランダムパスフレーズではなくなります、それは人間が選択したものです。

また、スクリプトを使用していても、複数のシーケンスのお気に入りを選択してランダム性を損なわない場合でも、攻撃者がPRNG(pseudo -乱数ジェネレーター。攻撃者がパスワードを作成した時期と、PRNGあなたが使用したもの、およびおそらくPRNG PRNGをほぼ同時に使用して生成されたネットワークトラフィックにより、ランダムパスフレーズの有効なエントロピーが減少する可能性があります。

おそらく少し難解ですが、PRNG=が悪用される場合、2 ^ 44の数値は完全には実現されません。(そして、「誰も私のPRNGを悪用しようとしない」と仮定した場合、なぜ本当に安全なパスフレーズを使いたいですか?)

15
wberry

状況によって異なります。理解する必要があることの1つは、これは隠蔽によるセキュリティではないということです:エントロピー値コミックで使用されていることは、攻撃者がこの方法を使用していることをすでに知っていることを前提としています。攻撃者がパスフレーズの生成方法を知らない場合、エントロピーは大幅に増加します。

XKCDメソッドの秘訣は、実際に乱数ジェネレータと適切なWordリストを使用する必要があるということです:自分で単語を選択するのではなく、「ランダム」にしないでください(人間は実際にランダムに物事を選ぶのが本当に苦手なので、引用符で囲みます。そのため、それを行うべきではありません)。 Diceware には、これを行うのに役立つツールがあり、通常のサイコロを使用することで、ランダムな要素をコンピューターの手の届かないところに移動させることさえできます。

広範な攻撃に対して-攻撃者がWebサイトからパスワードのリストを取得し、そのリストに誰のパスワードが含まれているかを知らないようなもの-これはかつてないほど強力です。あなたが言うように、その強さは指数(そして優れたWordリスト)の力に由来します。

シュナイアーの攻撃は機能しますが、完全に異なる状況でのみ機能します。 彼の攻撃は、あなたについてすでにかなり知っている攻撃者によって、あなたが具体的に標的にされていると想定しています。典型的な攻撃者は画面の背後にいる諜報員であり、私たちのほとんどはそれらについてそれほど心配する必要がないので、これは最初は特に気になるようには見えないかもしれません。とても多くの人々の世話をする余裕があります。しかし、洗練されたマルウェアの登場により、実際にはそれが最初に思われるよりも問題になっています。マルウェアのインストールは、攻撃者が気にしない場合でも気にかける余裕があるため、非常に断固とした攻撃者に直面することになります。人間よりも断固として、実際にははるかに創造的ではないかもしれません。

あなたに関する情報を収集するマルウェアは、あなたにとって重要であると思われる単語を単語リストで非常に高い優先順位で与えます。これは、ほとんどの人が「ランダム」な単語を自分で選ぶためですが、そうすることで、実際には、自分にとって最も重要な単語にかなり強く偏っています。それでも、ランダムに「感じる」かもしれませんが、一部の単語は、他よりも上に来る。そのため、これらの単語に高い優先順位を付けると、ヒットが比較的速くなることがよくあります。これが、シュナイアーが話している「トリック」です。

ただし、実際のランダム性を使用すると、シュナイアーの攻撃を阻止できます。問題は、これには規律が必要であることです。パスフレーズで使用する単語に関するすべての決定(適切な単語リストを選択することを除く)は、完全に手から外さなければなりません。これは、Dicewareのようなものがあなたを助けることができるところです。

11
The Spooniest

攻撃者が辞書の数を知っていると仮定すると、単語の選択がランダムである場合、強度の計算は非常に簡単です:(辞書の単語の数)^(文の単語の数)。つまり、攻撃者による既知の(!)を使用した5ワードのフレーズ7776ワードダイスウェアディクショナリ:7776 ^ 5 = 2.8E19または64ビットのエントロピーがあります。

スキームで言及されていない項目が1つあります。フレーズ全体のランダムな場所に1つ(ランダム)の文字を追加するだけで、強度が約10ビット上がります。参照 Diceware、Optional stuff

上記の計算では、単語間の区切り記号も考慮されていません。これにより、さらに5ビットを追加できます。

5
Dick99999

yesの回答も追加したいのですが、他の理由からです。長さの制約があるため、[一般に]良いアドバイスではありません。

  • Skype、ING、eBay、および私の国のBinckbank ans KPNなどのサイトでは、パスワードは20文字に制限されています。 (その銀行の制限は15ですが、2要素認証を使用しました)
  • 3000文字から8000文字の短い単語辞書の場合、平均文字数は4.5文字/単語で、3〜4個の単語フレーズのみを使用できます。
  • 大きな辞書を使用する場合、平均は6〜7です。3語のみ
  • サイトでパスワードに記号と数字を使用するよう主張している場合、フレーズには18文字しか使用できません。

これらの長さは、オンライン攻撃に対してのみ保護します。オフライン攻撃の場合、キーの派生とハッシュ関数、反復回数、アプリのサイトで使用されるハードウェアのクラッキングに依存します。

2
Dick99999

適切なコンテキストを持つことが重要です。 xkcd comic は、想定される28ビットのエントロピーで_Tr0ub4dor&3_を比較します(ただし、I calculate 34.6として)_correcthorsebatterystapleおよびその想定される44ビットのエントロピー(4つのワード ダイスウェア コードは51.7ビットです…しかし、それらのワードの1つはダイスウェアではありません。単純な100kワードのスペリング辞書を使用して、66.4ビットと計算します)。

まず、これを理解しやすくしましょう。 94の印刷可能な文字があります。 1文字のパスワードにはlog₂(94) = 6.55ビットのエントロピーがあります。 2つの文字にはlog₂(94²) = 13.10ビットのエントロピーがあります。パスワードスキームの最終的なエントロピーを6.55で除算して、文字で測定される純粋にランダムなパスワードの同等の複雑さを決定できます。

したがって:

  • 28ビットのエントロピー≈4.3文字のパスワード(非常に悪い!)
  • 44ビットのエントロピー≈6.7文字のパスワード(これも悪い)
  • 66.4ビットのエントロピー≈10.1文字のパスワード(2016年も可)

Xkcdの数値を信頼すると、Schneierが懸念していた理由がわかります。ほとんどの攻撃者はまだ10文字ほどあきらめるので、これは少し誇張されているようです [要出典] —大規模クラスターが10文字のMD5ハッシュパスワードを解読するのに数年かかるはずです—ただし、優れた攻撃者があなたのスキームを知っている場合、絶対的な文字長は問題ではありません。

スキームの全体的な複雑さが最も重要です。最悪のケースを想定する必要があります(攻撃者があなたの正確なスキームを知っている)。さらに、パスワードが11文字以上であることを確認することをお勧めします( 許可されている場合 )が、これは2番目の優先順位です(パスフレーズ付きで無料で提供されます)。

4つの単語とパスコードでパスフレーズを作成する

これが私のパスファース作成のアドバイスです(エントロピーの見積もり付き):

  • それぞれ4文字以上の4単語以上の無意味な「文章」を作成する(100,000⁴)
  • これらの単語のいずれも、あなたと(またはお互いに)接続することはできません
  • 使用例、スペース、および少なくとも2つの記号または句読点(32²)
  • 少なくとも1つの単語がスペルチェックに失敗する必要があります(たとえば、リーツピーク、外国語、それぞれ64)
  • 少なくとも1つの「エラー」を含める(スペル/文法/構文、エントロピーは不明)
  • 2つの単語の間に、従来の「ランダムな」7文字以上のパスコード(92⁷)を追加します

これは、少なくともlog₂(100000⁴ × 32 × 3 × 64 × 92⁵) = 112ビットのエントロピー(非常に強力で、strong17文字)である必要があります。大文字と小文字(最初の文字のみが大文字であると想定)と1つの記号(_._、_!_、または_?_で終了すると想定)をスキップしたため、2番目の記号の複雑度は3です。 )また、「ランダム」は完全にランダムではないと想定し、コードを5文字相当として計算しました(上記の式を厳密に遵守すると、≈20文字で128ビット以上のエントロピーが得られます)。

その最後のポイントは繰り返す価値があります:

人間はランダム性を生成するのが非常に悪い

人間が生成した「ランダム」な文字のパスコードは、真のランダム性アプローチでもごくわずかです。その人のキーボード、好きな数字、および/または特定のあいまいなWordは推測できないという仮定に関連するコードのパターンがあります。

私はこのスキームを、人々の固有のランダム性の欠如に対して堅牢になるように設計しました。限られた語彙( Basic English で2600語を言います)、関連語の使用(3語のみを数えることによって罰せられる)、および6つの英数字のエントロピーのみに制限されたパスコード、log₂(2600³ × 62⁶)自体は依然として70ビット(≈10.6文字)です。

これをパスフレーズに落とさないでください!このセクションは、このスキームが人間の選択の限られたエントロピーにある程度の抵抗を示すことを示すためにあり、不適切な選択を奨励するものではありません。

唯一の本当の問題は、引用符や歌詞を4つの単語としてとらえている人々にあります。これらのパスフレーズは、引用や歌詞が推測できる場合(たとえば、Facebookのいいね!を見て確認できる場合)、または30秒(MD5)から17日(PBKDF2)のクラック時間で約6個のランダムな文字のエントロピーを持っている場合、自明です。 。

my entropy table を使用して、パスフレーズスキームのエントロピーを計算できます。

(あなたが開発者でない限り、 パスワードはメモリに一時的に存在します であることを気にしないでください)

1
Adam Katz

いいえ、そうは思いません。

Xkcdコミックの実際のアドバイスは、覚えやすいニーモニックを使用すること覚えられる限りパスワードを生成すること。これらはどこでも基本的なパスワードのアドバイスであり、常に真実です(引用されたシュナイアーの方法でさえこれら2つの基本的な事実を使用します)。確かに、コミックは一般的な英語の単語を使用しますが、実装は必ずしもそうである必要はなく、コミックがあなたがすべきであると示唆していませんでした。

もちろん、最も安全なパスワードはMD5文字列のように完全にランダムな文字列であり、おそらくパスワードマネージャーを使用してそれらすべてのパスワードを保存できますが、そのためにどのパスワードを使用しますかマネージャー?¯\(ツ)

1
Raestloz