Tuurlijk, een wachtwoord van 20 characters gaat niemand meer hacken.
That said, kansloos zou ik het niet noemen: op zich kan hashcat prima wachtwoorden van 8 characters ophoesten voor je... Dat er geen rainbow table te vinden is daarvoor is logisch, (26+26+10)^8 = 218.340.105.584.896 . Een moderne GPU kan miljarden MD5 hashes per seconde doorrekenen (ocl-hashcat haalt 6 mld hashes per seconde). Beetje zonde van de schijfruimte. Klopt, dan krijg je een collision, maar dat is goed genoeg.
Ok, voor de duidelijkheid, ik deed een paar beweringen:
1. Het is onzin dat je van de meeste wachtwoorden makkelijk een MD5 kunt vinden in bestaande search engines of databases (zoals o.a. RobbieB en AnonymousWP wel suggereerden).
Neem namelijk een
willekeurig wachtwoord van 8 karakters (gewoon alfanumeriek, hoeft niet eens met leestekens), dan is de kans astronomisch klein dat je de MD5 daarvan in Google of een rainbow of dictionary table vindt.
2. Het is ook onzin dat je met een MD5 hash van een goed of zelfs maar redelijk wachtwoord, makkelijk het oorspronkelijke wachtwoord kan uitvogelen. Dat kan alleen van hele slechte wachtwoorden (die in dictionary of rainbow tables staan) of hele korte wachtwoorden (die je kunt bruteforcen).
Wat inderdaad wel kan met MD5 is een preimage attack, wat uiteraard niet afhangt van hoe goed of lang het oorspronkelijke password is. Dat levert een 'random' ander password op met dezelfde hash, en daarmee heb je dus
niet het oorspronkelijke password maar kun je wel inloggen op het betreffende account. Dat is op zich al genoeg reden om nooit MD5 te gebruiken, maar deze kwetsbaarheid is wel minder erg, omdat je met deze kwetsbaarheid alleen op die ene betreffende dienst of site kunt inloggen. En niet allerlei andere plaatsen waar de gebruiker in kwestie hetzelfde wachtwoord gebruikt (wat helaas ontzettend vaak het geval is).
Wil ook wel even een scriptje online zetten, dwz: hoeveel geld levert het ook alweer op?

Nou ik noemde verwedden van een flink bedrag om nummer 1: dat je bij een willekeurig wachtwoord (zoals bijvoorbeeld "Fn5d3bMy") een extreem kleine (zeg maar afgerond nul) kans hebt dat je de MD5 daarvan in een lijst kunt vinden.
Het oorspronkelijke wachtwoord brute forcen wordt zelfs met relatief korte wachtwoorden al gauw lastig. Ik zou het bijvoorbeeld verdomd knap vinden als je mijn password van 10 alfanumerieke tekens kunt achterhalen waarvan de MD5 261f78be9aa1b9588815c575d56afb84 is (en ter verificatie
deze salted sha512).
Een collision vinden (dus niet het echte wachtwoord maar wel eentje die volstaat om in te loggen) bij een gegeven hash lukt met brute force wel, dus daar durf ik geen geld tegenover te zetten
Wat ik trouwens niet weet: hoe makkelijk is het om een MD5 collision te vinden bij een gegeven hash en een bekende salt? Dus stel dat MD5(onbekend password + bekende salt) = bekende hash. Bijvoorbeeld salt = O3TRc5nzv6JkMIL8jxsE2ljTg en hash = 0cb7c6d50eb5a91909baf31cecee142a, is het dan makkelijk om P8YM1cHh (het echte wachtwoord) te vinden, of een andere hit die volstaat aan MD5(iets + salt) = hash ?
Ik neem aan dat dat praktisch net zo onveilig is (omdat de search space even groot is) maar ik weet eerlijk gezegd niet hoeveel verschil het maakt doordat die salt een beperking oplegt.
Persoonlijk zou ik nooit meer MD5 gebruiken voor security doeleinden. Inherent 'trage' algoritmes zoals scrypt, bcrypt en PBKDF2 zijn precies om deze reden bedacht.
Op zich natuurlijk mee eens, ik zou ook absoluut nooit voor MD5 kiezen. En inderdaad een trage KDF met parametriseerbare moeilijkheidsgraad zoals precies de voorbeelden die je noemt. Maar het verschil in veiligheid is minder zwart/wit dan men denkt. Slechte wachtwoorden zijn nu eenmaal onveilig, dat blijft de zwakke schakel in de ketting. En in een grote groep random gebruikers is er altijd een significant percentage met hele slechte wachtwoorden.
Dus stel dat je een database steelt van een grote website met een miljoen hashes er in. Of dat nou unsalted MD5 hashes zijn of bcrypt hashes met unieke 128 bit salts en hele hoge iteration counts, ook in dat tweede geval zul je nog steeds zeker van duizenden accounts het wachtwoord kunnen achterhalen.
TL;DR = ook als je wel fatsoenlijke password hashing gebruikt, heb je nog steeds een groot probleem als de database met hashes gejat wordt.
(excuus voor het lange antwoord)