0

これが以前に回答されていたら申し訳ありませんが、何も見つけることができませんでした。この質問は、SOに関する別のセキュリティ関連の質問へのコメントに触発されました:

ハッシュで使用するランダムな長いソルトを生成するには?

具体的なコメントは次のとおりです(受け入れられた回答の6番目のコメント):

...第二に、さらに重要なことに、これは 16 進文字のみを返します。つまり、0 ~ 9 と AF です。F よりも大きい文字を返すことはありません。他の多くの有効な文字が存在する可能性があり、ほぼ確実に存在する場合、出力を 16 の可能な文字に減らしています。

— エージェントコンドラム

これは私に考えさせました。任意の一連のバイトがあり、各バイトが 2^(8) にわたってランダムに分散されているとします。このキーを A とします。ここで、A を 16 進数の文字列表現であるキー B に変換したとします (例: 0xde 0xad 0xbe 0xef => "deadbee f")。

いくつかのことはすぐにわかります:

  • 長さ (B) = 2 長さ (A)
  • B のシンボルは 2^(4) の離散値に制限されますが、A のシンボルは 2^(8) を超えます。
  • A と B は、異なるエンコーディングを使用するだけで、同じ「数量」を表します。

私の推測では、この例では、2 つの鍵が同じように安全になるのではないかと考えています (そうでなければ、すべてのパスワード クラッキング ツールは、より迅速な攻撃のために 1 つの表現を別の表現に変換するだけです)。ただし、この不自然な例の外には、これから取り除かなければならない重要なセキュリティのモラルがあるのではないかと思います。特にランダム性のソースを選択する場合。

要するに、セキュリティの観点からは、どちらがより望ましいでしょうか? より長いキーと、値がより多くの個別のシンボルをカバーするキーとは?

私はこの背後にある理論に本当に興味があるので、結論の背後にある数学/証明を提供できる人には、追加のボーナス ゴールド スター (または少なくとも私の永遠の賞賛) を贈ります。

4

2 に答える 2

2

パスワードで使用できるさまざまな記号の数が でx、長さがyである場合、考えられるさまざまなパスワードの数 (したがって、ブルート フォース攻撃に対する強度) はx ** yです。したがって、最大化したいのですx ** yx追加または追加の両方yでそれが行われます。どちらが合計を大きくするかは、関係する実際の数と実際の制限が何であるかによって異なります.

しかし、一般に、増加xすると多項式の成長のみが得られ、追加するとy指数関数的な成長が得られます。したがって、長期的には、長さが勝ちます。

于 2013-06-18T21:36:32.733 に答える
1

長さ 8 のバイナリ文字列から始めましょう。考えられる組み合わせは、00000000 から 11111111 までのすべての順列です。これにより、2^8 のキースペース、または 256 の可能なキーが得られます。次に、オプション A を見てみましょう。

A: 1 ビット追加します。これで 9 ビットの文字列ができたので、可能な値は 000000000 から 111111111 の間になり、キースペースのサイズは 2^9、つまり 512 キーになります。ただし、オプション B もあります。

B: キースペースに追加の値を追加します (キースペースのサイズではありません!): ここで、受け入れられる数値が 0、1、および 2 である 3 進数システムがあると仮定しましょう。長さ 8 の文字列を想定すると、3^ になります。 8、または 6561 キー...明らかにはるかに高いです。

でも!トライナリーは存在しません!

あなたの例を見てみましょう。あなたが混乱しているかもしれないことのいくつかを明確にすることに注意してください. 4 バイト (または 32 ビット) のビット文字列で開始します: 11011110 10101101 10111110 11101111 (ところで、これは 0xDEADBEEF に相当するビット文字列です)

各桁の可能な値は 0 または 1 であるため、指数の基数は 2 です。32 ビットあるため、このキーの強度は 2^32 になります。次に、2 番目のキーである DEADBEEF を見てみましょう。各「桁」は、0 ~ 9 の値または AF です。これにより、16 個の値が得られます。8 つの「桁」があるため、指数は 16^8 です...これは 2^32 にも等しくなります! したがって、これらのキーの強度は同じです (また、それらは同じものであるため)。

しかし、私たちは本当のパスワードについて話しているのであって、ばかげた小さなバイナリのものだけではありません。長さ 8 の小文字のみのアルファベット順のパスワードを考えてみましょう: 26 の可能な文字があり、そのうち 8 文字であるため、強度は 26^8、つまり 2,088 億 (ブルート フォースには約 1 分かかります) です。長さに 1 文字を追加すると、26^9、つまり 5.4 兆通りの組み合わせ (約 20 分) になります。8 文字の文字列に戻りましょう。ただし、文字を追加します: スペース文字です。今では 27^8、つまり 2820 億です....追加の文字を追加するよりはるかに少ないです!

もちろん、適切な解決策は両方を行うことです。たとえば、27^9 は 7.6 兆通りの組み合わせ、つまり約 30 分のクラッキングに相当します。大文字、小文字、数字、特殊記号、およびスペース文字を使用した 8 文字のパスワードは、破るのに約 20 日かかります....それでも十分な強度はありません. もう1キャラ追加で5年。

参考までに、私は通常 16 文字以上のパスワードを作成し、少なくとも 1 つの大文字、1 つのスペース、1 つの数字、および 1 つの特殊文字を使用します。このような 16 文字のパスワードは、力ずくで数 (100) 兆年かかります。

于 2013-06-18T22:04:39.980 に答える