werden wachtwoorden van gebruikers via het zwakke en eenvoudig te kraken MD5-algoritme gehasht.
MD5-hashes van wachtwoorden zijn
niet eenvoudig te kraken.
De kraakbaarheid van MD5 bestaat eruit dat je relatief eenvoudig twee verschillende inputs kunt genereren (die, specifiek voor MD5, aan speciale criteria moeten voldoen) die tot dezelfde hashwaarde leiden. Hierbij gaat het om relatief lange inputs, niet om wachtwoorden van 20 tekens of minder. Zie het plaatje in
https://en.wikipedia.org/wiki/MD5#Collision_vulnerabilities om een idee te krijgen van de lengte (2 bestanden van 128 bytes, met een paar verschillen op zeer specifieke plaatsen).
Uit
https://en.wikipedia.org/wiki/MD5#Preimage_vulnerability:
Preimage vulnerability
In April 2009, an attack against MD5 was published that breaks MD5's preimage resistance. This attack is only theoretical, with a computational complexity of 2^123.4 for full preimage.
Met andere woorden, de betrouwbaarheid is met minder dan 5 (van 128) bits gedaald als je, gegeven een
onbekende input (het wachtwoord), die input wilt vinden (of iets totaal anders, een "collission") die tot dezelfde MD5 hash leidt.
Cryptografisch is MD5 -m.b.t. preimage attacks- "gekraakt" vanwege die afname met bijna 5 bits voor een preimage attack - echter: "This attack is only theoretical" - want 2^125 is nog steeds een astronomisch groot getal.
Elk snel hash-algoritme, ook van de nog als veilig bekend staande soorten (zoals SHA-256 of SHA-3 varianten), is ongeschikt om
zwakke wachtwoorden (dat zijn
ooit gelekte -ook lange en/of complexe- of
voorspelbare wachtwoorden) mee te hashen - omdat je van een ellenlange lijst van die zwakke wachtwoorden alle hashes kunt uitrekenen (en desgewenst opslaan in wat een "rainbow table" wordt genoemd).
Vervolgens kun je, voor elke wachtwoordhash afkomstig van de server, checken of deze vóórkomt in je tabel. Als dat het geval is, weet je het wachtwoord. Je
zou dit "kraken" kunnen noemen, maar dat vind ik onterecht; in elk geval heeft dit niets met
cryptografisch kraken te maken. Sterke wachtwoorden (die nog nooit gelekt, lang genoeg en onvoorspelbaar zijn) vind je hier niet mee.
Met andere woorden: als de website SHA-256 (waar zeer snelle hardware voor ontwikkeld is) i.p.v. MD5 zou gebruiken, zou dat prima zijn geweest? NEE!
Ik vind het dus een onjuist verwijt. Het grootste probleem hier is dat veel mensen ooit eerder (niet alleen door henzelf) gebruikte wachtwoorden kiezen. Als de betreffende website ooit eerder gekozen wachtwoorden zou weigeren, en de opgeslagen wachtwoord-hashes regelmatig zou scannen op
nieuwe gelekte wachtwoorden en bij gevonden "matches" de gebruikers zou dwingen (password-reset) om een ander wachtwoord te kiezen, zou
zelfs MD5
in principe goed genoeg zijn.
Vanwege het feit dat MD5
voor een andere toepassing ernstig is gekraakt, en er bij softwareontwikkelaars verwarring zou kunnen onstaan over "welke toepassing ook alweer", is het onverstandig om MD5 te blijven gebruiken. Het verwijt hier "het zwakke en eenvoudig te kraken MD5-algoritme" zou echter voor een rechter geen stand moeten houden, want het is fundamenteel onjuist.
Dit nog los van het feit dat ik nergens zie dat wachtwoordhashes zouden zijn gelekt, bijv. doordat de website gehacked is. Als dat gebeurt zit het er dik in dat ook allerlei andere persoonsgegevens op straat liggen, die ongetwijfeld niet eens gehashed of versleuteld op de server staan. Wat is er erger?
Je kunt natuurlijk beargumenteren dat mensen
hun eigen wachtwoorden hergebruiken en dat het vooral
daarom erg is als die wachtwoorden, samen met e-mailadressen, op straat komen te liggen. Maar is hergebruik van
eigen wachtwoorden de schuld van die website?
Het verstandigst is het (voor website-eigenaren) om state-of-the-art "memory-hard" algoritmes zoals Argon2id te toe te passen, maar persoonlijk heb ik liever dat ze hun hun geld en tijd (is ook geld, als je capabel personeel kunt vinden) besteden aan de beveiliging van de website en het minimaliseren van (te veel en/of te lang) opgeslagen persoonsgegevens.