これが以前に回答されていたら申し訳ありませんが、何も見つけることができませんでした。この質問は、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 つの表現を別の表現に変換するだけです)。ただし、この不自然な例の外には、これから取り除かなければならない重要なセキュリティのモラルがあるのではないかと思います。特にランダム性のソースを選択する場合。
要するに、セキュリティの観点からは、どちらがより望ましいでしょうか? より長いキーと、値がより多くの個別のシンボルをカバーするキーとは?
私はこの背後にある理論に本当に興味があるので、結論の背後にある数学/証明を提供できる人には、追加のボーナス ゴールド スター (または少なくとも私の永遠の賞賛) を贈ります。