Permalänk
Medlem

Kom igång med hashfunktioner!

Detta är del två i min serie guider/artiklar för att inspirera till att bryta gamla arbetssätt och byta ut programvaror mot bra, säkra, integritetsvärnande, gratis och öppna alternativ. Den första delen handlar om Syncthing.

Du har säkert sett dem, kryptiska samlingar bokstäver och siffror bredvid avbildsfils-länken för något operativsystem du laddat ner. Någonstans i bakhuvudet anar du att hashfunktionen är viktig och att du borde använda den på något vis innan du installerar ditt nya operativsystem...

När du laddar ner en fil, flera tiotals miljarder bitar stor är det rätt otroligt varenda bit blir rätt. Hur kan du försäkra dig om att ingen gammal ledning i Belgien förvanskat signalen så att bit 24 833 170 021 blev en 0:a när det egentligen var en 1:a? Än värre, hur vet du att ingen lagt in en tickande ransomware-bomb i ditt operativsystem, programmerad att kryptera alla dina viktiga dokument efter en tid?

Det är i detta sammanhang hashfunktioner briljerar. De är matematiska funktioner som matas med data av godtycklig storlek. Funktionen matar sedan ut ett tal, en hash, av en fast längd (undantag finns). Små variationer i indata ger stora variationer i utdata vilket illustreras medan där MD5 är en vanligt förekommande hash-algoritm:

Dessa egenskaper är användbara. Överför du en stor fil på nätet vill du kunna lita på att inte några bitar här och där av misstag förvanskats. Av denna anledning publiceras ofta hashar för filerna på skaparnas officiella hemsidor. Du kan då jämföra den publicerade hashen med din beräknade hash av den nedladdade filen. Överensstämmer dessa är det mycket osannolikt att innehållet förändrats oavsiktligen.

1 Kryptografiska hashfuntioner
En ibland önskvärd egenskap hos hashfunktionen är att den omvända beräkningen är svår. "Vilken indata kan ge en given hash?" Är det riktigt svårt, så svårt att det med dagens och stundande tekniker är orealistiskt att man kan beräkna ens en möjlig indata som ger en given hash når hashfunktionen status som kryptografisk.

1.1 Tillämpning nedladdning
Tänk tillbaka på exemplet med den nedladdade filen du vill känna dig trygg med inte har förändrats i transporten över nätet. Tänk dig istället scenariot att någon aktivt försöker bedra dig. Du vill ladda ner en Linuxdistribution och via den officiella hemsidan länkas du till spegelservrar och väljer då att hämta hem filen från ett ansett universitets servrar nära dig. Vad du inte vet är att någon hackat sig in och ersatt just denna fil du vill ladda ner. Operativsystemet är modifierat och innehåller en ransomware.

Lyckligtvis har den officiella hemsidan publicerat kryptografiska hashar samhörande med filerna och efter att du laddat hem din fil beräknar du hashen och ser att sen är helt skiljd från det förväntade. Du laddar ner filen igen, ser åter samma resultat och rapporterar problemet. Du är dagens hjälte!

1.2 Tillämpning lösenord

En annan användning av kryptografiska hashar rör lösenord. När du loggar in på en webbsida med ett lösenord behöver webbservern besluta om det lösenord du matat in överensstämmer med vad som en gång bestämts.

Ett riktigt dåligt sätt att göra detta är att lagra alla användarnamn och lösenord i klartext i en stor tabell. Kommer en angripare över denna tabell kan de logga in på vilket konto de än önskar.

Väljer man istället att mata in ditt lösenord i en kryptografisk hashfunktion och lagra den resulterande hashen i en databas löses många problem. Varje gång du loggar in beräknar webbservern hashen för lösenordet och är denna samma som lagrad hash släpps du in.

Med det sagt är bilden ovan en grav förenkling. För den nyfikne är rainbow tables, salt and pepper nyckelord vid fördjupning.

1.3 Kryptografisk hashfunktionsstatus över tid
Vad exakt innebär det att en hashfunktion är kryptografisk? Kravet var ju att det ska vara riktigt svårt att beräkna möjlig indata som ger en given hash. Men vad är riktigt svårt? Detta är ganska godtyckligt och bygger ytterst på vilket scenario du söker skydda dig mot.

Vad som över tid försvagar en kryptografisk hashfunktiom är huvudsakligen:
- Ökande beräkningskapacitet i takt med att hårdvara förbättras
- Sårbarheter i algoritmerna kan upptäckas som kan leda till genvägar i beräkningarna.

Därtill kan man anta att stadsaktörer som vill avlyssna en president lätt kan tänka sig att köra en GPU-farm i flera månader till miljontals kronor i elkostnad. Detta är inte realistiskt scenario för att få tag på ditt lösenord till tvättbokningssystemet. Ytterligare en faktor är tidsbegreppet. Är det ett problem att vi redan med dagens prognos i teknikutveckling förväntar oss att den hashfunktion vi valt ej kommer att vara kryptografisk om 25 år?

2 Vanliga hashfunktioner

Det finns många varianter men nedan listas några vanligt förekommande algoritmer och deras användning.

2.1 MD5
Använd sedan början av 90-talet har MD5 använts. Algoritmen producerar 128 bitar långa hashar. Ursprungligen används som kryptografisk hashfunktion men visade sig snart ha stora sårbarheter som gjorde att kollisioner (multipla indata delandes samma hash) med givna hashar var lätta att beräkna.

Är idag fortsatt vanligt förekommande men används nu edast som checksummor, dvs detekterar oavsiktliga förändringar av data.

2.2 SHA-1
En annan 90-talsalgoritm, SHA-1 producerar 160 bitars hashar. Precis som MD5 var den ursprungligen ansedd som kryptografisk hashfunktion men numer kan kollisioner skapas hyfsat lätt.

Trots detta används den som om den vore kryptografisk i kritiska system som därmed blir sårbara. Som exempel avvänder min bostadsrättsförening osäkra elektroniska portnycklar baserade på SHA-1. Den används även i BitTorrent och kan vid avsiktliga kollisioner leda till Torrent Poisoning

2.3 SHA-256

Den idag mest välanvända hashfunktionen i SHA-2-familjen med hashar på 256 bitar. Den började användas pp tidigt 00-tal och är än idag ansedd kryptografiskt säker.

2.4 CRC
En familj algoritmer vanligen använt i lagringsmedia för att upptäcka fel. För de med praktisk erfarenhet av CD-ROM är kanske CRC-felmeddelande bekanta. Dessa inträffade vid skadad media och/eller läsare.

3 Hashfunktioner i praktiken
Det finna många implementationer av ovan nämnda algoritmer och det är svårt att ge ett heltäckande svar men här är lite förslag för att komma igång.

3.1 Windows
Starta kommandotolken. I Windows är Certutils förinstallerat. Följande kommandon ger hashen för filen du anger sökvägen till:

CertUtil -hashfile <fil> MD5

CertUtil -hashfile <fil> SHA256

3.2 Linux
Starta terminalen och använd lämpligt program med filen du önskar hasha som argument. Du får då hashen som output:

md5sum <fil>

sha256sum <fil>

3.3 MacOS
Starta terminalen och använd lämpligt program med filen du önskar hasha som argument. Du får då hashen som output:

openssl dgst -sha256 <fil>

openssl md5 <fil>

Lycka till!

Permalänk
Medlem

kände att jag gjorde lite mycket åverkan på tråden så jag tog bort mitt inlägg