En kryptografisk hashfunktion är en algoritm som kan köras på data som en enskild fil eller ett lösenord för att producera ett värde som kallas kontrollsumma. Huvudanvändningen av en kryptografisk hash-funktion är att verifiera äktheten hos en datadel. Två filer kan antas vara identiska endast om kontrollsummorna som genereras från varje fil, med samma kryptografiska hashfunktion, är identiska. Några vanliga kryptografiska hashfunktioner inkluderar MD5 och SHA-1, även om många andra också finns. Kryptografiska hashfunktioner kallas ofta «hashfunktioner», men det är inte tekniskt korrekt. En hash-funktion är en generisk term som omfattar kryptografiska hash-funktioner tillsammans med andra typer av algoritmer som cykliska redundanskontroller.
Kryptografiska hashfunktioner: ett användningsfall
Anta att du laddar ner den senaste versionen av Firefox-webbläsaren. Av någon anledning behövde du ladda ner den från en annan webbplats än Mozilla. Eftersom den inte är värd på en webbplats som du har lärt dig att lita på vill du se till att installationsfilen du just laddade ner är exakt densamma som den som Mozilla erbjuder. Med hjälp av en kontrollsummaräknare beräknar du en kontrollsumma med en viss kryptografisk hashfunktion, till exempel SHA-2, och jämför sedan den med den som publiceras på Mozillas webbplats. Om de är lika kan du vara ganska säker på att den nedladdning du har är den som Mozilla tänkt dig att ha.
Kan kryptografiska hashfunktioner göras om?
Kryptografiska hashfunktioner är utformade för att förhindra möjligheten att vända kontrollsummorna som de skapar tillbaka till originaltexterna. Men även om de är praktiskt taget omöjliga att vända, är de inte 100 procent garanterade att skydda data. Hackare kan använda ett regnbågsbord för att räkna ut den enkla texten i en kontrollsumma. Rainbow-tabeller är ordböcker som listar tusentals, miljoner eller till och med miljarder kontrollsummor tillsammans med motsvarande klartextvärde. Även om detta inte tekniskt reverserar den kryptografiska hashalgoritmen, kan det lika gärna vara, med tanke på att det är så enkelt att göra. I verkligheten, eftersom inget regnbågstabell kan lista alla möjliga kontrollsummar som finns, är de vanligtvis bara användbara för enkla fraser som svaga lösenord. Här är en förenklad version av ett regnbågsbord för att visa hur man skulle fungera när man använder den kryptografiska hashfunktionen SHA-1:
Rainbow Table Exempel | |
---|---|
Oformatterad text | SHA-1 kontrollsumma |
12345 | 8cb2237d0679ca88db6464eac60da96345513964 |
lösenord 1 | e38ad214943daad1d64c102faec29de4afe9da3d |
jag älskar min hund | a25fb3505406c9ac761c8428692fbf5d5ddf1316 |
Jenny400 | 7d5eb0173008fe55275d12e9629eef8bdb408c1f |
dallas1984 | c1ebe6d80f4c7c087ad29d2c0dc3e059fc919da2 |
En hackare måste veta vilken kryptografisk hashalgoritm som användes för att generera kontrollsummorna för att räkna ut värdena. För extra skydd utför vissa webbplatser som lagrar användarlösenord ytterligare funktioner på den kryptografiska hashalgoritmen efter att värdet genereras men innan det lagras. Denna process ger ett nytt värde som endast webbservern förstår och som inte matchar den ursprungliga kontrollsumman. Till exempel, efter att ett lösenord har angetts och kontrollsumman har skapats, kan det delas upp i flera delar och ordnas innan det lagras i lösenordsdatabasen, eller vissa tecken kan bytas ut med andra. När du försöker verifiera nästa gång användaren loggar in, omvandlar webbservern denna ytterligare funktion, och den ursprungliga kontrollsumman genereras igen för att verifiera att användarens lösenord är giltigt. Att ta dessa steg begränsar användbarheten av ett hack där alla kontrollsummor är stulna. Tanken är att utföra en okänd funktion, så om hackaren känner till den kryptografiska hashalgoritmen men inte den anpassade, är det inte till hjälp att känna till lösenordskontrollsummorna.
Lösenord och kryptografiska hashfunktioner
En databas sparar användarlösenord på ett sätt som liknar en regnbågstabell. När ditt lösenord anges, genereras kontrollsumman och jämförs med den som finns registrerad med ditt användarnamn. Du får sedan åtkomst om de två är identiska. Med tanke på att en kryptografisk hashfunktion ger en icke-reversibel kontrollsumma, är det säkert för dig att göra ditt lösenord så enkelt som 12345, istället för 12 @ 34 $ 5, helt enkelt för att själva kontrollsummorna inte kan förstås? Nej, och här är varför. Dessa två lösenord är båda omöjliga att dechiffrera bara genom att bara titta på kontrollsummorna:
MD5 för 12345: 827ccb0eea8a706c4c34a16891f84e7b
MD5 för 12 @ 34 $ 5: a4d3cc004f487b18b2ccd4853053818b
Vid första anblicken kanske du tycker att det är bra att använda något av dessa lösenord. Detta är sant om en angripare försökte räkna ut ditt lösenord genom att gissa MD5-kontrollsumman, vilket ingen gör, men inte sant om en brutal kraft eller ordlistaattack utförs, vilket är en vanlig taktik. En brute force attack inträffar när flera slumpmässiga sticks tas för att gissa ett lösenord. I det här fallet skulle det vara lätt att gissa 12345, men ganska svårt att slumpmässigt räkna ut den andra. En ordboksattack är liknande eftersom angriparen kan prova varje ord, nummer eller fras från en lista med vanliga (och inte så vanliga) lösenord, och 12345 är ett av de vanliga lösenorden. Även om kryptografiska hashfunktioner ger svåra till omöjliga att gissa kontrollsummor, bör du ändå använda ett komplext lösenord för alla dina online- och lokala användarkonton.
Mer information om kryptografiska hashfunktioner
Det kan tyckas som kryptografiska hashfunktioner är relaterade till kryptering, men de två fungerar på olika sätt. Kryptering är en tvåvägsprocess där något krypteras för att bli oläsligt och därefter dekrypteras för att användas normalt igen. Du kan kryptera filer som du har lagrat så att alla som kommer åt dem inte kan använda dem, eller så kan du använda kryptering av filöverföring för att kryptera filer som rör sig över ett nätverk, som de du laddar upp eller laddar ner online. Kryptografiska hashfunktioner fungerar annorlunda genom att kontrollsummorna inte är avsedda att vändas med ett speciellt avtappningslösenord. Det enda syftet med kryptografiska hashfunktioner är att jämföra två datadelar, till exempel när du laddar ner filer, lagrar lösenord och hämtar data från en databas. Det är möjligt för en kryptografisk hashfunktion att producera samma kontrollsumma för olika datadelar. När detta händer kallas det en kollision, vilket är ett enormt problem med tanke på att hela poängen med en kryptografisk hashfunktion är att skapa unika kontrollsummor för varje datainmatning i den. Kollisioner kan inträffa beror på att varje kryptografisk hashfunktion ger ett värde med en fast längd oavsett indata. Till exempel genererar MD5-kryptografisk hashfunktion 827ccb0eea8a706c4c34a16891f84e7b, 1f633b2909b9c1addf32302c7a497983 och e10adc3949ba59abbe56e057f20f883e för tre helt olika datablock. Den första kontrollsumman är från 12345. Den andra genererades från över 700 bokstäver och siffror, och den tredje är från 123456. Alla tre ingångarna har olika längd, men resultaten är alltid bara 32 tecken långa sedan MD5-kontrollsumman användes. Det finns ingen gräns för antalet kontrollsummor som kan skapas eftersom varje liten förändring i ingången ska producera en helt annan kontrollsumma. Eftersom det finns en gräns för antalet kontrollsummor som en kryptografisk hashfunktion kan producera, finns det alltid en möjlighet att du stöter på en kollision. Det är därför andra kryptografiska hashfunktioner har skapats. Medan MD5 genererar ett värde på 32 tecken genererar SHA-1 40 tecken och SHA-2 (512) genererar 128. Ju större antal tecken som kontrollsumman har, desto mindre sannolikt kommer en kollision att inträffa.