Checksums en hashes

Blockchain, Bitcoin, Cryptovaluta, bent u ook een beetje de draad kwijt?

Blockchain en Cryptovaluta zijn twee termen die je tegenwoordig wel een aantal maal per week tegenkomt in de media. De ene keer gaat het over de koersen, de andere keer over de beroving van een “Exchange”.  Iedereen heeft het erover en iedereen kan wel een aantal kenmerken noemen van blockchain en Cryptovaluta.

Maar hoe zit de onderliggende technologie nu in elkaar? Waarom is het blijkbaar toch mogelijk om geld te roven, terwijl Blockchain wordt beschouwd als veilig? Waarom zijn er enorme hopen hardware nodig voor het Minen en wat is dat überhaupt?

Velen weten een deel van de vragen te beantwoorden, bij weinigen lukt dat allemaal. Om daadwerkelijk te kunnen bepalen wat deze verschijnselen voor ons dagelijks leven kunnen betekenen en om nieuwe toepassingsgebieden te kunnen ontwikkelen is een dieper begrip nodig.

Deze blog is de eerste uit een reeks waarin dieper wordt ingegaan op de achterliggende techniek, die sterk leunt op cryptografie. De blogreeks zal dan ook starten met het belichten van de cryptografische achtergrond en zal, omdat we op een zeker moment toch alle ingrediënten voorhanden hebben, een klein uitstapje maken naar certificaten, zoals die gebruikt worden op bijvoorbeeld veilige (https) websites.

Naast de blogs waarin de concepten worden uitgelegd komen er ook blogs over de problemen, zwaktes en veelgemaakte vergissingen met betrekking tot deze concepten, om zo een compleet beeld te geven over de inzet van technologie en waar op te letten wanneer van deze technologie gebruik gemaakt wordt.

Veel van de vergissingen liggen voor de hand, maar toch worden ze keer op keer gemaakt en vormen ze uiteindelijk een groot risico voor de veiligheid en privacy. Als voorbeeld kan hier genoemd worden dat er nog steeds enorm veel websites zijn die wachtwoorden niet of onvoldoende versleuteld opslaan. Dit terwijl het op de juiste manier omgaan met wachtwoorden weinig extra werk is.

De gehele blogreeks:

  • Checksums en hashes; checksums en hashes zijn controlegetallen. Hiermee kun je controleren of een stukje informatie waarover het getal berekend is, onveranderd is sinds het getal berekend was.
  • Sleutels & Encryptie; encryptie of versleuteling is het omzetten van informatie in “geheimtaal” die alleen door gebruik van de sleutel terug te herleiden is tot de oorspronkelijke data.
  • Blockchain; dit is de gebruikte basistechniek voor toepassing in de cryptovaluta die gebruik maakt van hashes, sleutels en encryptie.
  • Bitcoin; de bekendste cryptovaluta gebruiken we als voorbeeld in deze blogreeks.
  • Andere blockchain toepassingen; andere mogelijke en nuttige toepassingen van blockchain technologie.

Voor ieder onderwerp, met uitzondering van de laatste, komen er twee blogs. Eén met de uitleg en één over de donkere kant van de besproken technologie.

Blog 1: Checksums en Hashes

Checksums en hashes zijn aan elkaar gerelateerd en worden zeer veel gebruikt in de IT en op allerlei plaatsen; van databases, tot bestandssystemen en wachtwoord databases.

Hashing algoritmes, die een speciale vorm zijn van een checksum, worden ook gebruikt voor het maken van een Blockchain. Om te kunnen begrijpen hoe een Blockchain werkt komt de kennis over hashing algoritmes goed van pas.

Algoritme:

Een algoritme is een manier van berekenen; een formule.

Het algoritme voor het berekenen van een prijs in dollars
bestaat bijvoorbeeld uit het vermenigvuldigen van de prijs 
in euro’s met de wisselkoers. Het algoritme is dus hier:

Prijsin dollar = Prijsin Euro * wisselkoersvan euro naar dollar

Maar wat is een om te begrijpen wat een hash is beginnen we met een checksum.

Stel je voor, je hebt een trage en onbetrouwbare netwerkverbinding en je wilt iemand een plaatje sturen. Naarmate het plaatje groter wordt, wordt de kans groter dat er iets fout gaat in de transmissie. Een oplossing is om het plaatje twee of meerdere keren te verzenden. Als de ontvanger twee dezelfde plaatjes heeft, dan is de kans groot dat dat het juiste plaatje is.

Dit is echter wel een heel bewerkelijk en langdurig proces. Stel dat er een wiskundige bewerking is die het plaatje kan representeren in iets veel korters. Dan zou dat kortere na het plaatje verzonden kunnen worden om vast te stellen of het plaatje goed aangekomen is.

Deze wiskundige bewerking, ook wel een checksum algoritme genoemd, moet voor dit doel wel voldoen aan een aantal eisen:

1) Hij moet makkelijk, snel en betrouwbaar te berekenen zijn

Het hele punt in het voorbeeld was om tijd en resources te besparen. Daarnaast is het natuurlijk prettig als de checksum altijd dezelfde waarde geeft voor dezelfde data.

2) De checksum moet veranderen als er ook maar één bit van het plaatje anders is

Aangezien de checksum in dit geval minder data bevat dan het plaatje, is het niet te voorkomen dat er een ander plaatje is dat dezelfde checksum heeft. We spreken in zo’n geval van een collision (botsing). Er kunnen echter wel eisen gesteld worden aan het algoritme, om ervoor te zorgen dat de kans dat een collision ons tot een onjuiste conclusie leidt zo klein mogelijk is en zo toevallig mogelijk is.

  • Alle mogelijke checksums van alle mogelijke plaatjes zijn homogeen verdeeld, iedere checksum komt even vaak voor. Dit maakt de statistische kans dat we met een collision te maken krijgen zo klein mogelijk;
  • Theoretisch gezien zouden we een heel klein plaatje kunnen versturen dat zelfs nog kleiner is dan de checksum, in zo’n geval zou een collision nooit voor mogen komen ten opzichte van een andere plaatjes met gelijke grootte;
  • Een minieme wijziging aan het plaatje moet altijd tot een andere checksum leiden, anders zouden we nooit vast kunnen stellen dat het plaatje niet helemaal goed is overgekomen;

3) Voorspelbare of vaste lengte

De checksum moet een voorspelbare/vaste lengte hebben. Zo kan ik als ontvanger constateren dat ik de hele checksum binnen heb. Verder is het technisch gezien makkelijker om met iets van een vaste lengte te werken dan met iets van een variabele lengte.

Zie de afbeelding hierboven voor een voorbeeld van een simpel Checksum algoritme.

Als 77 over de lijn wordt gestuurd na het woord “nederland”, kan de ontvanger constateren of de ontvangst goed is. Maar is dit een goed checksum algoritme?

  • Makkelijk en snel is het wel;
  • Als er één letter veranderd, komt er een ander getal uit het algoritme, maar als er een tweede letter veranderd wordt, zou het kunnen dat het resultaat weer 77 is, bijvoorbeeld “neaerlandg” heeft in dit geval ook een hash van 77. Sterker nog, de hashes zijn ook niet homogeen verdeeld, 0 zal nooit voorkomen en 1000 ook niet. Veel hashes zullen tussen de 50 en 100 zijn;
  • Een vaste lengte heeft deze methode zeker niet. Als we ons beperken tot landnamen zal de lengte variëren tussen twee en drie cijfers, voor hele stukken tekst kan het van alles zijn;

Het getoonde checksum algoritme is dus niet heel goed, maar het illustreert wel wat een checksum in essentie is.

Waar een checksum prima werkt als maatregel tegen onopzettelijke transmissie en opslagfouten, werkt het niet noodzakelijk goed als middel tegen opzettelijke veranderingen in de data.

Dit is bijvoorbeeld relevant als het plaatje dat verstuurd wordt bijvoorbeeld op een paspoort geplaatst moet worden. Het moet namelijk wel jouw foto zijn en niet die van een ander die met jouw paspoort op reis wil.

Om dit te bereiken is er een speciale klasse van checksum algoritmes, de hash. Ons voorbeeld is een hele slechte hash functie; uit 77 kan het aantal letters ongeveer bepaald worden. Dat maakt het construeren van een woord dat hetzelfde aantal letters heeft en dezelfde hash een peuleschil.

Daarom moeten we nog een extra eis toevoegen voor een hashing algoritme:

4) Moeilijk terug te herleiden

Op basis van de hash waarde moet zo min mogelijk informatie vrijgegeven worden over de oorspronkelijke data. Het moet zo goed als onmogelijk zijn om op een korte tijdschaal vanuit een gegeven hash waarde alternatieven (collisions) voor de oorspronkelijke data te berekenen.

Stel dat ik een setje overschrijvingen klaar heb voor de bank. Deze beveilig ik door de hash te berekenen en die mee te sturen met de overschrijvingen. Zo kan de bank constateren dat ze de informatie in goede orde hebben ontvangen en dat niemand de gegevens heeft aangepast.

Normaal gesproken zijn hash algoritmes openbaar. Een aanvaller zou dus kunnen proberen om een combinatie van overschrijvingen te vinden dat tot dezelfde hash leidt (een collision). Als hij daarna de betreffende rekeningnummers aanvraagt zou hij mij kunnen beroven.

Hash waardes hebben typisch een lengte van 128 of 256 bits. Bij een goed algoritme moet een aanvaller het gemiddeld een 1 met 39 nullen keer proberen, totdat hij een combinatie heeft met dezelfde hash waarde. Met 1000 pogingen per seconde is dat nog altijd meer dan een 1 met 27 nullen in jaren. Ter vergelijking, de leeftijd van het Heelal is iets met 10 nullen in jaren.

Bij het hashen kan een extra voorziening getroffen worden om het breken van de hash te bemoeilijken. De hash kan “gesalt” worden. Aan de te hashen data, wordt extra data toegevoegd in de vorm van een al dan niet geheim wachtwoord. We spreken dan van een “salted hash”. In de volgende Blog zal uitgelegd worden hoe het “Salt” helpt bij de bescherming van de gegevens.

Een ander toepassingsgebied voor hashes is de opslag van wachtwoorden en pincodes. Door de hash van een wachtwoord of pincode op te slaan kan een applicatie verifiëren dat de gebruiker het goede wachtwoord heeft ingevoerd zonder het wachtwoord zelf op te slaan (door de invoer opnieuw te “hashen”).

Als de database met hashes om de een of andere reden per ongeluk uitlekt, dan liggen de wachtwoorden niet direct op straat. Hopelijk heeft de eigenaar van de site wel lange en salted hashes gebruikt.

"Stay tuned" voor het volgende deel van deze blogreeks: "Cracking the Hash"
Behandelde begrippen
Algoritme Manier van berekenen.
Checksum Controlegetal, berekend over een blok data met als doel het vaststellen van een foutloze overdracht van gegevens. Een voorbeeld van een checksum algoritme is de Cyclic Redundancy Check (CRC).
Collision Wanneer twee verschillende blokken data dezelfde hash of checksum opleveren.
Hash Controlegetal, berekend over een blok data, met als doel het op een veilige manier kunnen vaststellen van de integriteit van de data. Voorbeelden van veilige hash Algoritmes: SHA-2en SHA-3. hash algoritmes die vermeden moeten worden: MD5, SHA-0 en SHA-1.
Salted Hash Het toevoegen van extra data aan het datablok waarover de hash berekend wordt, met als doel het terug herleiden van de hash naar de oorspronkelijke data moeilijker te maken.

 

Door de site te te blijven gebruiken, gaat u akkoord met het gebruik van cookies. meer informatie

De cookie-instellingen op deze website zijn ingesteld op 'toestaan cookies "om u de beste surfervaring mogelijk. Als u doorgaat met deze website te gebruiken zonder het wijzigen van uw cookie-instellingen of u klikt op "Accepteren" hieronder dan bent u akkoord met deze instellingen.

Sluiten