Welk controlesomalgoritme moet ik gebruiken?

Ik ben een systeem aan het bouwen dat moet kunnen vinden of blobs of bytes zijn bijgewerkt.
In plaats van de hele blob op te slaan (ze kunnen tot 5 MB groot zijn), denk ik dat ik er een controlesom van moet berekenen, deze moet opslaan en een beetje later dezelfde controlesom moet berekenen om te zien of de blob is bijgewerkt.

Het doel is om het volgende te minimaliseren (in die volgorde):

  • grootte van de controlesom
  • tijd om te berekenen
  • waarschijnlijkheid van botsingen (2 identieke controlesommen, zelfs als de inhoud is gewijzigd).

Het is acceptabel dat ons systeem niet meer dan 1/1.000.000 botsingen heeft. De zorg is niet de beveiliging, maar gewoon update/foutdetectie, dus zeldzame botsingen zijn oké. (Daarom zet ik het als laatste in de dingen om te minimaliseren).

Bovendien kunnen we de klodders tekst niet zelf wijzigen.

Natuurlijk komen md5, crcof sha1in me op, en als ik een snelle oplossing wilde, zou ik ervoor gaan . Ik ben echter meer dan een snelle oplossing op zoek naar wat zou kunnen zijn een vergelijking van verschillende methoden en de voor- en nadelen.


Antwoord 1, autoriteit 100%

Ik raad je aan om deze SO te bekijken pagina, CRC versus MD5/SHA1.
Snelheid en botsingen worden besproken in deze andere thread.
En zoals altijd is Wikipediaje vriend.

Als ik zou moeten kiezen, is er een belangrijke vraag om te beantwoorden: wil je dat er in ieder geval geen botsing is – of in ieder geval dat de kans zo klein is dat het dichtbij de kans is dat de Maan binnen 5 minuten met de aarde in botsing komt?

Zo ja, kies dan de SHA-familie.
In jouw geval zou ik de manier veranderen waarop de updatecontrolewordt uitgevoerd.
Een oplopend nummer kan bijvoorbeeld worden gekoppeld aan de blob en worden verzonden in plaats van de hash, het verzoek voor updateis vereist als het nummer aan de andere kant anders is kant. De kans op een botsing gaat in dit geval van ~10^-18 tot ~0 (in principe 0 + bug-kans)…

Bewerkenvolgende opmerkingen

Dit algoritme gevonden, Adler-32, dat goed is voor lange berichten (MB) met een CRC van 32 bits, d.w.z. ongeveer ~1/10^9 (MD5 is 128 bits lang).
Het is snel te berekenen.
Adler-32. Er is een voorbeeld (link) onderaan.


Antwoord 2, autoriteit 7%

Blake2 is de snelste hash-functie die je kunt gebruiken en die wordt voornamelijk gebruikt:

BLAKE2 is niet alleen sneller dan de andere goede hashfuncties, het is ook
zelfs sneller dan MD5 of SHA-1
Bron

De winnaar van de SHA-3-wedstrijd was het Keccak-algoritme, maar het heeft nog geen populaire implementatie die niet standaard wordt overgenomen in GNU/Linux-distributies. In plaats daarvan is Blake2, dat een SHA-3-wedstrijdkandidaat was, sneller dan Keccak en maakt het deel uit van GNU coreutils. Dus voor je GNU/Linux-distributie kun je b2sumgebruiken om het Blake2 hash-algoritme te gebruiken.

Other episodes