Cracking the Hash

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.

Vaar het SHA-1 algoritme gebeurde ongeveer hetzelfde. Ingevoerd in 1995, in 2005 de eerste tekenen dat het algoritme niet geheel veilig is, in 2015 meer tekenen dat het mis is. In 2017 is het goed mis en ontstaat er lichte paniek bij instellingen en instituten, omdat certificaten, die inmiddels gebruik maken van een SHA-1 hash in plaats van MD5, vervangen moeten worden. Saillant detail hierbij is 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 hebben we 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, dat goed is 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 werken we altijd met karakters van 8 bits. Dit geeft 256 verschillende mogelijke karakters. Maar we hebben 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 we maar 7 bits benutten 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, 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 daar 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

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