0

ユーザーが私の Web サイトにサインアップしたとします。特定のパスワード基準を要求することは、潜在的なハッカーにパスワードを推測するための出発点を与える可能性があるため、「悪い」ことではないでしょうか?

たとえば、パスワードは少なくとも 8 文字で、1 つの大文字と 2 つの数字が必要であると私が言った場合、ハッカーは私のユーザーのすべてのパスワードについてあまりにも多くの情報を得ることができませんか?

最終的に、私の質問は、「グローバルな」基準がないように、ランダムなパスワード基準ルールを提供できるアプリケーションを実装するのは良い考えでしょうか?

論理関数:

critera = {
    random_1: <password must be more than five characters and have two numbers>
    random_2: <password must be more than six characters, cannot use numbers>
    random_3: <password must be less than eleven characters and start with a captial>
}

<random loop for sending criteria.random_x to any random user signing up for an account>

私は自分の Web サイトを Python でプログラムしていますが、これを行う場合、この方法で行うことでセキュリティ上のリスクはありますか? それとも、この方法は一般的に悪い考えですか? もしそうなら、なぜですか?

4

5 に答える 5

1

パスワードは 8 文字以上で、大文字 1 つと数字 2 つを使用する必要があります。これでは、ユーザーのすべてのパスワードについてハッカーに多くの情報が与えられませんか?

どれどれ。句読点を無視すると (強制されない限りパスワードに句読点を入力する人は多くないため)、パスワードに一般的に使用される文字は 62 文字です。もちろん、ほとんどのパスワードはランダムに生成されるわけではないため、一部のパスワードは他のパスワードよりも一般的です。

「最小8文字」とだけ言った場合と、追加の制限を加えた場合とを比較してみましょう。また、最悪のパスワードを想定してみましょう。これは、最小の長さだけです。

任意の文字の組み合わせが許可されている場合、可能なパスワードの数は62**8です。2.2 * 10**14

大文字 1 文字と数字 2 桁の制限がある可能なパスワードの数は (ええと、私は組み合わせ論が得意ではありません) より多く62**5 * 26 * 100、つまり です2.4 * 10**12

したがって、攻撃者は確かにより多くの情報を持っています。パスワードの合計スペースは 99% 小さくなっています。でも小さすぎない?この 2.4 兆と 220 兆というサイズの違いは、攻撃者がパスワードをブルート フォース攻撃する場合としない場合の違いになるのでしょうか?

おそらくそうではありません。違いがあったとしても、8 文字ではなく 9 文字を要求するだけで、ほとんどのスペースを取り戻すことができます。そのため、自分が何をしているのかを理解し、強力なパスワードを選択するユーザーのリスクが高まることはありません。

パスワードに大文字と数字を要求することがパスワードを強化する最善の方法であるとは完全には確信していませんが、ユーザーが辞書の単語を使用できないようにすると、攻撃者の邪魔になります. そのスペースから最悪のパスワードを排除しました。つまり、サイト上で「最も推測しやすいパスワード」を少なくともクラックしにくくしたことを意味します (うまくいけば)。パスワードに対するこれらの単純な制限で期待できることは、これでほぼすべてです。

脅威モデルについて少し考える必要があります。たとえば、期間があり、その期間が過去/現在/未来のいずれであるかはわかりません.2兆のエントリのレインボーテーブルは計算上実行可能ですが、200兆のレインボーテーブルは実行不可能です。地球上で最も有能な攻撃者の時代は過去にあり、平均的なクラッカーの時代は未来にあると思いますが、それが起こるたびに、この歴史の時代は短いものであり、したがって、Web サイトのベースにしたくないでしょう。実際の攻撃者の現在にあることを前提としたセキュリティ。

では、ユーザーごとに異なるパスワード基準を適用する方がよいでしょうか? 攻撃者が、より小さなパスワード スペースの恩恵を受ける攻撃を適用している場合は、そうなるでしょう。ただし、いずれかの制限が弱い場合 (例のリストで「5 文字以上で数字が 2 つある」が最も弱い)、すべてのユーザーに対して最も強力な制限を使用した場合よりも弱いパスワードを持つ一部のユーザーが許可されます。

したがって、基本的にいいえ、同等の価値のあるいくつかの基準のいずれかをランダムに適用しても、大きなメリットはないと思います。それができる最善の方法は、必要な攻撃のサイズに、選択したさまざまな基準の数を掛けることです。それは、さまざまなルールが完全に交差しないパスワードのスペースを生成する場合であり、実際にはそれほど良くありません.

大文字または数字を要求することは、ユーザーに辞書にないパスワードを選択するよう促し、おそらくユーザーが何をしているかについて少し考えさせるための心理的なトリックです。それが機能する場合、それは素晴らしいことであり、同じルールを全員に適用するかどうかに関係なく機能します。許可されたパスワードのスペースは、ユーザーが実際に考えて使用するパスワードのスペースと比較して、ほとんど無関係です。

ユーザーが脆弱なパスワードを選択するのを防ぎたい場合は、制限が適用されていても、最も一般的に選択されているパスワードをブロックしてください ( http://gizmodo.com/5954372/the-25-most-popular-passwords -of-2012https: //xato.net/passwords/more-top-worst-passwords/ )。これらは、ブルート フォース攻撃者が試みる最初の攻撃の 1 つです。それらの多くには数字が含まれています。研究者がすべてを小文字にしたため、大文字が含まれているかどうかを判断することはできません。

研究者によると、公開されたパスワードの 91% が上位 10k (大文字と小文字を区別しない) に入ったことに注意することは非常に重要です。そのため、各パスワードに大文字を 1 つ含め、平均長が 6.3 文字であっても、攻撃者は 63,000 回の推測でアカウントの 91% を総当たり攻撃できます。ユーザーにこれらのパスワードを許可すると、運が良ければ、ささやかなボットネットからのオンライン攻撃でパスワードを見つけるのに 1 日程度かかることになります。安全にハッシュされ、ソルト化されたパスワードのリストに対するオフライン攻撃の数秒。

これらの最も一般的なパスワードを取り除くことは、攻撃者が力ずくで攻撃するのを困難にするために絶対に必要です. パスワード スペースの正確なサイズはそれほど重要ではありません。

于 2013-10-20T23:18:41.533 に答える
0

コメントで明確にされているように、質問の核心は次のとおりです。

技術的には、そうです。単純に、パスワードに少しの不明な情報を課しているという理由だけで、より優れています。

しかし、あまり有利ではありません。セットがある場合、攻撃者にとっての最悪のシナリオ (開発者にとっての最良のケース) は、攻撃者が各セットに対して独立して作業を実行しなければならないnため、攻撃者の作業をせいぜい 1 倍に増やしただけです。制限。nn

の場合n=3、これはあまり改善されません。必要な作業を 3 倍することは、約 1.6 ビットの作業を追加することと同じです。全体像では、それは重要ではありません。ケースで攻撃できる攻撃者は、 、または でn=1攻撃できますが、もう少し我慢する必要があります。本当のセキュリティを確保するには、作業係数を少なくとも 10 ビット (または) 増やすスキームを使用する必要があります。n=3n=10n >= 1024

有効にするには、パスワードの制限によって次のような条件が課せられる必要があります。

  • 互いに排他的
  • 適合するパスワードを標準セットに似ないように強制する

提供されているパスワード制限の例は重複しており、有用な条件を課すものではありません。random_1との両方の半分は のrandom_2サブセットになりrandom_3ます。random_1そしてrandom_2、実際には(数値制限のために)互いに素であり、これは良いことです。しかし、重要な問題はrandom_3、標準の「何でも許可される」キー空間から大きく逸脱しておらず、他のものはわずかしか逸脱していないことです。攻撃者は 3 つの異なる攻撃を行うわけではなく、制限について何も知らないかのように標準的な攻撃を開始し、これらの例で許可されているすべてのものを偶発的に攻撃します。これらの特定の例は、実際にはほとんど追加されません。単純な小文字+大文字、小文字+数字などの組み合わせに基づく辞書が広く使用されています。

とはいえ、攻撃者の作業にオーバーヘッドを追加することは非常に良い考えです。実際、これはすでに解決済みの問題です。「work」パラメーターを取るパスワード ハッシュ関数を使用します。このようなハッシュにより、開発者は、パスワード ハッシュを計算するために実行する必要がある内部作業の量を指定できるため、開発者は、攻撃者がスケーリングする必要のある作業量を選択できます。これは、あなたが提案したもののより形式化された実用的なバージョンですが、よりスケーラブルで、広くサポートされており、よりシンプルです。私がお勧めする 2 つの一般的なそのようなハッシュはbcrypt( python の例) とscrypt.

于 2013-10-21T16:57:02.860 に答える