重複コンテンツを防止したい。コンテンツのコピーを保持したくないので、md5 署名のみを保持することにしました。
md5 の衝突が発生することを読みました。異なるコンテンツが同じ md5 署名で発生する可能性があります。
md5で十分だと思いますか?
md5 と sh1 を一緒に使用する必要がありますか?
MD5 で問題ないはずです。衝突は非常にまれですが、本当に心配な場合は、sha-1 も使用できます。
署名は実際にはそれほど大きくないと思いますが、予備の処理サイクルとディスク容量があれば、両方を行うことができます。しかし、スペースや速度が限られている場合は、1 つだけにします。
ハッシュの衝突が発生した場合、単純にバイトごとにコンテンツを比較しないのはなぜですか? ハッシュの衝突は非常にまれであるため、バイトごとのチェックを行う必要があることはめったにありません。そうすれば、アイテムが実際に重複している場合にのみ重複が検出されます
偶発的な衝突が本当に怖い場合は、MD5 ハッシュと SHA1 ハッシュの両方を実行して比較してください。両方が一致する場合は、同じ内容です。どちらかが異なれば内容が異なります。
アルゴリズムの組み合わせは難読化に役立ちますが、ハッシュ アルゴリズムのセキュリティは向上しません。
とにかく、MD5 は壊れすぎて使えません。MD5 ハッシュの偽造は研究者によって証明されており、研究者は MD5 衝突を生成するコンテンツを偽造できることを実証しました。これにより、偽造された CSR を生成して、RapidSSL から所有していないドメイン名の証明書を購入するための扉が開かれました。 今すぐセキュリティ!エピソード 179 は、プロセスを説明します。
私にとっては、SHA ベースのハッシュの方が強力で、ほとんどの開発プラットフォームがそれをサポートしているため、選択は簡単です。残りの決定要因はブロックサイズです。
MD5 は壊れており、SHA1 はそれに近いです。SHA2 を使用します。
編集
OP からの更新に基づくと、意図的な衝突はここでは深刻な問題ではないようです。意図しないものについては、少なくとも 64 ビットの出力を持つ適切なハッシュであれば問題ありません。
一般的に、私は MD5 や SHA1 さえも避けますが、それについて独断的になる理由はありません。ツールがここに収まる場合は、ぜひ使用してください。
タイムスタンプ + md5 の組み合わせは十分に安全です。