In de maand oktober was het dagelijks raak wat betreft het hacken en vinden van lekken in websites. Velen haalden het nieuws op internet en de krant. In de artikelen werden diverse begrippen gebruikt om aan te geven wat er aan de hand was met de website. Maar weet jij wat er bedoeld wordt met MD5, SHA1, salt, hash en rainbow tables? Die begrippen worden in dit artikel uitgelegd.
Wat is een goed wachtwoord:
Laten we bij het begin beginnen. Iedereen heeft diverse accounts op internet, voor e-mail, webshops, vakanties en ga zo maar door. Sommige zijn kort andere zijn lang maar het liefste gebruiken we één wachtwoord voor alle accounts. Is dat verstandig? Nee helaas niet maar wel handig!
Dus het beste kan je voor ieder account een ander wachtwoord gebruiken en dit niet op een gele post-it aan je beeldscherm plakken! Maar wat is nou veiliger een kort moeilijk of juist een lang simpel wachtwoord. Eigenlijk om eerlijk te zijn is een lang wachtwoord het beste.
Stel je gebruikt als wachtwoord: “Jv!r3&f9”, 8 tekens langs. Moeilijk te onthouden en minder veilig dan een wachtwoord als: “IkbenJohnDoeEnKomUitRaamsdonksveer”, ruim 30 tekens. Het aantal pogingen dat nodig is om het eerste wachtwoord te kraken is aanzienlijk lager dan het aantal voor het langere wachtwoord.
Gaan mensen dan lukraak een wachtwoord invullen om proberen in te loggen. Ja, vroeger wel, maar tegenwoordig kan de computer dat doen en die doet dat stukken sneller. Sommige computers halen 1 miljoen combinaties per seconden.
Hoeveel combinaties zijn er dan mogelijk met “IkbenJohnDoeEnKomUitRaamsdonksveer”? Het maximale aantal tekens dat voorkomt in dit wachtwoord zijn alle 26 letters van het alfabet. Echter zit er een verschil tussen kleine en grote letters wat 26 x 2 = 52 maakt. Het wachtwoord telde 30 letters dus het totaal aantal combinaties wordt daarmee: 52 x 52 x 52 x 52 x 52 x 52 x 52 x 52 x 52 x 52 x 52 x 52 x 52 x 52 x 52 x 52 x 52 x 52 x 52 x 52 x 52 x 52 x 52 x 52 x 52 x 52 x 52 x 52 x 52 x 52 = 1,5707374653, wat dus meer dan genoeg combinaties zijn.
Natuurlijk kan zelfs het lange wachtwoord nog moeilijker gemaakt worden, laten we er eens dit van maken “!kb3n@nn@L@ng3w3g&KomU!tR@@msdonksveer.”. Nu hebben we een lang wachtwoord dat moeilijker te raden valt, maar is nog wel te onthouden. In de vorige versie hoefde alleen maar letters gebruikt te worden om het wachtwoord te raden, maar nu ook cijfers en vreemde tekens. Dit komt al gauw op 85 mogelijkheden per teken. Dus het getal 52 zou je kunnen vervangen door 85 waardoor het aantal combinaties nog veel groter wordt.
MD5:
MD5 staat voor Message Digest Algoritmh 5 en is een cryptografische hashfunctie ontworpen in 1991. Met een MD5 hash functie kan je een gegeven waarde veranderen in een andere waarde die niet meer terug valt te veranderen. Hiervoor worden verschillende formules uitgevoerd.
Een waarde als “abcd1234” wordt door MD5 veranderd naar “e19d5cd5af0378da05f63f891c7467af”. De waarde wordt altijd omgezet naar een waarde die uit 32 letters/cijfers bestaat. Ik weet nu dus niet wat “e19d5cd5af0378da05f63f891c7467af” betekent. Zoals eerder gezegd kan je dit ook niet terug rekenen naar “abcd1234”.
Elke waarde levert dus in principe een unieke hash op. Helaas geldt dit niet helemaal voor MD5. In sommige gevallen kunnen 2 verschillende waarden dezelfde hash opleveren. Dit wordt ook wel collision genoemd.
Bij vrijwel alle websites waar je een account registreert wordt jou wachtwoord met een cryptografische functie als MD5 of SHA1 opgeslagen. De beheerders van de website mogen jouw wachtwoord niet zien, dit is een stukje privacy.
Helaas zijn er ook websites die niet gebruik maken van een hashfunctie. Je wachtwoord staat dan gewoon in een leesbaar formaat, ook wel plain-text genoemd, opgeslagen. Dit kan problemen veroorzaken wanneer een hacker het bestand, meestal een database, in kan zien waarin de wachtwoorden zijn opgeslagen. Als ze gehashed zijn ziet de hacker telkens een woord van 32 tekens, maar weet niet wat het betekent. Hij zou dan moeten raden.
MD5 is niet meer te vertrouwen. Het niveau van vertrouwen stijgt wel als je wachtwoord langer wordt.
Salt:
Om die reden hebben ze het begrip salt bedacht, vrij vertaald zout. Eigenlijk betekent salt hetzelfde wanneer je het voor eten of in de wereld van computers en internet gebruikt. Je voegt namelijk iets toe. Een salt in de wereld van computers is een waarde zoals “dnvk33dv(#84220”, meestal betekent het niets. Deze wordt achter je wachtwoord geplakt, dus achter “abcd1234” en daarna pas door een hashfunctie zoals MD5 omgezet naar een andere waarde, namelijk “eccb7d2fa847036f5df9cf05d5950d03”. Als je nu deze waarde vergelijkt met de waarde een paar alinea’s terug zie je dat ze verschillen. Je wachtwoord is hierdoor een stuk langer geworden.
In de meeste gevallen gebruikt een website één salt voor alle gebruikers. Dus zou het wachtwoord achterhalen “abcd1234dnvk33dv(#84220”, en komt erachter dat “dnvk33dv(#84220” eigenlijk een salt (een toevoeging) is, dan weet de hacker dat alle andere wachtwoorden ook minimaal die tekens hebben. Natuurlijk is dat in dit geval een aanname, maar als de hacker twee wachtwoorden kraakt wordt de aanname wel bevestigd. Beide wachtwoorden zijn namelijk voor een gedeelte hetzelfde.
Om dat tegen te gaan gebruiken sommige websites voor iedere gebruiker een eigen salt. Eigenlijk heeft iedere gebruiker dus 2 wachtwoorden. Een door de gebruiker en een door de website bedacht en die combinatie wordt gehasht opgeslagen in de database. De gebruiker vult het wachtwoord zonder de salt in.
SHA1:
Maar toen net zei je nog dat MD5 niet meer te vertrouwen is. Maar in combinatie met salt wel dus? Nee, het vertrouwen is wel gestegen, een wachtwoord wordt namelijk langer. Maar het kan beter. Tegenwoordig gebruiken steeds meer websites de methode SHA1 wat staat voor Secure Hash Algoirthm 1. In theorie doet deze hashfunctie hetzelfde als MD5. Alleen komt het resultaat op basis van andere formules tot stand waardoor het moeilijker te kraken valt.
Het resultaat als je “abcd1234” hasht met SHA1 is “7ce0359f12857f2a90c7de465f40a95f01cb5da9” en bestaat altijd uit 40 letters/cijfers. De hash is dus ook anders dan MD5. Natuurlijk kan je hier ook weer een salt aan toevoegen. SHA1 heeft wel een stuk minder last van collisions dan MD5. In 2008 is het een persoon gelukt om een collision te veroorzaken met twee waarden.
Rainbow tables:
Soms zal je ook wel het begrip Rainbow tables tegenkomen. Dit heeft niets met een regenboog te maken. Rainbow tables zijn tabellen met wachtwoorden en hun gehashte waarde. Als je dus een hash waarde hebt kan je kijken welk wachtwoord erbij hoort. De hash moet wel voorkomen in de tabel. Deze tabellen bevatten vaak miljoenen wachtwoorden. Vaak zijn ze wel beperkt tot 8 tekens, dus als je wachtwoord langer is dan 8 tekens is het meteen een stuk veiliger.
Deze tabellen komen tot stand door computers telkens een waarde te laten hashen en die toe te voegen aan een tabel. Dit gaat met miljoenen per seconden. Er zijn natuurlijk ook een oneindig aantal combinaties mogelijk als je weet dat er per teken al minimaal 85 mogelijkheden zijn.
De tabellen worden gemaakt om meestal twee redenen. Om er misbruik van te maken zodat mensen onder jou naam ergens in kunnen loggen en bijvoorbeeld bestellingen kunnen plaatsen. Of om aan te tonen hoe onveilig een kort wachtwoord is. De tabellen zijn daarom ook gewoon op internet te downloaden.
Conclusie:
Een wachtwoord is natuurlijk heel belangrijk. Gebruik daarom een lang wachtwoord met zoveel mogelijk verschillende tekens, minimaal 8. Denk ook aan vreemde tekens, die mag je ook gebruiken. Zorg dat je voor zoveel mogelijk accounts een ander wachtwoord hebt. Bewaar het wachtwoord op een veilige plaats of onthoud het alleen.