MD5 vs CRC32: welke is beter voor algemeen gebruik?

Onlangs las ik ergens dat, hoewel zowel CRC32 als MD5 voldoende uniform en stabiel zijn, CRC32 efficiënter is dan MD5. MD5 lijkt een veelgebruikt hash-algoritme, maar als CRC32 sneller/meer geheugenefficiënt is, waarom zou u dat dan niet gebruiken?


Antwoord 1, autoriteit 100%

MD5is een one-way-hash-algoritme. One-way-hash-algoritmen worden vaak gebruikt in cryptografie omdat ze de eigenschap hebben (per ontwerp) dat het moeilijk is om de invoer te vinden die een specifieke hash-waarde produceerde. Het is met name moeilijk om twee verschillende ingangen te maken die dezelfde eenrichtings-hash geven. Die worden vaak gebruikt als een manier om aan te tonen dat een hoeveelheid gegevens niet opzettelijk is gewijzigd sinds de hash-code is geproduceerd. Aangezien de MD5 een one-way-hashalgoritme is, ligt de nadruk op veiligheid boven snelheid. Helaas wordt MD5 nu als onveilig beschouwd.

CRC32is ontworpen om onbedoelde wijzigingen in gegevens te detecteren en wordt vaak gebruikt in netwerken en opslagapparaten. Het doel van dit algoritme is niet om te beschermen tegen opzettelijke wijzigingen, maar eerder om ongelukken zoals netwerkfouten en schijfschrijffouten enz. op te vangen. De nadruk van dit algoritme ligt meer op snelheid dan op beveiliging.


Antwoord 2, autoriteit 33%

Van Wikipedia’s artikel over MD5(nadruk van mij):

MD5 is een veelgebruikte cryptografische hashfunctie

Nu CRC32:

CRC is een foutdetectiecode

Dus, zoals je kunt zien, is CRC32 geen hash-algoritme. Dat betekent dat je het niet voor hashing moet gebruiken, omdat het daar niet voor is gebouwd.

En ik denk dat het weinig zin heeft om over algemeen gebruik te praten, omdat vergelijkbare algoritmen voor verschillende doeleinden worden gebruikt, elk met aanzienlijk verschillende vereisten. Er is niet één algoritme dat het beste is voor algemeen gebruik, in plaats daarvan moet u het algoritme kiezen dat het meest geschikt is voor uw specifieke gebruik.


Antwoord 3, autoriteit 16%

Het hangt af van je doelen. Hier zijn enkele voorbeelden van wat gedaan kan worden met CRC32 versus MD5:

Dubbele bestanden detecteren

Als je wilt controleren of twee bestanden hetzelfde zijn, is CRC32-controlesom de beste keuze, omdat het sneller is dan MD5. Maar wees voorzichtig: CRC vertelt u alleen betrouwbaar of de binaire bestanden verschillend zijn; het vertelt je niet of ze identiek zijn. Als je verschillende hashes krijgt voor twee bestanden, kunnen ze niet hetzelfde bestand zijn, dus je kunt ze heel snel afwijzen als duplicaten.

Wat uw sleutels ook zijn, de CRC32-controlesom zal een van de 2^32 verschillende waarden zijn. Uitgaande van willekeurige voorbeeldbestanden, is de kans op een botsing tussen de hashes van twee gegeven bestanden 1/2^32. De kans op botsingen tussen een van de N gegeven bestanden is (N – 1) / 2^32.

Schadelijke software detecteren

Als beveiliging een probleem is, zoals het downloaden van een bestand en het vergelijken van de bronhash met die van u om te zien of de binaire bestanden niet beschadigd zijn, dan is CRC een slechte optie. Dit komt omdat aanvallers malware kunnen maken die dezelfde CRC-controlesom hebben. In dit geval is een MD5-digest veiliger — CRC is niet gemaakt voor beveiliging. Het is veel waarschijnlijker dat twee verschillende binaire bestanden dezelfde CRC-controlesom hebben dan dezelfde MD5-digest.

Beveiligen van wachtwoorden voor gebruikersauthenticatie

Synchrone (eenrichtings)versleuteling is meestal eenvoudiger, sneller en veiliger dan asynchrone (tweerichtings)versleuteling, dus het is een veelgebruikte methode om wachtwoorden op te slaan. In principe wordt het wachtwoord gecombineerd met andere gegevens (salts), waarna de hash wordt uitgevoerd op al deze gecombineerde gegevens. Willekeurige salto’s verkleinen de kans dat twee wachtwoorden hetzelfde zijn aanzienlijk. Standaard heeft hetzelfde wachtwoord dezelfde hash voor de meeste algoritmen, dus u moet uw eigen willekeur toevoegen. Natuurlijk moet het zout extern worden opgeslagen.

Om een ​​gebruiker in te loggen, neem je gewoon de informatie die ze je geven wanneer ze inloggen. Je gebruikt hun gebruikersnaam om hun salt uit een database te halen. Vervolgens combineer je deze salt met het wachtwoord van de gebruiker om een ​​nieuwe hash te krijgen. Als het overeenkomt met die in de database, is hun login succesvol. Aangezien u deze wachtwoorden opslaat, moeten ze ZEER veilig zijn, wat betekent dat er geen sprake is van een CRC-controlesom.

Cryptografische samenvattingen zijn duurder om te berekenen dan CRC-controlesommen. Ook zijn betere hashes zoals sha256 veiliger, maar langzamer voor hashen en nemen ze meer databaseruimte in beslag (hun hashes zijn langer).


Antwoord 4, autoriteit 9%

Een groot verschil tussen CRC32 en MD5 is dat het meestal gemakkelijk is om een ​​CRC32-controlesom te kiezen en vervolgens een bericht te bedenken dat hasht naar die controlesom, zelfs als er beperkingen zijn opgelegd aan het bericht, terwijl MD5 specifiek is ontworpen om dit soort dingen moeilijk maken (hoewel het zijn leeftijd laat zien – dit is nu mogelijk in sommige situaties).

Als u zich in een situatie bevindt waarin het mogelijk is dat een tegenstander besluit om te gaan zitten en een lading berichten met gespecificeerde CRC32-hashes te creëren, om andere berichten na te bootsen, of gewoon om een ​​hashtabel erg slecht te laten presteren omdat alles hashes dezelfde waarde, dan zou MD5 een betere optie zijn. (Nog beter, IMHO, zou HMAC-MD5 zijn met een ingetoetste waarde die uniek is voor de module die deze gebruikt en daarbuiten onbekend).


Antwoord 5, autoriteit 9%

CRC’s worden gebruikt om willekeurige fouten te voorkomen, bijvoorbeeld bij gegevensoverdracht.

Cryptografische hashfuncties zijn ontworpen om te voorkomen dat intelligente tegenstanders het bericht vervalsen, hoewel MD5 in dat opzicht is geschonden.


Antwoord 6, autoriteit 7%

U moet MD5 gebruiken, die 128 bits lang is.
CRC32 is slechts 32 bits lang en het doel is om fouten te detecteren en niet om dingen te hashen.
Als je alleen een 32-bits hashfunctie nodig hebt, kun je 32 bits kiezen die worden geretourneerd door MD5, de LSB’s/MSB’s/Whatever.


Antwoord 7, autoriteit 5%

De belangrijkste reden waarom CRC32 (of CRC8, of CRC16) voor welk doel dan ook wordt gebruikt, is dat het goedkoop in hardwarekan worden geïmplementeerd als middel om “willekeurige” beschadiging van gegevens te detecteren. Zelfs in software-implementaties kan het nuttig zijn als middel om willekeurige corruptie van gegevens door hardwareoorzaken (zoals een ruis op de communicatielijn of onbetrouwbare flash-media) te detecteren. Het is niet bestand tegen manipulatie, en het is over het algemeen ook niet geschikt om te testen of twee willekeurige bestanden waarschijnlijk hetzelfde zijn: als elk stuk gegevens in het bestand onmiddellijk wordt gevolgd door een CRC32 van dat stuk (sommige gegevensindelingen doen dat), chunk heeft hetzelfde effect op de CRC van het totale bestand als een chunk van alle nul bytes, ongeacht welke gegevens in die chunk zijn opgeslagen.

Als iemand de middelen heeft om een ​​CRC32 snel te berekenen, kan het handig zijn in combinatie met andere checksum- of hash-methoden, als verschillende bestanden met identieke CRC’s waarschijnlijk zouden verschillen in een van de andere hashes en vice versa, maar op veel machines zijn andere checksum- of hash-methoden waarschijnlijk gemakkelijker te berekenen in verhouding tot de hoeveelheid bescherming die ze bieden.


Antwoord 8, autoriteit 5%

In feite is CRC32 niet snellerdan MD5.

Neem een ​​kijkje op: https://3v4l.org/2MAUr

Dat php-script voert verschillende hash-algoritmen uit en meet de tijd die wordt besteed aan het berekenen van de hashes door elk algoritme. Het laat zien dat MD5 over het algemeen het snelste hash-algoritme is dat er is. En het laat zien dat zelfs SHA1 in de meeste testgevallen sneller is dan MD5.

Dus hoe dan ook, als je wat snelle foutdetectie wilt doen, of wilt zoeken naar willekeurige veranderingen… zou ik altijd adviseren om voor MD5 te gaan, omdat het gewoon alles doet.


Antwoord 9, autoriteit 2%

De ene man komt vaak voor, is de andere man. Vaak varieert afhankelijk van het veld waarin u werkt.

Als je heel snelle verzendingen doet of hashcodes uitwerkt voor kleine items, dan zijn CRC’s beter omdat ze een stuk sneller zijn en de kans dat je dezelfde 16 of 32-bits CRC krijgt voor verkeerde gegevens klein is.

>

Als het megabytes aan gegevens is, bijvoorbeeld een linux-iso, dan zou je een paar megabytes kunnen verliezen en toch met dezelfde CRC eindigen. Niet zo waarschijnlijk met MD5. Om die reden wordt MD5 normaal gesproken gebruikt voor enorme transfers. Het is langzamer maar betrouwbaarder.

Dus eigenlijk, als je één grote uitzending gaat doen en aan het eind controleert of je het juiste resultaat hebt, gebruik dan MD5. Als je in kleine stukjes gaat zenden, gebruik dan CRC.


Antwoord 10, autoriteit 2%

Ik zou zeggen als je niet weet wat je moet kiezen, ga dan voor md5.

Het is minder waarschijnlijk dat u hoofdpijn krijgt.

Other episodes