Inom kryptografin är Secure Hashing Algorithms (SHA) en familj av kryptografiska hashfunktioner som publicerats och rekommenderas av National Institute of Standards and Technology (NIST). Algoritmerna tar en godtycklig inmatning och producerar ett hashvärde (ofta hexadecimalt) med fast längd. Hashvärdets längd bestäms av algoritmens digestlängd och påverkar både säkerhet och representation.

Grundläggande egenskaper

  • Beständighet mot förbildsattacker (pre-image resistance): det ska vara svårt att utifrån ett givet hashvärde hitta en inmatning som ger det värdet.
  • Andra förbildsattacker (second pre-image resistance): det ska vara svårt att hitta en annan inmatning som ger samma hash som en given inmatning.
  • Kollisionresistens: det ska vara svårt att hitta två olika inmatningar som ger samma hashvärde.
  • Deterministisk och snabbräknad: samma inmatning ger alltid samma hash, och beräkningen ska vara effektiv.

Versioner och digestlängder

Familjen innehåller flera generationer:

  • SHA-0: den ursprungliga versionen (mycket begränsad användning idag).
  • SHA-1: 160-bitars digest (40 hexadecimala tecken). Tidigare mycket använd, men har kollisioner och anses osäker för nya tillämpningar.
  • SHA-2: en serie varianter med längre digest: SHA-224 (224 bitar, 56 hex tecken), SHA-256 (256 bitar, 64 hex), SHA-384 (384 bitar, 96 hex) och SHA-512 (512 bitar, 128 hex). Det finns även derivat som SHA-512/224 och SHA-512/256.
  • SHA-3: baserad på Keccak-algoritmen och standardiserad senare än SHA-2. SHA-3 finns i motsvarande längder (t.ex. SHA3-256, SHA3-512) och ger en alternativ konstruktion med annan intern struktur.

Säkerhet och historik

SHA-1 visade sig vara svagare än förväntat: teoretiska attacker identifierades tidigt och praktiska kollisionsattacker demonstrerades (t.ex. "SHAttered" 2017). Därför rekommenderas inte SHA-1 för nya system. SHA-2 har inga kända praktiska kollisionsattacker mot fulla varianter och används fortfarande brett. SHA-3 introducerades som ett alternativ med annan designprincip, för att ge diversitet om en svaghet skulle upptäckas i SHA-2.

Användningsområden

  • Kontroll av data- och filintegritet (t.ex. checksummor).
  • Digitala signaturer och certifikat (hashning före signering).
  • HMAC (Hash-based Message Authentication Code) för meddelandeautentisering.
  • Derivationsfunktioner och kombinationer i protokoll (t.ex. TLS, SSH).
  • Observera: för lagring av lösenord rekommenderas långsammare, minneskrävande algoritmer som bcrypt, scrypt eller Argon2 istället för rena SHA-varianter.

Val och rekommendationer

  • Använd inte SHA-1 för säkerhetskritiska ändamål. Migrera system som fortfarande förlitar sig på SHA-1.
  • SHA-2 (särskilt SHA-256 eller längre) är i praktiken säkert för de flesta tillämpningar i dagsläget.
  • Överväg SHA-3 när du vill ha en annan designprincip eller skydd mot eventuella framtida svagheter i SHA-2.
  • För lösenord och nyckelderivning använd alltid algoritmer anpassade för ändamålet (KDFs) och kombinera med salt och lämplig kostnadsparameter.
  • Håll implementationer och bibliotek uppdaterade och följ NISTs och andra standardiserande organens rekommendationer.

Praktiska detaljer

För att räkna ut hur många hexadecimala tecken ett hashvärde ger kan du dela antalet bitar med fyra (1 hex = 4 bitar). Exempelvis ger SHA-256 256/4 = 64 hextecken och SHA-512 ger 512/4 = 128 hextecken.

Sammanfattningsvis är SHA-familjen central inom modern kryptografi. Vilken variant som är lämplig beror på säkerhetskrav, prestanda och kompatibilitet — men undvik SHA-1 i nya system och använd i stället säkra varianter ur SHA-2 eller SHA-3.