パスワードの長さを秘密に保つことはセキュリティにとって重要ですか?
パスワードの長さが17であることを知っている人は、パスワードを総当たりするのを大幅に容易にしますか?
さて、数学から始めましょう。パスワードが小文字、大文字、数字で構成されていると仮定すると、62文字から選択できます(数学を簡単にするために、実際のパスワードでも記号を使用しています)。長さ1のパスワードには62の可能性があり、長さ2のパスワードには62 ^ 2の可能性があります。..、長さnのパスワードには62 ^ nの可能性があります。
つまり、パスワードが正確に17文字であることがわかっている場合は、長さが17未満のすべてのパスワードをスキップでき、試行するパスワードは62 ^ 17個だけです。
しかし、62 ^ 17と比較して、17未満の長さのパスワードはいくつありますか?
ええと、62 ^ nを合計して62 ^ 17で除算すると、(n = 1からn = 16までの62 ^ nの合計)/ 62 ^ 17 = 0.016( 計算へのリンク )なので、長さ17 のパスワードのみをチェックすると、までのすべてのパスワードをチェックするよりも1.6%高速です長さ17
95のすべての印刷可能なASCII characters)を許可するパスワードスキームがある場合、17未満のパスワードを試行する必要がないため節約になりますto 1.06%( 計算へのリンク )。
長さnのパスワードの数に対する、nより短いパスワードの数のこの比率に関する興味深い数学の奇妙な点は、実際にはnに依存しないということです。これは、すでに1/95 = 0.0105の漸近線に非常に近いためです。したがって、攻撃者は、パスワードの長さに関係なく、このトリックから同じ相対、またはパーセンテージ、の時間節約を得ることができます。常に1%から2%の間です。もちろん、それにかかる絶対時間は、追加する新しい文字ごとに桁違いに大きくなります。
上記の計算は、a、b、c、...、aa、ab、...を試行する単純なブルートフォーサーを想定しています。これは、適切にランダムに生成されたコンピューター生成パスワードを解読するための優れた(ish)モデルですが、人間が生成したパスワードを推測するためのひどいモデル。
本当のパスワードクラッカーは辞書ベースで、英語の辞書からの単語(および単語の組み合わせ)の試行、漏洩したパスワードのリストなどなので、これらの計算は塩の粒。
あなたの長さを知ることの別の効果は、パスワードを試す必要がないことです17より長い、これは、辞書の単語の組み合わせを試す総当たりアルゴリズムでは、実際には大きな節約になります。
@ SteveSether、@ xeon、および@CountIblisで述べたように、パスワードの長さ(またはエントロピー)を公開すると、攻撃者が強力なパスワードから遠ざけ、代わりに弱いパスワードに引き付けてパスワードを解読しようとするかどうかにも影響します。したがって、強力なパスワードを持っていることがわかっている場合は、公開してください。ただし、システム内のすべてのユーザーのパスワードの長さ(またはエントロピー)を公開すると、強力なパスワードを強力に、弱いパスワードを弱める効果があります。
ボトムライン:
パスワードの長さを誰かに伝えることは、あなたにできる最悪のことではありませんが、私はまだそうしません。
@Mikeの詳細な計算とは別に、パスワードlengthがいたるところに漏れていることも考慮してください。
入力すると、卑劣な傍観者は、画面上の「*」を数えるか、キーストロークを聞くことで学習できます(後者の場合、スマートフォンで音声を録音して、レジャーとして再生できます)。
従来の「Webブラウザー」のシナリオでは、ユーザー名とパスワードがHTTPS POSTを介してサーバーに送信されます。 SSLレイヤーはデータを暗号化しますが、SSLはデータを隠しませんlengthなので、パッシブネットワークオブザーバーもパスワードの長さを学習します。
ユーザー側インターフェースと受信システムの両方が、実行時間とメモリアクセスパターンがパスワードの長さに依存する関数でパスワードを処理します。タイミング測定を実行できる攻撃者は通常、これらの測定からパスワードの長さを推測できます。
したがって、正しい方法は、パスワードの長さを公開データと見なすことです。一部の攻撃者はそれにアクセスできません(サーバーデータベースのコピーを取得したばかりの攻撃者)。他の人はそれを知っています。パスワードの長さがどれだけ「秘密」であるかを知ることは非常に難しく、セキュリティはすべて量化のことなので、すべての攻撃者がmayを知っていると想定するのが最善です。パスワードの長さ。秘密にしておくことができると信じて、その概念に基づいてセキュリティを推定することは、非常に危険です。
パスワードの長さを明らかにすると、パスワードの強度が明らかになります。つまり、あなたは本質的に、推測するのがどれほど難しいかについて誰かにヒントを与えることになります。
したがって、パスワードが非常に長い(例では17文字)場合、それはほとんど役に立たない情報です。パスワードが短い(6文字)場合は、攻撃する価値があると攻撃者に知らせます。攻撃者は最も簡単なターゲットを狙います。
受け入れられた答えに同意しません。すべてのパスワードがマシンによってランダムに作成された場合、パスワードの長さがほとんど役に立たないのは事実です。 パスワードが通常の方法で人間によって作成された場合、これは保持されなくなります:1つ以上の辞書の単語に基づいて、大文字と小文字を組み合わせ、一部の文字を置き換えます数字または特殊文字を使用し、接頭辞と接尾辞(「!1」など)を追加します。
2つのシナリオを見てみましょう。1つは、10000'000個のパスワードハッシュがあり、これらのハッシュに一致するパスワードをできるだけ多く見つけたい場合です。もう1つはパスワードハッシュの1つで、これを解読します。どちらのシナリオでも、違いは重要です。 いつものように、たとえ一見それがそうでなくても、攻撃ではすべての情報が悪用される可能性があります。
パスワードの長さがわからない場合は、すべてのパスワードハッシュを区別することなく、ブルートフォース攻撃を試すことができます。
徹底的なブルートフォース攻撃(パスワードを見つけることが保証されています)を使用する場合、パスワードの長さを知ることで得られる利益はごくわずかです。どうして? 7桁のパスワードをすべて総当りで実行する場合、8桁のパスワードをすべて総当りで実行する場合と比べて、約1〜2%かかります。長さを知ることで得られる唯一のことは、パスワードが8桁であることをすでに知っている場合は、7桁(およびそれ以下)のパスワードすべてをブルートフォースする必要がないことです。 ブルートフォース攻撃はほぼ無限のリソース(計算能力および/または時間)を必要とするため、私たちが実行できる、または実行するものではありません。
代わりに、パスワードの長さごとに一連の「ありそうな」パスワードをテストします。これを行う1つの方法は、 辞書攻撃 を使用することです。ありそうなパスワードのテストは、徹底的なブルートフォースを使用するよりも数桁安価ですが、大きな欠点があります。パスワードハッシュに対して「可能性が高い」7桁のパスワードをすべて試し、一致するパスワードが見つからなかった場合、このパスワードハッシュに一致するパスワードが7桁より長いかどうかを確認します。したがって、パスワードが7桁以下であることが確実でない限り、「可能性が高い」すべての8桁のパスワード、9桁のパスワード、10桁のパスワードなどに対して、そのパスワードハッシュをテストする必要があります。徹底的なブルートフォース、長いパスワードをテストするコストは指数関数的に増加します。パスワードが7桁であることを確認したので、8、9、10、11、12桁の長いパスワードと比較してパスワードをテストする必要がなく、作業量を大幅に節約できます。
それは良くなります。たとえば20桁までの可能性のあるすべてのパスワードをテストしたら、以前の「可能性のある」パスワードの検索で解読されなかった短いパスワード長のパスワードハッシュに対するブルートフォース攻撃に残りのリソースを費やすことができます。 。たとえば、2,000'000の解読されていないパスワードハッシュが残っており、そのうちの100'000には6桁未満のパスワードがあるとします。予算に限りがあることにご注意ください。 6桁のパスワードは簡単に解読できます。しかし、100'000が6桁以下であることがわかっているため、100'000をクラックするために100'000 6桁のパスワードをブルートフォースする必要があります。数字のパスワード。同じ結果を得るための作業の5%です。
すべてのメリットを組み合わせると、パスワードの長さを知ることで得られる正確な効果は、「可能性の高い」パスワードをテストする方法の速度、パスワードの長さごとに可能性のあるパスワードをテストする方法のそれぞれの成功率、解読したいパスワードハッシュコレクション内のパスワード長の分布、および利用可能なリソースの量(計算速度、時間)。しかし、パスワードの長さを知ることにより、特定のリソース量で見つけたパスワードの数を数倍に簡単に増やすことができます-数字が私たちの好意で機能する場合、おそらく減らすことができますパスワードの30%を1桁以上クラックするためのリソースコスト
パスワードの長さがわからないため、短い長さですべてのキーをブルートフォースで強制することと、長い長さの可能性のあるパスワードをテストすることの間にリソースを分散する必要があります。それぞれに半分のリソースを費やしていると仮定すると、パスワードの長さがわかれば、2つのうちの1つを完全に渡すことができるため、使用可能なリソースが2倍になります。
また、標的型攻撃に非常に役立つ追加情報も入手できます。
パスワードがブルートフォースになるほど短い場合は、パスワードの取得にかかる時間の上限を指定できます。これにより、他の方法では考えられないような攻撃を試みる可能性があります。
また、パスワードが解読される可能性を計算することもできます。パスワードを解読する可能性が低いことがわかっている場合は、システムを侵害する他の方法を見つけるためにリソースを費やすことができます。
同じユーザーからの2つの異なるパスワードがある場合、それらが実際に同じパスワードである可能性があるかどうかを確認できます。それらが2桁から3桁しか変化しない場合、長いパスワードは短いパスワードと同じである可能性があり、さらに接頭辞または接尾辞が付いていると推測できます。
パスワードについてさらに多くの情報を取得すると、個別に2つの部分よりもはるかに多くの結果が得られる可能性があります。たとえば、パスワードがOxford辞書の1つの単語であることがわかった場合でも、たとえば1分あたり1つのパスワードしかブルートフォースできない場合でも、パスワードを安全に保つことができます。しかし、パスワードの長さが17桁であることもわかっている場合、それはゲームオーバーです。
パスワードの長さを明らかにすることは影響します。パスワードが弱い場合(短いパスワード)、攻撃者はパスワードの解読に集中する可能性があります。パスワードが強力(長いパスワード)である場合、攻撃者は他の攻撃方法を探る可能性があります。そのため、パスワードの長さがわかっていると、ハッカーは時間を節約しながらより適切な戦略を選択できます。
質問の適切な概要を示す回答に加えて、考慮すべきもう1つのことがあります:リスク評価を行うとき攻撃者は、パスワードの作成に使用する方法についてすべて知っています。
言い換えると、パスワードが4つの平均的な英語の単語をつなぎ合わせたもので構成されている場合、すべて小文字( àla xkcd )である必要があります(それとは異なり、xkcdがそうするのとは異なります)。攻撃者は、関連する辞書と4つの単語の組み合わせのみを試してください。
これで、キースペース(可能性の数)が得られ、[特定のテクノロジと環境に関連する数]の試行回数/秒でその要素をチェックするために必要な時間に照らして、パスワードが攻撃に耐えられる統計時間を得ることができます。 。
次に、これが十分長いかどうかを独自の基準(パスワードのライフサイクル、そのアカウントで作業する時間、宇宙の年齢など)を使用して決定します。
Xkcdの例をとると、それは
Steve Setherが彼の回答で指摘しているように、非常に長いパスワードのみを使用する場合、意図的にパスワードの長さを開示することで、ハッカーが推測する可能性を低くします。そのため、パスワードに関する情報を故意に漏らして、実際にセキュリティを強化します。
攻撃者はブルートフォース攻撃を使用せず、考えられるすべてのパスワードを試行しますが、可能性の高いパスワードを最初に試行します。完全にランダムな8文字のパスワードは、推測が簡単な17文字のパスワードよりも解読が難しい場合があります。
結果として、攻撃者はすべての短いパスワードを最初に試行するのではなく、攻撃全体にわたってさまざまな長さのパスワードを試行します。したがって、18文字のパスワード「hellohellohello123」を持っている場合、安全ではありません。完全にランダムな8文字のパスワードの方が安全な場合があります。
攻撃者は8文字のパスワードすべてをチェックする前に "hellohellohello123"のようなことも試みるため、ハード8文字のパスワードは推測が困難です。攻撃者にパスワードの長さを伝えると、その部分の修正が行われます。したがって、損失は前述の1.26%よりもはるかに悪いものです。
すべてパスワードのエントロピーを減らすと、パスワードの強度が下がります。
パスワードの長さを開示しても、残りの可能なパスワードのプールはまだ十分な大きさである可能性があります。
具体的な例としては、長さ17のすべてのパスワードのセットは、ほぼすべての攻撃に対して十分に強力です。あなたが「長さ17の私のパスワードには誰も知らない私の猫の子猫の名前が含まれています」のような他の詳細を明らかにしなかったという条件で。
長さ17は、272843561753653169767435615050624325866274580142388791900214521038955085904188409449281578168966401の組み合わせ(80の可能な文字を考慮-英数字と特殊文字の追加)を意味します。現在の処理能力を考えると、これで十分だと思います。上記の数値は、1桁の後に98 0が続く桁数です。