MD5アルゴリズムの破壊やセキュリティの問題などを考慮すると、MD5ハッシュはファイルを一意に識別するのに十分な方法と見なされていますか?ここでのセキュリティは私の主な関心事ではありませんが、各ファイルを一意に識別することが重要です。
何かご意見は?
MD5アルゴリズムの破壊やセキュリティの問題などを考慮すると、MD5ハッシュはファイルを一意に識別するのに十分な方法と見なされていますか?ここでのセキュリティは私の主な関心事ではありませんが、各ファイルを一意に識別することが重要です。
何かご意見は?
回答:
はい。MD5はセキュリティの観点から完全に破壊されていますが、偶発的な衝突の可能性はまだほとんどありません。信頼できない人や悪意のある人によってファイルが作成されていないことを確認してください。
実際の目的では、作成されるハッシュは適切にランダムになる可能性がありますが、理論的には、ピジョンホールの原理により、常に衝突の可能性があります。異なるハッシュを持つことは確かにファイルが異なることを意味しますが、同じハッシュを得ることは必ずしもファイルが同一であることを意味しません。
したがって、特にハッシュアルゴリズムで衝突が発生しやすいことがわかっている場合は、セキュリティが問題であるかどうかに関係なく、その目的でハッシュ関数を使用することは常にチェックの最初のステップにすぎません。同じハッシュを持つ2つのファイルが異なるかどうかを確実に見つけるには、それらのファイルをバイト単位で比較する必要があります。
敵がいない場合は、MD5で十分です。ただし、誰かが(意図的に)同じ値にハッシュする2つの異なるファイルを作成することができ(衝突と呼ばれます)、状況によっては、これが問題になる場合とそうでない場合があります。
既知のMD5の弱点が特定のコンテキストに適用されるかどうかを知ることは微妙な問題であるため、MD5を使用しないことをお勧めします。衝突に強いハッシュ関数(SHA-256またはSHA-512)を使用することが安全な答えです。また、MD5を使用することは悪い広報です(MD5を使用する場合は、自分自身を正当化する必要があることを覚悟してください。SHA-256を使用することに誰も疑わないでしょう)。
return 0;
をに変換するreturn 1;
)ため、バイト間の比較は失敗する可能性があります。これは非常にまれですが、SHA-256との衝突のリスクはそれよりもさらに小さくなります。数学的には、同じ値にハッシュする2つのファイルが同一であるかどうかはわかりませんが、コンピューターを使用して比較している限り、ファイル自体を比較しても同じであるとは言えません。つまり、99.999 .... 9%の確実性を超えることは無意味であり、SHA-256はすでにそれ以上のものを提供しています。
md5は衝突を引き起こす可能性があります。理論的には、可能性は非常に低いですが、100万行のファイルが同じハッシュを生成する可能性があります。値を保存する前に、運をテストしてmd5の衝突をチェックしないでください。
私は個人的にランダムな文字列のmd5を作成するのが好きです。これにより、大きなファイルのハッシュのオーバーヘッドが削減されます。衝突が見つかった場合は、追加されたループカウンターを使用して繰り返しハッシュします。
ピジョンホールの原則について読むことができます。
私はそれをお勧めしません。アプリケーションがマルチユーザーシステムで動作する場合、同じmd5ハッシュを持つ2つのファイルを持つユーザーがいる可能性があります(エンジニアであり、そのようなファイルで遊ぶか、単に興味があるかもしれません-それらはhttp:/から簡単にダウンロードできます。 /www2.mat.dtu.dk/people/S.Thomsen/wangmd5/samples.html、私はこの回答を書いているときに自分で2つのサンプルをダウンロードしました)。もう1つは、なんらかの理由で一部のアプリケーションがそのような複製を保存する可能性があることです(そのようなアプリケーションが存在するが可能性が存在するかどうかはわかりません)。
プログラムによって生成されたファイルを一意に識別している場合は、MD5を使用してもかまいません。それ以外の場合は、衝突がまだ判明していない他のハッシュ関数をお勧めします。
MD5が壊れています。代わりにSHA1を使用できます(ほとんどの言語で実装されています)
短い(<数K?)文字列(またはファイル)をハッシュする場合、2つのmd5ハッシュキーを作成できます。1つは実際の文字列用で、もう1つは短い非対称文字列と連結された文字列の逆用です。例:md5(reverse(string || '1010'))。追加の文字列を追加すると、一連の同一ビットで構成されるファイルでも2つの異なるキーが生成されます。このスキームでも、2つのハッシュキーが同一でない文字列に対して同一である理論上の可能性があることを理解してください。ただし、確率は非常に小さいようです。単一のmd5衝突確率の2乗程度で、時間を節約できます。ファイルの数が増えると、かなりの量になる可能性があります。2番目の文字列を作成するためのより複雑なスキームも検討できます。
衝突をチェックするには、このテストを実行して、データベース内のすべてのbit_vectorのmd5ハッシュキーの一意性を確認します。
md5(bit_vector)によるbit_vector
グループを含むdbから、md5(bit_vector)、count(*)、bit_and(bit_vector)を選択し、bit_vectorにbit_and(bit_vector)<> bit_vectorを指定します
MD5は、大量のファイルデータを保存する場合の確率の指標として考えるのが好きです。
ハッシュが等しい場合は、バイト単位でファイルを比較する必要があることを知っていますが、それは誤った理由で数回しか発生しない可能性があります。それ以外の場合(ハッシュが等しくない) 。