Introduktion om hur en hashfunktion fungerar

Uttrycket hashvärde, hashalgoritm eller hashfunktion är något som används flitigt då det talas om kryptografi och säkerhet. Exakt vad det är framgår inte lika ofta, jag vill här ge en introduktion.

Ett hashvärde är resultatet av en envägsfunktion vars uppgift är att skapa ett unikt värde baserat på viss indata. Funktionens uppgift är även att skapa olika resultat oavsett vilken indata som anges. Viktigt är däremot att samma indata alltid ger samma resultat.

I varje hashfunktion finns en algoritm som utför en matematisk beräkning på den data som skickas in. Dessa algoritmer finns i flera utföranden, där MD5 och SHA tillhör de vanligaste. Internt arbetar algoritmen med bytes, och måste därmed bearbeta dess slutliga värde för att få en textrepresentation av resultatet. Vanligast är att dessa bytes omvandlas till ett HEX-tal eller omkodat till BASE64.

Exempel (med MD5)

a ger resultatet 0CC175B9C0F1B6A831C399E269772661
aa ger istället 4124BC0A9335C27F086F24BA207A4912, dvs ett helt nytt unikt resultat.
Ordet data ger ytterligare ett helt unikt resultat; 8D777F385D3DFEC8815D20F7496026DC

Märk dock att längden på resultatet alltid är det samma oberoende av längden på den data som skickas in. Detta i kombination med hur en hashfunktion fungerar ger resultatet att ett hashvärde aldrig kan omvändas (dekrypteras) för att återskapa originalvärdet. En hash är alltså inte någon typ av kryptering. Längden på hashvärdet varierar mellan de olika hashalgoritmerna, såsom MD5, SHA1 och SHA512.

Själva hashfunktionen i sig är baserad på vetenskapligt bevisade matematiska formler, och ska därför hållas intakt och oförändrad. Bara ett fåtal personer har rätt kompetens för att förändra och utveckla dessa, vilket också ska respekteras, framförallt för säkerhetens skull.

Olika hashfunktioner

Hur de olika algoritmerna fungerar skiljer sig något från fall till fall, men grundprincipen är ändå den samma. Den indata som anges delas först upp i flera block (oftast bestående av 512 eller 1024 bitar). För det första blocket som bearbetas används en specifik nyckel för att skapa det första hashresultat. Detta resultat skickas sedan till block 2, vars resultat skickas till block 3 osv. Detta ger en kedjeeffekt som medför komplexitet att återskapa originalvärdet samt att hashvärdet blir relativt unikt. Att det endast är relativt unikt beror på att det faktiskt kan finnas två olika värden som ger samma resultat. Detta uppstår oftast då stora massor – tex 1 GB med text – skickas in till funktionen och där alltså antalet upprepningar för att nå slutresultatet är många.

Vad som bidrar till hur unikt värdet blir beror främst på längden på det hashvärde som funktionen skapar. För inte alltför många år sedan ansågs ett värde med längden 128 bitar (tex MD5) vara säkert. Med dagens superdatorer räcker inte detta, utan man rekommenderas istället att använda en starkare algoritm. Trots detta används MD5 fortfarande i stor utsträckning.
De vanligaste längderna som idag används är:

MD5 		128 
SHA-1 		160 
SHA-512 		512 

Varje algoritm har också en maxlängd av den data som kan bearbetas, där det vanligaste äldre har begränsningen 264 och nyare såsom SHA-512 har 2128. Detta ger en viss bild av antalet variationer som kan förekomma, samt indikation på risken för dubbletter.

När används hashfunktioner?

Vad är då poängen med att använda en hashfunktion? Jo, istället för att återskapa originalvärdet så används ett hashvärde främst för att garantera att viss information förblivit oförändrad. Vi tänker oss följande:
Från system X ska vi till system Y skicka ett belopp för betalning. Y måste på något sätt säkerställa att någon på vägen mellan de två systemen inte ändrat denna information. Utan ett hashvärde skulle någon enkelt kunna lägga till eller ta bort ett antal nollor exempelvis.
Här används nu en hashfunktion tillsammans med en hemlig nyckel. Detta skapar ett unikt värde, som skickas med tillsammans med beloppet. När Y mottager dessa två värden, återskapas hashen med samma hemliga nyckel och det data som skickades med. Om beloppet är ändrat kommer även hashvärde vara förändrad och betalningen kommer därmed att nekas.

Ytterligare scenarion kan vara att hasha lösenorden i en databas så att ingen kan se eller återskapa originalvärdena. Vid inloggning hashas det användarinmatade lösenordet tillsammans med en hemlig nyckel och jämförs med det hashade värdet i databasen.

Detta var en enkel introduktion till hashvärden. Det finns många scenarion där hashvärden är mycket användbara, men man ska inte lita på dess funktionalitet till 100%, då de felanvänt inte utgör något extra skydd alls.

Kommentarer inaktiverade.

%d bloggare gillar detta: