MD5 vs SHA-1 vs SHA-2 - Hvilken er den mest sikre krypteringshash og hvordan man kontrollerer dem

Hvad er en hash-funktion?

En hash-funktion tager en inputværdi (for eksempel en streng) og returnerer en værdi med fast længde. En ideel hash-funktion har følgende egenskaber:

  • det er meget hurtigt
  • det kan returnere et enormt udvalg af hash-værdier
  • det genererer en unik hash til hver unik input (ingen kollisioner)
  • det genererer forskellige hash-værdier til lignende inputværdier
  • genererede hash-værdier har ikke noget synligt mønster i deres distribution

Der findes naturligvis ingen ideelle hash-funktion, men hver har til formål at fungere så tæt på idealet som muligt. Da (de fleste) hashfunktioner returnerer værdier med fast længde, og rækkevidden af ​​værdier derfor er begrænset, kan denne begrænsning praktisk taget ignoreres. Antallet af mulige værdier, der f.eks. Kan returneres med en 256-bit hash-funktion, er omtrent det samme som antallet af atomer i universet.

Ideelt set returnerer en hash-funktion praktisk taget ingen kollisioner - det vil sige, at ingen to forskellige input genererer den samme hash-værdi. Dette er især import til kryptografiske hash-funktioner: hash-kollisioner betragtes som en sårbarhed.

Endelig skal en hash-funktion generere uforudsigeligt forskellige hash-værdier for enhver inputværdi. Tag for eksempel følgende to meget ens sætninger:

1. "The quick brown fox." 2. "The quick brown fax." 

Vi kan sammenligne MD5-hashværdier genereret fra hver af de to sætninger:

1. 2e87284d245c2aae1c74fa4c50a74c77 2. c17b6e9b160cda0cf583e89ec7b7fc22 

To meget forskellige hashes blev genereret til to lignende sætninger, hvilket er en egenskab, der er nyttig både til validering og kryptografi. Dette er en følge af distribution: hashværdierne for alle input skal spredes jævnt og uforudsigeligt over hele spektret af mulige hashværdier.

Almindelige hash-funktioner

Der er flere hash-funktioner, der er meget udbredt. Alle blev designet af matematikere og dataloger. I løbet af yderligere forskning har nogle vist sig at have svagheder, selvom alle betragtes som gode nok til ikke-kryptografiske applikationer.

MD5

MD5-hash-funktionen producerer en 128-bit hash-værdi. Det var designet til brug i kryptografi, men sårbarheder blev opdaget i løbet af tiden, så det anbefales ikke længere til det formål. Det bruges dog stadig til databasepartitionering og beregning af kontrolsummer til validering af filoverførsler.

SHA-1

SHA står for Secure Hash Algorithm. Den første version af algoritmen var SHA-1 og blev senere efterfulgt af SHA-2 (se nedenfor).

Mens MD5 producerer en 128-bit hash, genererer SHA1 160-bit hash (20 byte). I hexadecimalt format er det et heltal på 40 cifre. Ligesom MD5 var det designet til kryptologiapplikationer, men det blev snart fundet, at det også havde sårbarheder. Fra i dag anses det ikke længere for at være mindre modstandsdygtigt over for angreb end MD5.

SHA-2

Den anden version af SHA, kaldet SHA-2, har mange varianter. Den mest anvendte er sandsynligvis SHA-256, som National Institute of Standards and Technology (NIST) anbefaler at bruge i stedet for MD5 eller SHA-1.

SHA-256-algoritmen returnerer hash-værdi på 256-bit eller 64 hexadecimale cifre. Selvom det ikke er helt perfekt, viser nuværende forskning, at det er betydeligt mere sikkert end enten MD5 eller SHA-1.

Ydelsesmæssigt er en SHA-256-hash ca. 20-30% langsommere at beregne end enten MD5- eller SHA-1-hash.

SHA-3

Denne hash-metode blev udviklet i slutningen af ​​2015 og har endnu ikke set udbredt anvendelse. Dens algoritme er ikke relateret til den, der blev brugt af sin forgænger, SHA-2.

SHA3-256 algoritmen er en variant med tilsvarende anvendelighed som den tidligere SHA-256, hvor den tidligere tager lidt længere tid at beregne end den senere.

Brug af Hash-værdier til validering

En typisk anvendelse af hash-funktioner er at udføre valideringskontrol. En hyppig anvendelse er validering af komprimerede samlinger af filer, såsom .zip eller .tar arkivfiler.

Givet et arkiv og dets forventede hashværdi (ofte benævnt kontrolsum), kan du udføre din egen hashberegning for at validere, at det arkiv, du modtog, er komplet og ukorrupt.

For eksempel kan jeg generere en MD5-kontrolsum for en tar-fil i Unix ved hjælp af følgende piped-kommandoer:

tar cf - files | tee tarfile.tar | md5sum - 

For at få MD5-hash til en fil i Windows skal du bruge kommandoen Get-FileHash PowerShell:

Get-FileHash tarfile.tar -Algorithm MD5 

Den genererede kontrolsum kan bogføres på downloadwebstedet ved siden af ​​linket til download af arkiv. Når modtageren har downloadet arkivet, kan modtageren validere, at det stødte korrekt ved at køre følgende kommando:

echo '2e87284d245c2aae1c74fa4c50a74c77 tarfile.tar' | md5sum -c 

hvor 2e87284d245c2aae1c74fa4c50a74c77 er den genererede kontrolsum, der blev bogført. En vellykket udførelse af ovenstående kommando genererer en OK-status som denne:

echo '2e87284d245c2aae1c74fa4c50a74c77 tarfile.tar' | md5sum -ctarfile.tar: OK