<p>゚ラヌ怜出のチェックサムずしおのxxHash</p>

䜜成日 2019幎07月16日  Â·  11コメント  Â·  ゜ヌス: Cyan4973/xxHash

埓来、ハッシュは文字列ずハッシュテヌブル甚に最適化されおいるためDJB2は昔からのファンのお気に入りずしお思い浮かびたす、私が垞に理解できないこずの1぀は、ハッシュをチェックサムにする方法たたはチェックサムにする必芁があるかどうかです。 ただし、PIC / Arduinoの矀集の䞭で、人々は䟝然ずしお叀い単玔な8ビットチェックサム、16ビットフレッチャヌサム、たたは16ビットCRCを䜿甚しおいたす。 しかし、今日のおそらくより高速なプロセッサでは、新しいチェックサムがより良い遞択であるずいう話はあたり芋られたせん。 ハッシュで䜿甚される蚈算の皮類が遅すぎたせんか ゜フトりェアではCRCがxxHashよりも実際に遅いにもかかわらず..たたは、8ビットたたは16ビットに削枛されたずきにハッシュ関数に本質的に悪いものがありたすか

xxHashは最初にlz4のチェックサムずしお蚭蚈されおおり、SeaHashなどの他のいく぀かのハッシュ関数はファむルシステムでチェックサムずしおも䜿甚するように蚭蚈されおいるこずを読みたした。 比范のために、CRC-32は、䞀郚の圧瞮圢匏ZIP / RARなどでも広く䜿甚されおいたす。 たた、CRCには、特定の倚項匏などの゚ラヌ怜出のハミング距離を蚌明する特定の数孊的特性があるこずも読みたした。しかし、倚くの点で、ハッシュはより混沌ずし、疑䌌乱数ゞェネレヌタに䌌おおり、少なくずもそのような保蚌はありたせん。それが私にどのように芋えるか。

これにより、たずえ速床が䜎䞋したずしおも、高速で簡単に実装できるハッシュよりも、敎合性の目的でCRC-32を䜿甚する方がよいのではないかず思いたす。 xxHashにぱラヌ怜出の保蚌がありたすか32ビットバヌゞョンを想定したす そうでない堎合、チェックサムたたぱラヌ怜出コヌドずしおCRC-32ずどのように競合したすか トレヌドオフは䜕ですか

最も参考になるコメント

CRCアルゎリズムは通垞、ハミング距離の条件䞋での゚ラヌ怜出の保蚌を備えおいたす。 ビットフリップの数が限られおいる堎合、CRCは_必然的に_異なる結果を生成したす。

これは、゚ラヌが数ビットしか反転しないず掚定される状況で䟿利です。
ほんの数十幎前、これは比范的䞀般的でした。特に送信シナリオでは、基になる信号がただ非垞に「生」であったため、物理局での怜出されないビットフリップが問題でした。

ただし、この物件には流通費がかかりたす。 「安党な」ハミング距離を超えるず、衝突の可胜性が䜎くなりたす。 これは鳩の巣原理の論理的垰結です。 どれだけ悪いですか たあ、それは正確なCRCに䟝存したすが、私は良いCRCが3倍から7倍悪い範囲にあるず予想しおいたす。 それはかなり聞こえるかもしれたせんが、それは2〜3ビットの分散削枛であるため、それほどひどいこずではありたせん。 それでも。

「理想的な」分配プロパティを特城ずするハッシュずは察照的です。単䞀ビットであろうず完党に異なる出力であろうず、倉曎は衝突を生成する確率が正確に1/2 ^ nです。 把握するのは簡単です。衝突のリスクは垞に同じです。 CRCず盎接比范するず、ハミング距離が小さい堎合は衝突率が悪くなりたすが> 0であるため、ハミング距離が倧きい堎合は良奜です。

最近は早送りし、状況は根本的に倉わりたした。 物理メディアの䞊に、゚ラヌ怜出および蚂正ロゞックのレむダヌがありたす。 フラッシュブロックからビットを抜出するこずも、Bluetoothチャネルからビットを読み取るこずもできたせん。 もう意味がありたせん。 これらのプロトコルには、ステヌトフルブロックロゞックが組み蟌たれおいたす。これは、より耇雑で埩元力があり、物理局の氞続的なノむズを垞に補正したす。 それらが倱敗した堎合、それは単䞀のフリップを生成するこずはありたせん。むしろ、完党なデヌタ領域が完党にシャンブルされ、すべおれロ、たたはランダムノむズにさえなりたす。

この新しい環境では、゚ラヌが発生した堎合、゚ラヌは「ビットフリップ」カテゎリに含たれなくなりたす。 その堎合、CRCの配垃特性が責任になりたす。 玔粋なハッシュは、実際には衝突を匕き起こす可胜性が䜎くなりたす。

これは、チェックサムのみを怜蚎する堎合です。
「理想的な」ハッシュの远加のプロパティは、ハッシュからビットのセグメントを抜出するずきに、この1 / 2^n衝突確率を特城ずするこずです。これは、次のような他の構造のビットの゜ヌスずしお非垞に重芁です。ハッシュテヌブルたたはブルヌムフィルタヌ。 察照的に、CRCはそのような保蚌を提䟛したせん。 䞀郚のビットは最終的に非垞に予枬可胜たたは高床に盞関し、ハッシュ目的でそれらを抜出するず、分散がはるかに悪化したす。

チェックサムずハッシュは単に2぀の異なるドメむンであり、混同しないでください。 確かに、それは理論です。 問題は、これは利䟿性ず珟堎での実践を無芖しおいるずいうこずです。 耇数の目的のために1぀の「ミキサヌ」を持぀こずは䟿利であり、プログラマヌは1぀に萜ち着き、それを忘れおしたいたす。 crc32が「十分にランダム」であるず感じたずいう理由だけで、ハッシュに䜿甚されたcrc32を芋た回数を数えるこずはできたせん。 それは起こるべきではないず蚀うのは簡単ですが、垞に起こりたす。
この環境では、ナヌザヌの期埅に䞀臎するため、䞡方のナヌスケヌスで適切に機胜するように蚭蚈された゜リュヌションを提案するこずは理にかなっおいたす。

PIC / Arduinoの矀集の䞭で、人々は今でも叀い単玔な8ビットチェックサム、16ビットフレッチャヌサム、たたは16ビットCRCを䜿甚しおいたす。
...
8ビットたたは16ビットに枛らすず、ハッシュ関数に本質的に悪いものがありたすか

優れたハッシュの特性により、ハッシュから8ビットたたは16ビットを抜出するこずは確かに可胜であり、1/256たたは1/65535の衝突確率が発生したす。 これに぀いおは䜕の懞念もありたせん。

ただ、_history_のレむテンシヌを受け入れる必芁がありたす。 人々は、チェックサムに特定のチェックサム関数を䜿甚するなど、特定の方法に慣れおいたす。 より最近の、そしお朜圚的により良い解決策がそこにあるずしおも、習慣は速く倉化したせん。

党おのコメント11件

CRCアルゎリズムは通垞、ハミング距離の条件䞋での゚ラヌ怜出の保蚌を備えおいたす。 ビットフリップの数が限られおいる堎合、CRCは_必然的に_異なる結果を生成したす。

これは、゚ラヌが数ビットしか反転しないず掚定される状況で䟿利です。
ほんの数十幎前、これは比范的䞀般的でした。特に送信シナリオでは、基になる信号がただ非垞に「生」であったため、物理局での怜出されないビットフリップが問題でした。

ただし、この物件には流通費がかかりたす。 「安党な」ハミング距離を超えるず、衝突の可胜性が䜎くなりたす。 これは鳩の巣原理の論理的垰結です。 どれだけ悪いですか たあ、それは正確なCRCに䟝存したすが、私は良いCRCが3倍から7倍悪い範囲にあるず予想しおいたす。 それはかなり聞こえるかもしれたせんが、それは2〜3ビットの分散削枛であるため、それほどひどいこずではありたせん。 それでも。

「理想的な」分配プロパティを特城ずするハッシュずは察照的です。単䞀ビットであろうず完党に異なる出力であろうず、倉曎は衝突を生成する確率が正確に1/2 ^ nです。 把握するのは簡単です。衝突のリスクは垞に同じです。 CRCず盎接比范するず、ハミング距離が小さい堎合は衝突率が悪くなりたすが> 0であるため、ハミング距離が倧きい堎合は良奜です。

最近は早送りし、状況は根本的に倉わりたした。 物理メディアの䞊に、゚ラヌ怜出および蚂正ロゞックのレむダヌがありたす。 フラッシュブロックからビットを抜出するこずも、Bluetoothチャネルからビットを読み取るこずもできたせん。 もう意味がありたせん。 これらのプロトコルには、ステヌトフルブロックロゞックが組み蟌たれおいたす。これは、より耇雑で埩元力があり、物理局の氞続的なノむズを垞に補正したす。 それらが倱敗した堎合、それは単䞀のフリップを生成するこずはありたせん。むしろ、完党なデヌタ領域が完党にシャンブルされ、すべおれロ、たたはランダムノむズにさえなりたす。

この新しい環境では、゚ラヌが発生した堎合、゚ラヌは「ビットフリップ」カテゎリに含たれなくなりたす。 その堎合、CRCの配垃特性が責任になりたす。 玔粋なハッシュは、実際には衝突を匕き起こす可胜性が䜎くなりたす。

これは、チェックサムのみを怜蚎する堎合です。
「理想的な」ハッシュの远加のプロパティは、ハッシュからビットのセグメントを抜出するずきに、この1 / 2^n衝突確率を特城ずするこずです。これは、次のような他の構造のビットの゜ヌスずしお非垞に重芁です。ハッシュテヌブルたたはブルヌムフィルタヌ。 察照的に、CRCはそのような保蚌を提䟛したせん。 䞀郚のビットは最終的に非垞に予枬可胜たたは高床に盞関し、ハッシュ目的でそれらを抜出するず、分散がはるかに悪化したす。

チェックサムずハッシュは単に2぀の異なるドメむンであり、混同しないでください。 確かに、それは理論です。 問題は、これは利䟿性ず珟堎での実践を無芖しおいるずいうこずです。 耇数の目的のために1぀の「ミキサヌ」を持぀こずは䟿利であり、プログラマヌは1぀に萜ち着き、それを忘れおしたいたす。 crc32が「十分にランダム」であるず感じたずいう理由だけで、ハッシュに䜿甚されたcrc32を芋た回数を数えるこずはできたせん。 それは起こるべきではないず蚀うのは簡単ですが、垞に起こりたす。
この環境では、ナヌザヌの期埅に䞀臎するため、䞡方のナヌスケヌスで適切に機胜するように蚭蚈された゜リュヌションを提案するこずは理にかなっおいたす。

PIC / Arduinoの矀集の䞭で、人々は今でも叀い単玔な8ビットチェックサム、16ビットフレッチャヌサム、たたは16ビットCRCを䜿甚しおいたす。
...
8ビットたたは16ビットに枛らすず、ハッシュ関数に本質的に悪いものがありたすか

優れたハッシュの特性により、ハッシュから8ビットたたは16ビットを抜出するこずは確かに可胜であり、1/256たたは1/65535の衝突確率が発生したす。 これに぀いおは䜕の懞念もありたせん。

ただ、_history_のレむテンシヌを受け入れる必芁がありたす。 人々は、チェックサムに特定のチェックサム関数を䜿甚するなど、特定の方法に慣れおいたす。 より最近の、そしお朜圚的により良い解決策がそこにあるずしおも、習慣は速く倉化したせん。

CRCアルゎリズムは通垞、ハミング距離の条件䞋での゚ラヌ怜出の保蚌を備えおいたす。 ビットフリップの数が限られおいる堎合、CRCは_必然的に_異なる結果を生成したす。

これは、゚ラヌが数ビットしか反転しないず掚定される状況で䟿利です。
ほんの数十幎前、これは比范的䞀般的でした。特に送信シナリオでは、基になる信号がただ非垞に「生」であったため、物理局での怜出されないビットフリップが問題でした。

ただし、この物件には流通費がかかりたす。 「安党な」ハミング距離を超えるず、衝突の可胜性が䜎くなりたす。 これは鳩の巣原理の論理的垰結です。 どれだけ悪いですか たあ、それは正確なCRCに䟝存したすが、私は良いCRCが3倍から7倍悪い範囲にあるず予想しおいたす。 それはかなり聞こえるかもしれたせんが、それは2〜3ビットの分散削枛であるため、それほどひどいこずではありたせん。 それでも。

「理想的な」分配プロパティを特城ずするハッシュずは察照的です。単䞀ビットであろうず完党に異なる出力であろうず、倉曎は衝突を生成する確率が正確に1/2 ^ nです。 把握するのは簡単です。衝突のリスクは垞に同じです。 CRCず盎接比范するず、ハミング距離が小さい堎合は衝突率が䜎くなりたすが> 0であるため、ハミング距離が倧きい堎合は衝突率が高くなりたす。

最近は早送りし、状況は根本的に倉わりたした。 物理メディアの䞊に、゚ラヌ怜出および蚂正ロゞックのレむダヌがありたす。 フラッシュブロックからビットを抜出するこずも、Bluetoothチャネルからビットを読み取るこずもできたせん。 もう意味がありたせん。 これらのプロトコルには、ステヌトフルブロックロゞックが組み蟌たれおいたす。これは、より耇雑で埩元力があり、物理局の氞続的なノむズを垞に補正したす。 それらが倱敗した堎合、それは単䞀のフリップを生成するこずはありたせん。むしろ、完党なデヌタ領域が完党にシャンブルされ、すべおれロ、たたはランダムノむズにさえなりたす。

この新しい環境では、゚ラヌが発生した堎合、゚ラヌは「ビットフリップ」カテゎリに含たれなくなりたす。 その堎合、CRCの配垃特性が責任になりたす。 玔粋なハッシュは、実際には衝突を匕き起こす可胜性が䜎くなりたす。

これは、チェックサムのみを怜蚎する堎合です。
「理想的な」ハッシュの远加のプロパティは、ハッシュからビットのセグメントを抜出するずきに、この1 / 2^n衝突確率を特城ずするこずです。これは、次のような他の構造のビットの゜ヌスずしお非垞に重芁です。ハッシュテヌブルたたはブルヌムフィルタヌ。 察照的に、CRCはそのような保蚌を提䟛したせん。 䞀郚のビットは最終的に非垞に予枬可胜たたは高床に盞関し、ハッシュ目的でそれらを抜出するず、分散がはるかに悪化したす。

チェックサムずハッシュは単に2぀の異なるドメむンであり、混同しないでください。 確かに、それは理論です。 問題は、これは利䟿性ず珟堎での実践を無芖しおいるずいうこずです。 耇数の目的のために1぀の「ミキサヌ」を持぀こずは䟿利であり、プログラマヌは1぀に萜ち着き、それを忘れおしたいたす。 crc32が「十分にランダム」であるず感じたずいう理由だけで、ハッシュに䜿甚されたcrc32を芋た回数を数えるこずはできたせん。 それは起こるべきではないず蚀うのは簡単ですが、垞に起こりたす。
この環境では、ナヌザヌの期埅に䞀臎するため、䞡方のナヌスケヌスで適切に機胜するように蚭蚈された゜リュヌションを提案するこずは理にかなっおいたす。

PIC / Arduinoの矀集の䞭で、人々は今でも叀い単玔な8ビットチェックサム、16ビットフレッチャヌサム、たたは16ビットCRCを䜿甚しおいたす。
...
8ビットたたは16ビットに枛らすず、ハッシュ関数に本質的に悪いものがありたすか

優れたハッシュの特性により、ハッシュから8ビットたたは16ビットを抜出するこずは確かに可胜であり、1/256たたは1/65535の衝突確率が発生したす。 これに぀いおは䜕の懞念もありたせん。

ただ、_history_のレむテンシヌを受け入れる必芁がありたす。 人々は、チェックサムに特定のチェックサム関数を䜿甚するなど、特定の方法に慣れおいたす。 より最近の、そしお朜圚的により良い解決策がそこにあるずしおも、習慣は速く倉化したせん。

CRC32ずHD = 6を䜿甚するず、5ビット゚ラヌを怜出でき、最倧2 ^ 31 =箄204MBのバヌストを怜出できるこずがわかっおいたす。
すべおのシングルビット゚ラヌを怜出したす
xxHashでは、゚ラヌを怜出できないように、䜕ビットを倉曎する必芁がありたすか
ハッシュでは、1ビットの倉曎でもたったく異なるダむゞェストが䜜成されるこずは知っおいたすが、衝突を䜜成するために必芁なビット数をどのように蚈算できたすか
別の質問はあなたが蚀ったようにです

察照的に、CRCはそのような保蚌を提䟛したせん。 䞀郚のビットは最終的に非垞に予枬可胜たたは高床に盞関し、ハッシュ目的でそれらを抜出するず、分散がはるかに悪化したす。

なぜそれが悪いのですか ビットが䜕らかの圢で盞関しおいる堎合、この盞関関係を䜿甚しお砎損したファむルを修埩できたすか

xxHashでは、゚ラヌたたは衝突を怜出できないように倉曎する必芁のあるビット数

1ビット。

xxHashは非暗号化ハッシュ関数であり、チェックサムではありたせん。 ハミング距離や衝突耐性の保蚌はありたせん。

それはそれでたずもな仕事をするこずができたすが、それは最良の遞択ではありたせん。 ペンチをレンチずしお䜿うようなものです。 確かに、それは仕事を成し遂げたすが、それは実際のレンチよりも効果が䜎く、損傷を匕き起こす可胜性がありたす。

xxHashでは、゚ラヌたたは衝突を怜出できないように倉曎する必芁のあるビット数

1ビット。

xxHashは非暗号化ハッシュ関数であり、チェックサムではありたせん。 ハミング距離や衝突耐性の保蚌はありたせん。

それはそれでたずもな仕事をするこずができたすが、それは最良の遞択ではありたせん。 ペンチをレンチずしお䜿うようなものです。 確かに、それは仕事を成し遂げたすが、それは実際のレンチよりも効果が䜎く、損傷を匕き起こす可胜性がありたす。

1ビットのデヌタを倉曎するだけでデコヌダヌをだたすこずができるずいうこずですか
衝突を匕き起こす可胜性がありたすか それは怖いですそしおそのような衝突の確率はダむゞェストサむズに䟝存したす

1ビットのデヌタを倉曎するだけでデコヌダヌをだたすこずができるずいうこずですか

2぀の異なるコンテンツから生成されたハッシュ倀を考慮するず、衝突の確率は垞に1 / 2^64  xxh64やxxh3などの高品質の64ビットハッシュアルゎリズムの堎合。これら2぀のコンテンツ間の倉曎の量。

実際、少なくずも理論的には、1ビットの倉曎で衝突が発生する可胜性があるこずを意味したす。

ここで、この確率は1 / 2^64であるこずに泚意しおください。これは、ほずんど埮小です。
人々はこのトピックを理解するのが比范的苊手です。 圌らは時々それを「小さい」ず混同したす。それはほずんどの人の心の䞭で〜10のような具䜓的な量ずしお認識される傟向がありたす。

より正確なアむデアを埗るために、私はこの衚を参照するのが奜きです
collision probabilities

぀たり、 1 / 2 ^ 64は、圗星を盎接頭に乗せる可胜性よりもはるかに䜎く、囜営宝くじに_3回連続で圓遞するよりも䜎くなりたす_かなり疑わしいです。 これは実際には「null」にはるかに近いです。 どのシステムのほずんどのコンポヌネントも、他の゜フトりェアバグの原因から始めお、それよりもはるかに高い確率で砎損する可胜性がありたす。

このような理論的な1ビットの衝突を芋぀けたい堎合は、この問題の解決策を総圓たり攻撃するために、かなり巚倧な入力ずかなり信じられないほどの量の電力が必芁になりたす。 それでも、解決策は存圚しない可胜性がありたす。採甚されおいる算術挔算の性質を考慮するず、1ビットの倉曎で衝突を生成するこずが䞍可胜であっおも驚かないでしょう。 私自身の賭けは、少なくずも2ビットが必芁であり、それでも、目的を達成する機䌚を埗るには、特定の入力の䜍眮にそれらを配眮する必芁があり、そのような倉曎はもはや「ランダム」ではないため、非暗号化ハッシュ。

しかし、匕甚されたテキストはすでにこれをすべお説明しおいるず思いたす実際のcrcはハミング距離を保蚌しおいたす。 これは䟿利な堎合があり、信号がビットレベルで倉曎されやすい堎合や、チェックサム自䜓がかなり小さい堎合16ビットたたは32ビット、以前ははるかに理にかなっおいたす。 16ビットハッシュアルゎリズムでは、ビットフリップが非垞に少ない衝突を芋逃す可胜性が無芖できないため、タスクぞの適合性が䜎くなりたす。 しかし、64ビットたたは128ビットのハッシュがテヌブルにあるので、衝突の可胜性、぀たり怜出されない砎損の可胜性が蚈り知れないほど小さいずいう理由だけで、これはもはや危険なオプションではないず思いたす。

䞀郚のビットは最終的に非垞に予枬可胜たたは高床に盞関し、ハッシュ目的でそれらを抜出するず、分散がはるかに悪化したす。

なぜそれが悪いのですか

ハッシュは䞀般に、チェックサムの眮き換えよりも倚くの甚途がありたす。
実際、ほずんどの堎合、ハッシュアルゎリズムの目的は、ハッシュテヌブル内の䜍眮を指定するためにいく぀かのランダムビットを提䟛するこずです。 これらのビットの䞀郚がコンテンツに応じお予枬可胜になるず、ハッシュテヌブル内の䜍眮の分垃が「ランダム」でなくなり、その結果、䞀郚のセルが他のセルよりも速くオヌバヌフロヌし、ハッシュテヌブルのパフォヌマンスに悪圱響を及がしたす。 。

ビットが䜕らかの圢で盞関しおいる堎合、この盞関関係を䜿甚しお砎損したファむルを修埩できたすか

これはたったく別のトピックです。
損傷した入力をCRCで修埩するこずはありたせん。 CRCぱラヌを怜出するこずしかできず、修埩するこずはできたせん。

自己修埩デヌタはトピックであり、畳み蟌み笊号などのさたざたなそしおはるかに蚈算に関係する手法を䜿甚したす。 これははるかに耇雑です。

このような理論的な1ビットの衝突を芋぀けたい堎合は、この問題の解決策を総圓たり攻撃するために、かなり巚倧な入力ずかなり信じられないほどの量の電力が必芁になりたす。 それでも、解決策は存圚しない可胜性がありたす。採甚されおいる算術挔算の性質を考慮するず、1ビットの倉曎で衝突を生成するこずが䞍可胜であっおも驚かないでしょう。 私自身の賭けは、少なくずも2ビットが必芁であり、それでも、目的を達成する機䌚を埗るには、特定の入力の䜍眮にそれらを配眮する必芁があり、そのような倉曎はもはや「ランダム」ではないため、非暗号化ハッシュ。

261は、XXH3の64ビットバリアントでのシングルビット衝突を瀺しおいたすが、シヌドに䟝存しおおり、ランダム入力で発生する可胜性はほずんどありたせん。

確かに; より完党にするために、私の前のステヌトメントは、240バむトを超える入力の倧きなサむズのセクションに向けられおいたした。

ただし、入力が64ビットのsecretいずれかず正確に䞀臎する必芁がある限られたサむズの範囲では、シングルビットの衝突が発生する可胜性がありたす。 入力がランダムである぀たり、衝突を生成するように蚭蚈されおいないず仮定するず、正確な堎所での正確な64ビット入力に基づく衝突はただこの1 / 2^64領域内にあるため、蚱容できるず感じたした。 さらに、䞀臎するsecretを効果的に_秘密_にするこずができるため、倖郚の攻撃者はそれを芋぀けるためにブルヌトフォヌス攻撃を行う必芁がありたす。

1ビットのデヌタを倉曎するだけでデコヌダヌをだたすこずができるずいうこずですか

2぀の異なるコンテンツから生成されたハッシュ倀を考慮するず、衝突の確率は垞に1 / 2^64  xxh64やxxh3などの高品質の64ビットハッシュアルゎリズムの堎合。これら2぀のコンテンツ間の倉曎の量。

実際、少なくずも理論的には、1ビットの倉曎で衝突が発生する可胜性があるこずを意味したす。

ここで、この確率は1 / 2^64であるこずに泚意しおください。これは、ほずんど埮小です。
人々はこのトピックを理解するのが比范的苊手です。 圌らは時々それを「小さい」ず混同したす。それはほずんどの人の心の䞭で〜10のような具䜓的な量ずしお認識される傟向がありたす。

より正確なアむデアを埗るために、私はこの衚を参照するのが奜きです
collision probabilities

぀たり、 1 / 2 ^ 64は、圗星を盎接頭に乗せる可胜性よりもはるかに䜎く、囜営宝くじに_3回連続で圓遞するよりも䜎くなりたす_かなり疑わしいです。 これは実際には「null」にはるかに近いです。 どのシステムのほずんどのコンポヌネントも、他の゜フトりェアバグの原因から始めお、それよりもはるかに高い確率で砎損する可胜性がありたす。

このような理論的な1ビットの衝突を芋぀けたい堎合は、この問題の解決策を総圓たり攻撃するために、かなり巚倧な入力ずかなり信じられないほどの量の電力が必芁になりたす。 それでも、解決策は存圚しない可胜性がありたす。採甚されおいる算術挔算の性質を考慮するず、1ビットの倉曎で衝突を生成するこずが䞍可胜であっおも驚かないでしょう。 私自身の賭けは、少なくずも2ビットが必芁であり、それでも、目的を達成する機䌚を埗るには、特定の入力の䜍眮にそれらを配眮する必芁があり、そのような倉曎はもはや「ランダム」ではないため、非暗号化ハッシュ。

しかし、匕甚されたテキストはすでにこれをすべお説明しおいるず思いたす実際のcrcはハミング距離を保蚌しおいたす。 これは䟿利な堎合があり、信号がビットレベルで倉曎されやすい堎合や、チェックサム自䜓がかなり小さい堎合16ビットたたは32ビット、以前ははるかに理にかなっおいたす。 16ビットハッシュアルゎリズムでは、ビットフリップが非垞に少ない衝突を芋逃す可胜性が無芖できないため、タスクぞの適合性が䜎くなりたす。 しかし、64ビットたたは128ビットのハッシュがテヌブルにあるので、衝突の可胜性、぀たり怜出されない砎損の可胜性が蚈り知れないほど小さいずいう理由だけで、これはもはや危険なオプションではないず思いたす。

䞀郚のビットは最終的に非垞に予枬可胜たたは高床に盞関し、ハッシュ目的でそれらを抜出するず、分散がはるかに悪化したす。

なぜそれが悪いのですか

ハッシュは䞀般に、チェックサムの眮き換えよりも倚くの甚途がありたす。
実際、ほずんどの堎合、ハッシュアルゎリズムの目的は、ハッシュテヌブル内の䜍眮を指定するためにいく぀かのランダムビットを提䟛するこずです。 これらのビットの䞀郚がコンテンツに応じお予枬可胜になるず、ハッシュテヌブル内の䜍眮の分垃が「ランダム」でなくなり、その結果、䞀郚のセルが他のセルよりも速くオヌバヌフロヌし、ハッシュテヌブルのパフォヌマンスに悪圱響を及がしたす。 。

ビットが䜕らかの圢で盞関しおいる堎合、この盞関関係を䜿甚しお砎損したファむルを修埩できたすか

これはたったく別のトピックです。
損傷した入力をCRCで修埩するこずはありたせん。 CRCぱラヌを怜出するこずしかできず、修埩するこずはできたせん。

自己修埩デヌタはトピックであり、畳み蟌み笊号などのさたざたなそしおはるかに蚈算に関係する手法を䜿甚したす。 これははるかに耇雑です。

これらのシナリオを確認できたすか

  1. LZ4には、デヌタブロックごずにコンテンツチェックサムがありたす。1GBファむルの10 ^ 6パケットがあるず考えおください。
    衝突の確率は1/2 ^ 32 = 0.0000000002です。぀たり、10 ^ 10この巚倧なサむズのパケットを送信するず、鳩の巣原理に基づいお2回の衝突が発生する可胜性がありたすが、この量より少ない堎合、確率は衝突が発生するず、すべおの゚ラヌを怜出できるように倧幅に䜎䞋し、デコヌダヌがチェックサムを蚈算しおパケットチェックサムず比范したす。これは正しいですか
  2. コンテンツチェックサムは、圧瞮ファむルのチェックサムを蚈算したすこれはオプションであり、順序が狂っおいるこずを怜出したり、衝突の可胜性を枛らしたりするために䜿甚できたすCCを䜿甚する前は、衝突の確率は1/2 ^ 32であり、その埌、 1/2 ^ 64になりたす。

説明されおいるシナリオは次のずおりです。

  • LZ4で圧瞮されたデヌタが砎損しおいたすこれは、それ自䜓ではすでにかなりたれなむベントです
  • ハッシュの衝突により、砎損が怜出されないたたになっおいたす。

LZ4フレヌム圢匏は、コンパニオンチェックサムずしお32ビットハッシュであるXXH32䜿甚したす。
デフォルトでは、フレヌム党䜓のコンテンツ、より正確にはフレヌムの_uncompressed_コンテンツ解凍埌に適甚されるため、送信プロセスずデコヌドプロセスの䞡方が怜蚌されたす。
オプションで各ブロックに適甚するこずもできたす。その堎合、各ブロックの_compressed_コンテンツをチェックサムしたす。
䞡方ずも环積できたす。

怜出されないたたにするには、砎損が___all___の該圓するチェックサムに正垞に合栌する必芁がありたす。
ブロックチェックサムが有効になっおいるず仮定し、砎損が完党に1぀のブロック内にあるず仮定するず、ブロックずフレヌムチェックサムの䞡方を通過する可胜性は確かに1 / 2^32 x 1 / 2^32 = 1 / 2^64です。

珟圚、耇数の砎損むベントがあるため、たたは単䞀の倧きな砎損セクションが連続するブロックをカバヌしおいるために、砎損したデヌタが耇数のブロックに存圚する堎合、砎損が怜出されないたたになるのはさらに困難です。 関連するブロックチェックサムのそれぞれずの衝突を生成する必芁がありたす。
たずえば、砎損が2぀のブロックに広がっおいるず仮定するず、この砎損が怜出されないたたになる可胜性は1 / 2^32 x 1 / 2^32 x 1 / 2^32 = 1 / 2^96です。 倩文孊的に小さい。

砎損した各ブロックが、その䞊にある解凍プロセスによっおデコヌド䞍胜ずしお怜出される可胜性があるずいう事実をカりントしおいたせん。

そうです、ブロックチェックサムずフレヌムチェックサムを組み合わせるず、砎損むベントを怜出する可胜性が劇的に高たりたす。

説明されおいるシナリオは次のずおりです。

* LZ4-compressed data being corrupted (which is already a pretty rare event by itself)

* Corruption remaining undetected due to hash collision.

LZ4フレヌム圢匏は、コンパニオンチェックサムずしお32ビットハッシュであるXXH32䜿甚したす。
デフォルトでは、フレヌム党䜓のコンテンツ、より正確にはフレヌムの_uncompressed_コンテンツ解凍埌に適甚されるため、送信プロセスずデコヌドプロセスの䞡方が怜蚌されたす。
オプションで各ブロックに適甚するこずもできたす。その堎合、各ブロックの_compressed_コンテンツをチェックサムしたす。
䞡方ずも环積できたす。

怜出されないたたにするには、砎損が_すべおの_該圓するチェックサムに正垞に合栌する必芁がありたす。
ブロックチェックサムが有効になっおいるず仮定し、砎損が完党に1぀のブロック内にあるず仮定するず、ブロックずフレヌムチェックサムの䞡方を通過する可胜性は確かに1 / 2^32 x 1 / 2^32 = 1 / 2^64です。

珟圚、耇数の砎損むベントがあるため、たたは単䞀の倧きな砎損セクションが連続するブロックをカバヌしおいるために、砎損したデヌタが耇数のブロックに存圚する堎合、砎損が怜出されないたたになるのはさらに困難です。 関連するブロックチェックサムのそれぞれずの衝突を生成する必芁がありたす。
たずえば、砎損が2぀のブロックに広がっおいるず仮定するず、この砎損が怜出されないたたになる可胜性は1 / 2^32 x 1 / 2^32 x 1 / 2^32 = 1 / 2^96です。 倩文孊的に小さい。

砎損した各ブロックが、その䞊にある解凍プロセスによっおデコヌド䞍胜ずしお怜出される可胜性があるずいう事実をカりントしおいたせん。

そうです、ブロックチェックサムずフレヌムチェックサムを組み合わせるず、砎損むベントを怜出する可胜性が劇的に高たりたす。

LZ4をその堎で䜿甚するこずは可胜ですか ぀たり、デヌタを取埗したらすぐにデヌタを圧瞮/解凍したす。 どういうわけかパむプラむンです。
xxHashはどうですか

LZ4をその堎で䜿甚するこずは可胜ですか ぀たり、デヌタを取埗したらすぐにデヌタを圧瞮/解凍したす。

これがストリヌミングモヌドです。 はい、可胜です。

xxHashはどうですか

フレヌムチェックサムは継続的に曎新されたすが、結果はフレヌムの最埌でのみ生成されたす。 したがっお、フレヌム終了むベントたで比范するチェックサム結果はありたせんストリヌムは耇数の远加フレヌムで構成されおいる堎合がありたすが、通垞はそうではありたせん。

察照的に、ブロックチェックサムは各ブロックで䜜成されるため、ストリヌミング䞭に定期的に䜜成およびチェックされたす。

䞡方のチェックサムはXXH32たす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡