重複するコンテンツの検証にはどのハッシュアルゴリズムを使用できますか?

私は重複しているかどうかを判断する必要があるxmlファイルを持っています。

私はXMLファイル全体をハッシュするか、xmlファイル内の特定のXMLノードを使用して何らかのハッシュを生成します。

md5はこれに適していますか?

または、他の何か?ハッシュ生成のスピードもかなり重要ですが、ユニークなデータのユニークなハッシュを生成する保証は、より重要です。

9
誰も偽造ファイルを配置してあなたを攻撃しようとしていないなら、MD5は問題ありません。 DVCSesのようにセキュリティが懸念される場合、SHA-1のようなものがあなたの友人になるはずです。 Git はSHA-1を使用しているため、データセットに衝突があってはならない理由は次のとおりです。 seejeffrun.blogspot.com/2009/08/hash-collisions-in-git.html
追加された 著者 TacticalCoder,

3 答え

MD5が壊れている(意図的にハッシュコリジョンを生成することができるという意味で)SHAファミリ(SHA-256やSHA-2など)を使用するのはおそらく悪意のある別のファイルと同じハッシュを持つファイルを作成します。


ハッシュ関数はその性質上、可能なすべての入力に対して一意のハッシュを保証することはできません。ハッシュ関数の長さは制限されています(MD5の長さは128ビットなので、2 128 可能なハッシュがあります)。潜在的に無限のドメインを有限の共同ドメインにマップすることはできませんが、これは数学的に不可能です。

しかし、誕生日パラドックスのように、良いハッシュ関数での衝突の可能性は、2 n/2 、nはビット単位の長さです。 (例:2 64 となる128ビットMD5の場合)。これは統計的に重要ではないので、偶然に起こった衝突について心配する必要はありません。

8
追加された
削除されたコメント、ディスカッションチャットに移動
追加された 著者 NullUserException,
MD5が壊れているというこのユースケースでは、何の役割も果たしません。
追加された 著者 cherouvim,

MD5は適切で高速です。 1文字に1つの違いがあると、全く異なるMD5が生成されます。

MD5が異なる入力に対して同じハッシュを生成する若干の可能性があります。これは非常にまれです。だから、あなたの入力に応じて(多くの類似したXMLや多くのものがあると思いますか?)MD5があなたに肯定的なマッチを与えたら、単純なStringの内容を比較することができます。

4
追加された

もし誰かが少なくとも部分的にXMLファイルの内容を変更することができ、2つのXMLファイル(またはXML抜粋)を同じであると宣言させる利点があるのであれば、暗号的に安全なハッシュ関数が必要ですすなわち、衝突に強いものです。コリジョンは、同じハッシュアウトプットを生み出す別々のメッセージ(バイトのシーケンス)のペアです。これは避けたいものです。ハッシュ関数はその出力よりも長い入力を受け付けるので、必ず衝突が存在します。誰も実際にそのような衝突を生成できない場合、ハッシュ関数は暗号的に安全とみなされます。

ハッシュ関数が n ビットを出力する場合、 2 n/2 個のメッセージについてハッシュした後に衝突を見つけることが期待できます。安全なハッシュ関数は、それよりも速く衝突を得る方法が知られていないようなハッシュ関数である。

セキュリティ上の問題がない場合(つまり、誰も積極的に衝突を見つけようとしない場合、不運からの衝突を恐れているだけです)、暗号の弱いハッシュ関数はオプションです。 > 2 n/2 は、比較する予定のXMLファイルの数よりも大きくなります。 n = 128 (すなわち、1800億に近い 2 n/2 )のMD5は、 MD4 を調べることもできますが、それは弱いですが少し速くなっています。より大きな n が必要な場合は、 SHA-1 を試してみてください。 SHA-1の弱点は現時点ではまだ理論的なので、SHA-1はMD5よりもはるかに「暗号的に壊れていません」。

セキュリティ上の問題がある場合でも、 SHA-256 にアクセスしてください。現在のところ、その機能に関して、衝突に関する暗号的弱点は知られていない。パフォーマンスの問題(基本的なPCでは、SHA-256は1秒あたり100メガバイト以上のデータを処理できるため、XML解析はハッシングよりもはるかに高価になる可能性があります)を実行する場合、SHA-512これは、64ビットの整数型を提供するプラットフォームではいくらか高速ですが、そうでないプラットフォームではかなり遅くなります。

Note that all these hash functions are about sequences of bytes. A single flipped bit changes the output. In the xml world, a given document can be encoded in various ways which are semantically identical, but distinct as far as bits on the wire are concerned (e.g. é and é both represent the same character é). It is up to you to define which notion of equality you want to use; see canonical XML.

0
追加された