Kryptografi och grunden för förtroende online

Varje gång du loggar in på en banktjänst, laddar ner ett program eller besöker en webbplats med hänglåssymbol i adressfältet, arbetar kryptografi i bakgrunden. Den avgör om informationen du tar emot verkligen kommer från den avsändare du tror, och om den har ändrats på vägen. Utan dessa mekanismer skulle det inte gå att skilja en äkta meddelande från en förfalskning, eller en oförändrad fil från en manipulerad.

I centrum för mycket av detta står den kryptografiska hashfunktionen. Den är en av de mest använda byggstenarna i modern säkerhet, och samtidigt en av de minst synliga för den vanliga användaren. Det här avsnittet förklarar vad en kryptografisk hash är, hur SHA-familjen fungerar på en övergripande nivå, varför hashning utgör grunden för förtroende på nätet, och vad de fördjupande artiklarna tar upp.

Vad är en kryptografisk hash?

En hashfunktion tar emot data av godtycklig storlek, allt från ett enda tecken till en hel filmfil, och producerar ett resultat av fast längd. Resultatet kallas ofta för ett hashvärde, en hashsumma eller ett fingeravtryck. För SHA-256 är resultatet alltid 256 bitar långt, oavsett hur stor indatan var.

En kryptografisk hashfunktion har dessutom egenskaper som gör den lämplig för säkerhetsändamål. Den är deterministisk, vilket betyder att samma indata alltid ger samma hashvärde. Den är snabb att beräkna i en riktning. Men den är konstruerad så att det i praktiken är omöjligt att gå baklänges: givet ett hashvärde går det inte att räkna ut vilken indata som producerade det. Den har också en lavineffekt, där en minimal ändring i indatan, till exempel en enda ändrad bokstav, ger ett helt annorlunda hashvärde.

Den kanske viktigaste egenskapen kallas kollisionsmotstånd. Det innebär att det ska vara praktiskt ogenomförbart att hitta två olika indata som ger samma hashvärde. När den egenskapen håller kan ett hashvärde fungera som ett pålitligt fingeravtryck för en specifik fil eller ett specifikt meddelande. När den egenskapen bryts uppstår allvarliga problem, vilket avsnittet om SHA-1-kollisionen visar i detalj.

SHA-familjen på en övergripande nivå

SHA står för Secure Hash Algorithm, och namnet syftar på en grupp standardiserade hashfunktioner som har utvecklats över tid. De har stått i fokus för det amerikanska standardiseringsorganet NIST och har blivit globalt spridda.

SHA-1 var länge en arbetshäst i många system. Den producerar ett hashvärde på 160 bitar. Under flera år fanns teoretiska invändningar mot dess säkerhet, och 2017 demonstrerades en första praktisk kollision, vilket bekräftade att funktionen inte längre kunde anses säker för ändamål som kräver kollisionsmotstånd.

SHA-2 är en familj av efterföljare och omfattar varianter som SHA-256 och SHA-512, där siffran anger längden på hashvärdet i bitar. SHA-256 har blivit den mest spridda varianten och används bland annat i TLS-certifikat, signering av programvara och i Bitcoins arbetsbevis. SHA-2 betraktas i dag som säker för allmän användning.

SHA-3 är en nyare standard som bygger på en helt annan intern konstruktion än SHA-2. Den togs fram delvis som en försäkring: om en oväntad svaghet skulle dyka upp i SHA-2 finns ett alternativ som inte delar samma underliggande design. I praktiken är SHA-2 fortfarande det vanligaste valet i dag.

Varför hashning bär upp förtroendet online

Hashfunktioner sätter sällan sina egna spår i användargränssnittet, men de finns under ytan i en stor del av den infrastruktur vi förlitar oss på.

När du verifierar att en nedladdad fil är oförändrad jämför du ofta dess hashvärde mot ett publicerat värde. Stämmer de överens är filen med mycket stor sannolikhet identisk med originalet. Skiljer de sig har något ändrats, vare sig det beror på ett överföringsfel eller en avsiktlig manipulation.

När en webbplats presenterar ett certifikat för din webbläsare innehåller den digitala signaturen i certifikatet ett hashvärde över certifikatets innehåll. På så sätt kan webbläsaren kontrollera att certifikatet inte har förvanskats sedan det utfärdades.

När lösenord lagras på ett ansvarsfullt sätt sparar tjänsten inte lösenordet i klartext, utan ett hashvärde av lösenordet tillsammans med ett unikt slumpvärde som kallas salt. Om databasen läcker blir det betydligt svårare för en angripare att återskapa de ursprungliga lösenorden.

I blockkedjor knyter hashvärden samman block i en kedja, där varje block innehåller hashvärdet av det föregående. En ändring i ett gammalt block skulle ändra dess hashvärde och därmed bryta hela kedjan framåt, vilket gör manipulation lätt att upptäcka.

Den gemensamma nämnaren är förtroende. Ett hashvärde låter två parter som aldrig har träffats enas om att en viss data är exakt den de tror att den är. Hela konstruktionen vilar dock på antagandet att ingen kan hitta en kollision. Den dagen någon kan det, faller en del av förtroendet, vilket är precis vad som hände med SHA-1.

Vad det här avsnittet tar upp

De fyra fördjupande artiklarna går på djupet i var sitt centralt ämne.

SHA-1-kollisionen (SHAttered) beskriver hur forskare 2017 för första gången skapade två olika filer med samma SHA-1-värde, hur stor beräkningsinsats det krävde, och vad genombrottet betydde för säkerheten i certifikat, versionshantering och signering.

SHA-256 förklarar var SHA-256 hör hemma i SHA-2-familjen, vad ett 256-bitars hashvärde innebär, hur funktionen beter sig, och var den används i praktiken.

Hashfunktioner går igenom de kryptografiska hashfunktionernas kärnegenskaper, hur de skiljer sig från enklare hashfunktioner, och vilka problem de löser.

Digitala signaturer visar hur en hashfunktion tillsammans med asymmetriska nycklar gör det möjligt att signera och verifiera meddelanden, och varför en hashkollision hotar själva signaturens giltighet.

Tillsammans ger artiklarna en sammanhängande bild av hur hashning fungerar, varför den är så viktig, och vad som står på spel när en algoritm som SHA-1 går från att anses säker till att vara bruten.