Cracking the hash

By 1 maart 2019 juli 24th, 2019 Blog
Deel dit bericht!

In de vorige
Blockchain blog is uitgelegd wat een hash is en waarvoor hij dient. Aangezien
hashes op heel veel plaatsen als veiligheidsmechanisme gebruikt worden, wordt
er ook veel moeite gestoken in het “testen” van dit mechanisme. In deze blog
wat meer over de methodes die bij het “testen” gebruikt worden.

Wanneer hashes goed
worden toegepast is de tijd die benodigd is om ze te kraken in de orde grootte
van de leeftijd van het Heelal. Dat is dus te lang om nog iets zinnigs met het
resultaat te doen, zelfs bij mensen die hun wachtwoord bijna nooit veranderen.

Hier zit echter wel
een aanname in; dat Hashes goed worden toegepast. Daarnaast wordt er vanuit de
(wiskundige) wetenschappelijke community veel moeite gestoken in het vinden van
zwakheden in de gebruikte algoritmes. Dit onderzoek zou je kunnen bestempelen
als bedreigend, maar reken er maar op dat geheime diensten en criminele
organisaties ook briljante mensen in dienst hebben die hetzelfde doen en hun
resultaten niet bekend maken.

Onderzoek naar de
kwaliteit van de veel gebruikte cryptografische technieken is dan ook
broodnodig. Zeker als je bedenkt dat hashes op veel plaatsen gebruikt worden;
voor de opslag van authenticatie gegevens en in certificaten voor onder andere
https-verbindingen.

Overigens laten we
checksums nu links liggen, aangezien deze alleen hoeven te beschermen tegen
niet-opzettelijke fouten.

AANVALLEN OP HET FUNDAMENT

Hashes worden
doorgaans op twee verschillende manieren aangevallen:

  1. De “pre-image attack”,
    waarin de aanvaller de oorspronkelijke data probeert te vinden bij een hash;
  2. De “collision attack”
    waarbij de aanvaller twee of meer verschillende stukken data proberen te vinden
    met dezelfde hash waarde. Een speciale variant hiervan is de “chosen-prefix
    attack” waarbij de aanvaller en stuk data naar zijn keuze zodanig verlengd dat
    de hash waarde van de (malafide) data gelijk is aan de hash waarde van de
    oorspronkelijke data. Denk bijvoorbeeld aan het verifiëren van transacties met
    hash waardes. In een chosen-prefix aanval kiest de aanvaller zijn eigen
    transactie en vult die aan met een willekeurige beschrijving zodat de hash
    overeenkomt met de hash van de oorspronkelijke transactie.

Beide aanvallen
combineren vaak een vorm van “Brute Force” (zo veel mogelijk combinaties
proberen) met wiskundig inzicht in de werking van de algoritmes, om het aantal
te proberen combinaties zo klein mogelijk te houden.

Soms wordt ook wel
geprobeerd om zonder wiskundig inzicht een aanval te plegen van het type 1 of
2.  Het vinden van een collision houdt dan niet direct in dat het
algoritme onveilig is. Als een hash bepaald wordt over een stuk tekst dat
langer is dan de hash zijn er nou eenmaal collisions. Er is dus een kans dat je
er per ongeluk één vindt. Het is wel een teken dat het verstandig is om uit te
gaan kijken naar een ander algoritme. Het wiskundige bewijs komt dan vaak ook
wel binnen enige jaren boven tafel.

Het MD5 (Message
Digest) hash algoritme werd in 1992 gepubliceerd door professor Rivest, omdat
men verwachtte dat de voorganger MD4 niet meer veilig was. In 1993 al kwamen er
vanuit de wetenschappelijke gemeenschap signalen dat ook MD5 problemen had. In
2004 werden de eerste collisions gevonden door een groep van Chinese
onderzoekers die, met behulp van een supercomputer, binnen een uur een
collision vonden. In 2006 lukte dat al met een enkele laptop binnen een minuut.

Aangezien er al in
2004 het vermoeden ontstond dat MD5 niet helemaal veilig was, is het natuurlijk
opzienbarend dat in 2012 nog malware gemaakt kan worden die een vervalst
Microsoft certificaat gebruikt dat gebruik maakte van een MD5 hash. Blijkbaar
kost het veel meer tijd om technologie uit te faseren dan het in te voeren.

Bij het SHA-1
algoritme gebeurde ongeveer hetzelfde. Ingevoerd in 1995, in 2005 kwamen de
eerste tekenen dat het algoritme niet geheel veilig is en weer tien jaar later
waren er nog meer vermoedens., Uiteindelijk gaat het in2017 goed mis en
ontstaat er lichte paniek bij instellingen en instituten. Immers het betekent
dat vele certificaten, die inmiddels gebruik maken van een SHA-1 hash in plaats
van MD5, vervangen moeten worden. Dat we niet goed leren van onze fouten blijkt
uit het feit dat een behoorlijke hoeveelheid software die nog in gebruik is
geen certificaten ondersteunt die gebruik maken van iets beters dan MD5 of
SHA-1…

Een bedreiging uit een
andere hoek is de technologische vooruitgang. In een vorige blog werd al gemeld
dat met 1000 pogingen per seconde het waarschijnlijk een 1 met 27 nullen in
jaren kost om een succesvolle pre-image aanval op een hash met een lengte van
128 bits te doen.

Inmiddels is de
grafische kaart ontdekt als element in rekenintensieve taken. Eén grafische
kaart kan wel meer dan 200 miljoen hashes per seconde uitproberen. Dit kort de nodige
tijd in, van een tijdvak van een 1 met 27 nullen in jaren terug naar een 1 met
22 nullen. Nog steeds lang, maar als je beschikt over een Supercomputer met
grafische kaarten zijn het nog maar 19 nullen. Wie weet hoe snel een computer
over 10 jaar is? Als tegenmaatregel is het verstandig om vast over te schakelen
naar hashes van 256 bits of langer.

DICTIONARY EN BRUTE FORCE

Bij een goed hashing
algoritme, mits goed toegepast, is het met de huidige stand van de techniek
niet haalbaar om dat te breken. Een plek waar hashes veel worden toegepast is
voor het opslaan van wachtwoorden.

Dit dient als
bescherming tegen bijvoorbeeld een inbraak in het systeem waarbij de
wachtwoorden database buit gemaakt wordt. Doordat de wachtwoorden in hash vorm
zijn opgeslagen kan de aanvaller niet direct als één van de gebruikers van dat
systeem inloggen. Ook is er voor de gebruikers niet direct paniek als zij
ditzelfde wachtwoord ook in andere systemen gebruikt hebben.

Waar bij veel sites
maatregelen zijn genomen tegen het proberen van wachtwoorden, door bijvoorbeeld
accounts voor een bepaalde tijd te blokkeren, werken deze maatregelen niet meer
als de aanvaller in bezit is van de wachtwoord hashes.

Het is dan mogelijk om
een “Brute Force” aanval te doen waarin domweg alle mogelijke combinaties
worden uitgeprobeerd. Dit is minder werk dan het lijkt. Een wachtwoord kan dan
wel beveiligd zijn met bijvoorbeeld een 128-bits hash, maar in de praktijk
houdt een wachtwoord zich altijd aan bepaalde patronen.

Om te beginnen wordt altijd
met karakters van 8 bits gewerkt. Dit geeft 256 verschillende mogelijke
karakters. Maar er zijn geen 256 toetsen op een toetsenbord. Shift meegerekend
zijn dat er maar ongeveer 100, 128 mogelijkheden kun je maken met 7 bits. 128
bits zijn 16 karakters. Als er 7 bits worden benut van de 8 per karakter, dan
moet een wachtwoord al ruwweg 20 tekens lang zijn om volledig te profiteren van
een 128 bit hash. En dan is er nog aangenomen dat alle tekens op het
toetsenbord toegestaan zijn, wat meestal niet zo is. Een wachtwoord van 4
tekens heeft maar 10 miljoen mogelijke combinaties. Dat is binnen een paar
seconden te raden met nieuwe hardware.

Buiten deze
tekortkoming is er ook nog een andere, en dat is de mens zelf. Veel mensen
gebruiken (delen) van bestaande woorden, plaatsen en namen al dan niet met de
vervanging van letters door cijfers. Het wachtwoord “H33lVe1lig” zal meestal
gezien worden als een goed wachtwoord, maar meer mensen kunnen dit verzinnen.

Er gaan lijsten
(Dictionaries) rond, met veel gebruikte wachtwoorden. Deze lijsten worden
gebruikt worden voor een Dictionary attack. Een meer intelligente vorm van de
Brute Force.

Overigens moet de
aanvaller natuurlijk wel weten hoe de wachtwoorden gehashed zijn, maar dat is
meestal geen probleem. In de praktijk is het vaak het geval dat een aanvaller
die bij de database met wachtwoorden kan, ook bij de broncode, die het hash
recept bevat, van de site kan.

LOOKUP & RAINBOW TABLES

Een Lookup Table is in
feite een Dictionary waarbij van alle woorden de hash al is berekend. De
aanvaller kan zo direct kijken of een hash uit de wachtwoorden database in zijn
tabel staat.

Lookup Tables kunnen
bijzonder groot worden, zelfs zo groot dat het lastig wordt om ze op te slaan
of ze te transporteren. Als oplossing hiervoor is de Rainbow Table verzonnen.
De Rainbow Table bevat niet direct alle mogelijke hashes, maar slaat maar een
subset op, met wat rekenregels om de rest daarvan snel af te leiden.

NIET GENOEG ZOUT

De verdediging tegen
deze genoemde aanvallen is het toevoegen van een Salt. Meestal een willekeurig
nummer. Liefst een lang nummer omdat dit meer werkt vereist bij het berekenen.

Door het toepassen van
Salt zullen algemene Lookup en Rainbow tables niet werken en moeten specifiek
voor het geval worden berekend.

Het salt moet per
wachtwoord anders gekozen worden. Zo zal er voor twee gebruikers met hetzelfde
wachtwoord een andere hash ontstaan en werkt het salt als verdediging tegen
Brute Force en Dictionary Attacks. Hierbij is het niet erg als de aanvaller het
salt kan opzoeken. Door de toepassing ervan wordt hij geforceerd om per
wachtwoord alles opnieuw te berekenen.

Het is belangrijk dat
het salt willekeurig gekozen wordt en niet gerelateerd is aan andere gegevens
van de gebruiker, zoals zijn naam. In een ander systeem wordt dan mogelijk
hetzelfde salt toegepast, wat resulteert in dezelfde hash. Als er reeds in het
ene systeem is ingebroken, bestaat de kans dat het wachtwoord in combinatie met
zijn hash al in een Lookup Table is beland.

Samengevat zijn er
diverse manieren om om een hash heen te werken. Echter, wanneer er een goed
algoritme wordt gekozen (dus niet MD5 of SHA-1) en dit algoritme wordt goed
ingezet, met lange en variërende salts en gebruikers kiezen goede wachtwoorden,
dan wordt het voor een aanvaller wel heel erg lastig.

Helaas zaten in de
laatste zin 5 zaken die wel geregeld moeten zijn. In de praktijk ontbreekt er
vaak één van de 5 waardoor zelfs het stelen van gehashte data de moeite waard
blijft.

“STAY TUNED” VOOR HET VOLGENDE DEEL VAN DEZE BLOGREEKS: “SLEUTELS EN ENCRYPTIE”

BEHANDELDE BEGRIPPEN

  • Brute Force Attack: Aanval waarbij alle mogelijke combinaties geprobeerd worden.
  • Chosen-pretext aanval: Een collision aanval waarbij een stuk tekst zodanig verlengd wordt dat hij dezelfde hash heeft als de oorspronkelijke tekst.
  • Collision aanval: Aanval die zicht richt op het vinden van verschillende stukken data met dezelfde hash waarde.
  • Dictionary Attack: Aanval waarbij veel gebruikte woorden en permutaties van veelgebruikte woorden gebruikt worden.
  • Lookup Table: Tabel met voorberekende Hash waardes en de oorspronkelijke data. Wordt gebruikt voor het opzoeken van Hash waardes.
  • MD5: Message Digest algoritme nummer 5; Hash algoritme uit 1992
  • Pre-image aanval: Een aanval die zich richt op het vinden van de oorspronkelijke data van de hash.
  • Rainbow Table: Speciale variant van een lookup table, waarbij sommige Hash waardes direct op te zoeken zijn en andere snel berekend kunnen worden uit de tabel. Heeft als voordeel dat de Rainbow Table veel kleiner en handelbaarder is.
  • SHA-1: Secure Hash Algoritme nummer 1; Hash algoritme uit 1995

Vragen over dit artikel?
Neem dan contact op met onze specialist Roel Gloudemans. 

  • Artikelen
  • Blockchain, bitcoin, cryptovaluta, bent u ook een beetje de draad kwijt?
    In de vorige Blockchain blog is uitgelegd wat een hash is en waarvoor hij dient. Aangezien hashes op heel veel plaatsen als veiligheidsmechanisme gebruikt worden, wordt er ook veel moeite…
  • Checksums en hashes
    In de vorige Blockchain blog is uitgelegd wat een hash is en waarvoor hij dient. Aangezien hashes op heel veel plaatsen als veiligheidsmechanisme gebruikt worden, wordt er ook veel moeite…
  • Sleutels en encryptie
    In de vorige Blockchain blog is uitgelegd wat een hash is en waarvoor hij dient. Aangezien hashes op heel veel plaatsen als veiligheidsmechanisme gebruikt worden, wordt er ook veel moeite…