可変長のIDを使用するプログラムを実装しています。これらの ID はメッセージを識別し、何らかの操作を実行するブローカーに送信されます (質問には関係ありません)。ただし、ブローカーでのこの ID の最大長は 24 バイトです。ID を (ブローカーに送信する前に) SHA でハッシュし、24 バイトになるまでいくつかのバイトを削除することを考えていました。
ただし、これにより衝突がどれだけ増加するかを考えたいと思います。これは私が今まで得たものです:
「完全な」ハッシュのp^2 / 2^n+1
場合、衝突の確率を記述する式があり、p
はメッセージの数であり、n
はメッセージのビット単位のサイズであることがわかりました。ここから私の問題が始まります。最終的なハッシュからいくつかのバイトを削除しても、関数は「完全」のままであり、同じ式を引き続き使用できると想定しています。したがって、これを仮定すると、次のようになります。
5160^2 / 2^192 + 1 = 2.12x10^-51
5160 はメッセージの選択数で、192 は基本的に 24 バイトのビット数です。
私の質問:
私の仮定は正しいですか?いくつかのバイトを削除することで、ハッシュは「完全」のままですか。
もしそうなら、確率は非常に小さいので、どのバイトを削除する必要がありますか? ほとんどまたはそれほど重要ではありませんか? それは本当に重要ですか?
PS: 同じ結果を達成するための他の提案を歓迎します。ありがとう。