SHA-256 i korthet

SHA-256 är en kryptografisk hashfunktion som tar emot data av godtycklig storlek och producerar ett resultat på exakt 256 bitar. Den hör till de mest använda hashfunktionerna i världen i dag och finns inbyggd i en stor del av den infrastruktur som håller internet säkert, från certifikat och signering av programvara till blockkedjor.

Namnet följer ett enkelt mönster. SHA står för Secure Hash Algorithm, och siffran 256 anger längden på resultatet i bitar. Ett resultat på 256 bitar skrivs vanligen som 64 hexadecimala tecken och kallas ofta hashvärde, hashsumma eller fingeravtryck.

Var SHA-256 hör hemma i SHA-2

SHA-256 är inte en fristående algoritm utan en medlem i SHA-2-familjen. SHA-2 är en grupp hashfunktioner som standardiserats av det amerikanska organet NIST och som omfattar flera varianter med olika längd på resultatet, däribland SHA-224, SHA-256, SHA-384 och SHA-512. Siffran i varje namn talar om hur långt resultatet är.

SHA-2 togs fram som efterföljare till den äldre SHA-1, som producerar ett resultat på 160 bitar. SHA-1 anses inte längre säker för ändamål som kräver kollisionsmotstånd, sedan en praktisk kollision demonstrerades 2017. SHA-256 delar inte den svagheten och betraktas i dag som säker för allmän användning.

Det finns också en nyare standard som heter SHA-3. Den bygger på en annan intern konstruktion än SHA-2 och togs fram bland annat som en reserv, ifall en oväntad svaghet skulle upptäckas i SHA-2. I praktiken är SHA-256 fortfarande ett av de vanligaste valen.

Hur SHA-256 beter sig

Man behöver inte känna till de exakta interna räkneoperationerna för att förstå hur SHA-256 uppför sig utifrån. Några egenskaper är avgörande.

Deterministisk

SHA-256 är deterministisk. Samma indata ger alltid exakt samma hashvärde, varje gång, på vilken dator som helst. Det är just det som gör att två parter kan jämföra hashvärden och dra slutsatser om datan utan att själva utbyta den fullständiga datan. Beräknar du hashvärdet av en fil i dag, och någon annan beräknar det av en kopia om ett år, blir resultatet identiskt om filerna är identiska.

Fast längd oavsett indata

Resultatet är alltid 256 bitar, oavsett om indatan är ett enda tecken eller en stor fil på flera gigabyte. Ett kort meddelande och en hel filmfil får samma längd på sina hashvärden. Det gör hashvärdet bekvämt att lagra, jämföra och skicka vidare.

Lavineffekten

SHA-256 har en stark lavineffekt. Om man ändrar indatan minimalt, till exempel en enda bokstav eller en enda bit, förändras hashvärdet fullständigt och oförutsägbart. Det nya hashvärdet liknar inte det gamla på något sätt, utan ser ut som ett helt nytt slumpmässigt värde. Det betyder att även den minsta ändring i en fil ger ett tydligt annorlunda fingeravtryck, vilket gör manipulation lätt att upptäcka.

Enkelriktad: motstånd mot urbild

SHA-256 är konstruerad för att vara enkelriktad. Det är enkelt att beräkna hashvärdet från indatan, men i praktiken ogenomförbart att gå baklänges, alltså att utifrån ett hashvärde räkna ut vilken indata som producerade det. Den här egenskapen kallas motstånd mot urbild, eller på engelska preimage resistance. Det är därför ett hashvärde kan publiceras öppet utan att avslöja den underliggande datan.

Kollisionsmotstånd

SHA-256 är också konstruerad för att ge kollisionsmotstånd. Det ska vara praktiskt ogenomförbart att hitta två olika indata som ger samma hashvärde. Med ett resultat på 256 bitar är utrymmet av möjliga hashvärden så ofantligt stort att ett systematiskt sökande efter en kollision ligger långt bortom vad någon känd beräkningskraft klarar av. Det är just denna egenskap som gör SHA-256 lämplig där SHA-1 inte längre duger.

Var SHA-256 används i praktiken

SHA-256 finns sällan synligt i gränssnittet, men det arbetar i bakgrunden på många ställen.

TLS-certifikat

När du besöker en webbplats över en säker anslutning presenterar servern ett certifikat. Den digitala signaturen i certifikatet bygger på ett hashvärde över certifikatets innehåll, och SHA-256 är i dag det gängse valet för det hashvärdet. Det gör att din webbläsare kan kontrollera att certifikatet inte har förvanskats sedan det utfärdades.

Signering av programvara

När programvara distribueras signeras den ofta digitalt så att mottagaren kan verifiera att den kommer från rätt utvecklare och inte har manipulerats. Signaturen beräknas över ett hashvärde av programmet, och SHA-256 används brett i det sammanhanget. Om en enda byte i programmet ändras stämmer signaturen inte längre.

Bitcoins arbetsbevis

I Bitcoin spelar SHA-256 en central roll i mekanismen som kallas arbetsbevis. De som bekräftar transaktioner söker efter indata som ger ett hashvärde under ett visst tröskelvärde, och eftersom SHA-256 inte går att vända baklänges finns ingen genväg, utan man måste pröva sig fram. Den enorma mängd beräkningar detta kräver är just det som gör nätverket motståndskraftigt mot manipulation.

Kontroll av filintegritet

Ett vanligt och vardagligt bruk är att verifiera att en nedladdad fil är oförändrad. Utgivaren publicerar filens SHA-256-värde, och du kan beräkna värdet på din egen kopia och jämföra. Stämmer de överens är filen med mycket stor sannolikhet identisk med originalet. Skiljer de sig har något ändrats, vare sig det handlar om ett överföringsfel eller en avsiktlig manipulation.

Sammanfattning

SHA-256 är en 256-bitars hashfunktion i SHA-2-familjen som har blivit ett standardval för säker hashning. Den är deterministisk, ger ett resultat av fast längd, har en stark lavineffekt och är byggd för att vara enkelriktad och kollisionsbeständig. Tack vare dessa egenskaper bär den upp en stor del av det förtroende vi förlitar oss på online, från certifikat och signaturer till blockkedjor och enkel filkontroll. Där den äldre SHA-1 inte längre håller måttet är SHA-256 i dag det självklara alternativet.