Hoe werkt encryptie en hashing?

Hashing en encryptie zijn cryptografische functies die beiden een totaal ander doel dienen. Encryptie wordt gebruikt om gegevens te vergrendelen op een manier zodat ze later met een sleutel ontgrendeld kunnen worden. Hashing maakt van alle data die hij krijgt een unieke hash code die niet teruggerekend kan worden naar de oorspronkelijke code.

In dit artikel leggen we beide manieren van het beveiligen van informatie uit en geven we voorbeelden hoe je hier gebruik van kan maken.

Encryptie

Encryptie is het versleutelen van informatie welke met als doel deze onbruikbaar maken zonder de sleutel waarmee hij ontgrendeld kan worden gebruikt wordt. Dit wordt onder andere gebruikt voor SSL om te voorkomen dat iemand die jouw gegevens onderschept deze kan uitlezen of aanpassen. Kort gezegd zijn er twee typen encryptie; Symmetrische Encryptie en Asymmetrische Encryptie.

Symmetrische Encryptie

Bij symmetrische Encryptie wordt gebruik gemaakt van een sleutel om de gegevens te vergrendelen en ontgrendelen. Dit wordt in ons netwerk gebruikt voor bijvoorbeeld SSH. Het heeft snelheid als voordeel maar vereist dat beide partijen in bezit zijn van de sleutel voor de verbinding tot stand gebracht kan worden.

Asymmetrische Encryptie

Asymmetrische Encryptie werkt met behulp van twee sleutels; een om gegevens te versleutelen en de ander om die gegevens te ontgrendelen. SSL maakt bijvoorbeeld gebruik van deze encryptiemethode. Mocht je meer willen weten over asymmetrische Encryptie, lees dan het artikel ssl-certificaat.

Hashing

Hashing is handig om bijvoorbeeld wachtwoorden op te slaan. In zo’n geval wordt een wachtwoord gehashed opgeslagen. Op het moment dat de identiteit van iemand geverifieerd wordt, wordt de hash van het wachtwoord vergeleken wordt met de hash dat in de database opgeslagen staat. Op deze manier kan men controleren of iemand het juiste wachtwoord ingevoerd heeft zonder dat dat wachtwoord opgeslagen is op een manier die terug te rekenen is naar het oorspronkelijke wachtwoord.

md5 hashing

In de onderstaande voorbeelden maken we gebruik van md5 hashing; dat is een vorm van hashing die altijd een unieke 128 bit code teruggeeft. Hashing kan van alle data ongeacht de hoeveelheid een code genereren met de volgende eigenschappen:

  • Lengte: De lengte van een gegenereerde hash wordt door het algoritme wat het genereerd bepaald. Md5 hashing zal altijd een 128 bits (32 cijferig hexdecimaal) code als output genereren.
  • Geen collisions: Twee verschillende files mogen nooit dezelfde hash genereren.
  • Herbruikbaar: Een gehashte file of tekst moet altijd dezelfde hash genereren
  • Niet terug te draaien: Een hash mag niet terug te rekenen zijn naar de oorspronkelijke tekst

TekstHash van tekst
Byte over hashingcc967ac33065d74f72590edd4f5491d5
Byte over hashing.95ed53c538bfa7471cf2a0604094555e

Zoals je in dit eerste voorbeeld ziet is het enige verschil tussen de teksten de punt op het einde, de hash codes zelf verschillen echter drastisch van elkaar.

Praktijkvoorbeeld

Aan de hand van onderstaand voorbeeld zullen we toelichten hoe je door middel van hashing je wachtwoorden veiliger kunt opslaan:

Om een gebruiker aan te kunnen melden moet uiteraard het wachtwoord geverifieerd worden. Nu kan het wachtwoord uiteraard in de database opgeslagen worden, maar op het moment dat de site gehacked wordt, liggen al deze wachtwoorden op straat. Daarnaast zijn van de gebruikers van deze wachtwoorden ook de emailadressen bekend. Meeste mensen gebruiken hun wachtwoord op meerdere plekken tegelijk, dus dan zou het kunnen voorkomen dat de webmail van een gebruiker gekraakt wordt omdat het wachtwoord niet versleuteld is.

Voorbeeld niet gehashte gegevens

NaamWachtwoord
Jan123456
PietWachtwoord
Kees123456

Met de gegevens op deze manier in de database is het natuurlijk gemakkelijk verifiëren of iemand zijn wachtwoord wel juist ingetypt heeft. Netjes is anders, vandaar dat we nu een stap verder gaan door de passwords te hashen. De wachtwoorden zijn hetzelfde als in het bovenstaande voorbeeld maar onder het volgende kopje vind je de gehashte varianten.

Voorbeeld gehashte varianten

NaamWachtwoordHash van wachtwoord
Jan123456e10adc3949ba59abbe56e057f20f883e
PietWachtwoord701f33b8d1366cde9cb3822256a62c01
Kees123456 e10adc3949ba59abbe56e057f20f883e

Dat is gelijk al een stuk veiliger! De wachtwoorden zijn op deze manier niet terug te rekenen. Helaas zijn boeven ook niet gek en worden andere methoden gebruikt om deze hashes “terug te rekenen”. Om dit te doen wordt gebruik gemaakt van Rainbow Tables. Dat zijn grote databases met woorden en de hashes ervan, waarmee wordt gekeken of die hashes in de database voorkomen en op deze manier wordt het wachtwoord achterhaald. Deze hashes zijn allemaal vooraf berekend en op deze manier kunnen snel heel veel wachtwoorden uit een database als deze gekraakt worden.

1% van de gebruikers op internet gebruikt het wachtwoord “123456”. Wanneer in een gelekte database gezocht zou worden op de hash hiervan (e10adc3949ba59abbe56e057f20f883e) is dus gelijk 1% van de gebruikersnaam/wachtwoordcombinaties bekend.

Salt

In de bovenstaande tekst is uitgelegd wat de voor en nadelen zijn van hashing en waarom alleen een hash van een wachtwoord onvoldoende is om voor iedereen zo veel mogelijk veiligheid te garanderen. Vanwege deze reden hebben ze Salt bedacht. Salt is het toevoegen van informatie aan een wachtwoord voordat je er een hash van maakt. Een voorbeeld hiervan is de username + het password hashen.

In de vorige tabel zag je dat de hashes voor de passwords van Piet en Kees identiek waren en dat is natuurlijk niet optimaal. Zodra je weet wat het password voor de hash van een gebruiker is, weet je gelijk welke andere gebruikers dat wachtwoord gebruiken. Met Salt kun je dit echter oplossen:

NaamWachtwoordTe hashen tekstHash
Jan 123456Jan + 12345690b60bac3e1113e180ddefed30c37b6e
PietwachtwoordPiet + wachtwoord d9bc513252dede0277c864f23df84039
Kees 123456Kees + 1234566cf875073050de4d260580c39a782e03

En voila, allemaal verschillende hashes! Mocht de database nu gekraakt worden dan zal alsnog elke hash code los gekraakt moeten worden voor het wachtwoord achterhaald kan worden.


Byte whitepaper

Het internet is geen veilige plek, sterker nog het is een speeltuin voor kwaadwillenden. En voor die kwaadwillenden valt er veel te halen. Net als in de ‘gewone’ wereld is het dus van belang om je hier tegen te beschermen. In deze whitepaper leggen we uit waarom het zo belangrijk is om je website te beveiligen, wat de gevolgen van een hack zijn, en wie wat voor je kan doen om hackers buiten de deur te houden.

Please let us know your email address.

 

7