長さ9の1つのパスワード(ソルト化およびハッシュ化)または長さ8の2つの異なるパスワード(2つの異なるソルトを使用してソルト化およびハッシュ化)を使用して、より安全なものは何ですか?
John Detersが述べたように、2x8はほぼ確実に悪いですが、なぜ少し説明が必要なのかという理由です。
LANMANハッシュにはいくつかの問題がありました(パスワードを半分に壊してしまう古典的なケースが失敗しました):
パスワードは人間が生成し、多少短い傾向があるため、単一のパスワードが前半より少しだけ長い場合(たとえば、8文字)、後半をクラックすると、劇的により少ない時間-そして前半がどうなるかを与えることさえできた
LANMANは非常に厳しいfast(攻撃者が試行する1秒あたりのハッシュ操作)
LANMANは不幸な長さ(7)でパスワードを2つに切りました。これは完全な枯渇の影響を非常に受けやすかった(そして最近のGPUではなおさらです)。
ただし、質問はLANMANの場合とは少し異なります。
したがって、これは興味深い質問です。関連する数学を調べることで大部分は答えられます。
いくつかの仮定をしてみましょう:
攻撃者にとって最悪のケース-パスワードは、印刷可能なASCII文字セット(95文字)から無作為に生成され、かなり長いソルトが使用されます(パスワードが人間が生成したものである場合、問題はそれほど興味深いものではないでしょう) 、なぜなら実際には攻撃者がブルートフォースに頼らなければならないずっと前に、通常は簡単な攻撃に陥るからです)
最新のハードウェアと速度は公平なゲームです
上記のすべてを考えると、大まかに期待します:
言い換えると:
それについて考えるもう1つの方法は、もう1文字追加すると、おおまかにを作成するのと同じ働きをする95 8文字のパスワード!(これは直感的ではありません。理解するまで、1x1と1x2のような小さなケースを比較する単純なケースから始めます)。
したがって、他のすべての条件が同じであれば、1x9はほとんど常に2x8より優れているはずです。
そして実際、これは並列化の力の単純な例であるだけでなく、より長いパスワード長を許可することが非常に重要である理由も明らかにするはずです。Each上記のモデルに文字を追加すると、キースペース全体に95倍の作業量が追加されます。したがって、two文字を追加すると、95 ^ 2-または9025回-追加されます。非常に高速で無塩のハッシュであっても、ブルートフォースはすぐに実行不可能になります。
これは素晴らしい宿題になります。 ;)
数学の観点から始めます...(計算を簡単にするために、数字のパスワードのみを想定しています)
状況A: 2つの部分の8桁のパスワード。必要な最大2 * 10 ^ 8ハッシュの合計 '
状況B: 1部の9桁のパスワード、「ブルートフォース攻撃には最大10 ^ 9のハッシュが必要」
数学はそれがBの方が良い Aであると言います
一言で言えば
パスワードの追加を追加総当たりの乗算パーツ数(このシナリオでは2x)
さらに桁を増やす総当たり累乗桁数(このシナリオではx10 ^ 1)
パスワードを分割することはほぼ確実に悪いことです。 8文字のレインボーテーブルを作成できます。これは、システム内のすべてのパスワードが8文字で構成されることを意味します。 (これはまさにNT LANMANパスワードが壊れた方法です。)あなたの場合、2つのRainbowテーブルが必要になります。
9文字のパスワードシステムにはそのような目に見える欠陥はありません。つまり、適切な14文字のパスワードを入力した場合は、単一のハッシュとして安全に保存されます。
脅威のシナリオが何であるかを知らないと、意味のある答えはありません。何から守ろうとしているの?ブルートフォースやハッシュクラッキングが心配ですか?最初のケースでは、ログイン手順を知る必要があります(たとえば、パスワードを順番に入力するか、並行して入力するか)。また、何千回、何百万回もログインに失敗してもログイン手順でロックアウトされない場合は、失敗しています。これはパスワードの強度の問題ではありません。
ユーザーが書き留めるのはどうですか?ショルダーサーフィン?フィッシング?パスワードの背後にあるモデルは何ですか?
たとえば、1つの読み取りアクセスパスワードと別の変更可能パスワードなど、2つのパスワードの正当な使用方法があります。 9文字のパスワードの選択肢があるため、そのことを覚えているとは思いませんが、長さのみに基づいたパスワードの強さに関する学術的な質問よりも現実が複雑であることを示すために、それを捨てます。
パスワードシステムには、不正なアクセスに対するセキュリティと、サービス拒否攻撃に対する耐性との間のトレードオフが伴います。分割パスワードシステムの潜在的な利点は、システムの2つの部分が異なるトレードオフを適用できることです。たとえば、サービス拒否攻撃に対する回復力を確保するには、前半のハッシュ機能がスパムによるアクセス試行に対応できる十分な速度であることが必要な場合がありますが、後半の機能では、攻撃者が前半のパスワードが破られていた場合、後半のパスワードでアクセスを試みることができます。
不正な最初の認証情報で誰かがアクセスしようとするたびにフレッドジョーンズに通知された場合、攻撃者はジョーンズ氏に非常に多くの通知を簡単にあふれ、攻撃者が実際にアクセスする可能性があるかどうかに関係なく、役に立たなくなる可能性があります。ただし、誰かが正しい最初のパスワードを入力したが、正しい2番目のパスワードを入力できなかった場合は、ジョーンズ氏に通知する方がはるかに便利です。ジョーンズ氏がアカウントにアクセスしようとしている人物でない限り、そのような通知は、プライマリパスワードが侵害されたという非常にタイムリーで有用な警告となり、両方のパスワードをできるだけ早く変更する必要があります。
ハッシュの詳細や、もっともらしいクラッキングメカニズムの詳細に関係なく、問題の事実は、2つのn-bitパスワードをクラックするのに必要な労力は2nビットではないということです。 n + 1ビットです。
したがって、8文字のパスワードP1およびP2がそれぞれ、たとえば30ビットに相当する強度を持っているとします。 (実際には問題ではありません。具体的な数値を選択しようとしています。そのため、30ビットの労力が必要です。注を参照してください。両方をクラックするには、両方をクラックするには60ビットはかかりません。代わりに31ビットかかります。努力のビット。
ここで、P1を取り、一様に選択された数字を追加し(D10を振る)、それを端に貼り付けると仮定します。次に、拡張されたP1は、クラックするのに約33.3ビットの労力を要します。 P1とP2の両方を実行する場合に比べて、4倍以上の作業です。
P1の末尾に追加する1つの小文字または数字(36の可能性)をランダムに選択すると、この新しいパスワードは5ビット以上強力であるため、これをクラックするのに16倍の推測が必要になります。 P1とP2の両方をクラックします。
パスワードマネージャーである1Passwordで働いています。また、ボールト内にボールトを配置するよう要求されます。これは、一般的に1Passwordのロックを解除するためのマスターパスワードであり、次にいくつかのより高いセキュリティデータのロックを解除するための2番目のパスワードです。私(およびここにいる他の人)が指摘した理由により、これらの要求を拒否しました。
上記の結果は、直観に反するものであり、直感に反するものです。人々はP1とP2の両方を使用すると、P1を少しだけ長くするよりも安全であると認識します。また、マスターパスワードの選択は1Passwordセキュリティの最も弱い点(侵害されたマシン上での実行を除く)であると考えているため、他の方法よりも弱いマスターパスワードを使用するようにユーザーを促す可能性のあるものは紹介しません。 。私たちはまた、人々がその努力に対して最も安全を得るようにしたいと思っています。マスターパスワードに少し追加することを覚えておくのは、別のパスワードを作成して覚えるよりも簡単です。
ノート:
「努力のビット」:n努力のビットは、正しいパスワードを見つけるのに平均して2 ^(n-1)推測かかることを意味します。