57

バイトのブロブが更新されているかどうかを検出できる必要があるシステムを構築しています。BLOB全体(最大5 MB)を保存するのではなく、BLOBが更新されているかどうかを確認するために、そのチェックサムを計算して保存し、少し後で同じチェックサムを計算する必要があると考えています。

目標は、以下を(この順序で)最小化することです。

  • チェックサムのサイズ
  • 計算する時間
  • 衝突の可能性(コンテンツが変更されている場合でも、2つの同一のチェックサムが発生します)。

私たちのシステムの衝突は1/1,000,000以下で許容されます。問題はセキュリティではなく、単に更新/エラー検出であるため、まれな衝突は問題ありません。(これが、最小化するために最後に配置した理由です)。

また、テキストのブロブを自分で変更することはできません。

もちろん、md5またはcrc頭に浮かぶsha1ので、迅速な解決策が必要な場合は、それを選択します。ただし、簡単な解決策ではなく、さまざまな方法と長所と短所を比較できるものを探しています。

4

2 に答える 2

30

このSOページ、CRCとMD5/SHA1をご覧になることをお勧めします。
速度と衝突については、この他のスレッドで説明されています。
そしていつものようにウィキペディアはあなたの友達です。

私が選択しなければならなかった場合、答えるべき重要な質問があります:どのような場合でも衝突がないことを望みますか?または、少なくとも、月が地球と衝突する可能性に近いほど確率が低いことを望みますか?次の5分以内に?

はいの場合は、SHAファミリを選択します。
あなたの場合、更新チェックの実行方法を変更します。
たとえば、増分番号をblobに関連付けて、ハッシュの代わりに送信することができます。反対側で番号が異なる場合は、更新の要求が必要になります。この場合の衝突確率は〜10 ^ -18から〜0(基本的に0 +バグ確率)になります。

以下のコメントを編集する

このアルゴリズム、Adler-32が見つかりました。これは、CRCが32ビットの長いメッセージ(MB)、つまり約1/10 ^ 9(MD5は128ビット長)に適しています。
計算は高速です。
Adler-32。下部にいくつかのサンプル(リンク)があります。

于 2010-11-20T14:25:44.947 に答える
2

Blake2は、使用できる最速のハッシュ関数であり、主に採用されています。

BLAKE2は、他の優れたハッシュ関数よりも高速であるだけでなく、MD5またはSHA-1 ソースよりもさらに高速です。

SHA-3コンテストの勝者はKeccakアルゴリズムでしたが、GNU/Linuxディストリビューションではデフォルトで採用されていない一般的な実装はまだありません。代わりに、SHA-3コンテストの候補であったBlake2は、Keccakよりも高速で、GNUcoreutilsの一部です。したがって、GNU / Linuxディストリビューションではb2sum、Blake2ハッシュアルゴリズムを使用するために使用できます。

于 2017-05-21T18:05:44.087 に答える