En hashfunktion är en deterministisk funktion som omvandlar (engelska hash = hacka sönder[1]) en godtycklig datamängd till en hashsumma av känd storlek. Inom datavetenskap används hashfunktioner bland annat för att skapa och söka i hashtabeller, en datastruktur som adresseras genom hashning av söknycklar. En hashsumma kan även användas för att jämföra dataobjekt, eftersom ett givet invärde alltid gör upphov till samma hashsumma, vilken kan användas som kontrollsumma.

Hashfunktionsexempel
Varje godtyckligt invärde omvandlas till en hashsumma av känd storlek. Samma ingångsvärde leder alltid till samma hashsumma (hashfunktionen är deterministisk).

Hashkollisioner (när olika ingångsvärden resulterar i samma hashsumma) kan till exempel hanteras genom att ytterligare en hashfunktion nyttjas för särskiljning.[1] Olika hashfunktioner har olika egenskaper och användningsområden. Exempelvis: en hashfunktion som adresserar en hashtabell har fördel av att vara snabb medan en hashfunktion som används för att dölja lösenord i en lösenordsdatabas saknar fördel av att vara snabb, då snabbhet i det fallet tillåter en crackare att snabbare få fram lösenorden i klartext vid ett dataintrång.

Kryptografiska hashfunktioner

redigera

En kryptografisk hashfunktion måste vara enkelriktad och kollisionsresistent (att varje ingångsvärde i praktiken resulterar i en unik hashsumma).[2] En avgörande skillnad gentemot mellan en kryptografisk funktion och en kryptografisk hashfunktion är att den senare är enkelriktad (hashning) medan den förra är dubbelriktad (kryptering och dekryptering).

Användningsområden

redigera
  • Lösenordslagring och inloggning[3] – hashsumman av en användares lösenord kan lagras i en lösenordsdatabas, varpå inloggning kan ske genom jämförelse av användaren angivet lösenords hashsumma och användarens tidigare lagrade hashsumma.
  • Digital signering[4] – avsändaren till ett meddelande kan signera sitt meddelande genom att använda sig av asymmetrisk kryptering och hashsumman av meddelandet. Genom att kryptera inte meddelandet i sig, utan hashsumman av meddelandet, kan mottagaren efter dekryptering med avsändarens publika nyckel använda samma hashfunktion som avsändaren och kontrollera att den översända hashsumman överensstämmer med den uträknade hashsumman. Om så är fallet kan mottagaren anta att meddelandet inte har ändrats efter avsändandet.

Exempel

redigera

SHA-256 (Secure Hash Algorithm-256) genererar 256-bitars hashsummor vilka används av kryptovalutan Bitcoin för att verifiera transaktioner.[5]

MD5 och SHA-1 ansågs tidigare[när?] vara säkra men har visat sig[förtydliga] ha dålig kollisionsresistens. Hashen måste vara lång för att hindra Brute force-attacker, så vanligtvis används 128 bitar eller mer. Kryptografiska hashfunktioner optimeras för att vara snabba.[källa behövs] Exempel på kryptografiska hash-funktioner som år 2017 anses som relativt säkra[källa behövs] är SHA-2, SHA-3 och BLAKE2, PBKDF2, Bcrypt, Scrypt och argon2.

Etymologi

redigera

Namnet hashfunktion kommer av engelskans hash, det som på svenska skulle heta pyttipanna. Det är en måltid där man hackar kött och potatis för att sedan tillaga detta i en röra, på samma sätt som en hashfunktion tar in ett binärt tal och hackar det i delar för att sedan kasta om delarna.[6]

Terminologi

redigera

De värden som en hashfunktion ger upphov till kan kallas hashsumma, hashvärde eller kondensat.[7]

Referenser

redigera
  1. ^ [a b] hashkodning i Nationalencyklopedins  (2000). Läst 7 november 2021.
  2. ^ National Institute of Standards and Technology. ”Cryptographic hash function” (på engelska). Computer Security Resource Center - glossary. Arkiverad från originalet den 28 september 2020. https://web.archive.org/web/20200928011400/https://csrc.nist.gov/glossary/term/cryptographic_hash_function. Läst 7 november 2021. 
  3. ^ Jake Frankenfield (3 september 2021). ”Cryptographic Hash Functions” (på engelska). Investopedia. Arkiverad från originalet den 2 november 2021. https://web.archive.org/web/20211102163817/https://www.investopedia.com/news/cryptographic-hash-functions/. Läst 7 november 2021. 
  4. ^ ”Digital signatures” (på engelska). Transaction Processing Facility Enterprise Edition - Documentation. Arkiverad från originalet den 5 oktober 2021. https://web.archive.org/web/20211005170115/https://www.ibm.com/docs/en/ztpf/1.1.0.14?topic=concepts-digital-signatures. Läst 7 november 2021. 
  5. ^ ”SHA-256 Algorithm Overview” (på engelska). N-able. 12 september 2019. Arkiverad från originalet den 13 oktober 2021. https://web.archive.org/web/20211013231256/https://www.n-able.com/blog/sha-256-encryption. Läst 7 november 2021. 
  6. ^ ”Hash och hashing”. http://www.termado.com/DatatermSearch/?ss=hash. Läst 8 februari 2019. 
  7. ^ ”Svenska datatermgruppen, frågor och svar, lista, version 27. Fråga 168”. Arkiverad från originalet den 2 mars 2010. https://web.archive.org/web/20100302074904/http://www.nada.kth.se/dataterm/fos-lista.html.