Door Bergen: Door Anoniem: Maar ga jij als security officer van een bedrijf waarvan 100K usernames + password hash + 10 karakter salt lekken dan zeggen " niks aan de hand, want de hash en de salt is goed ? "
Nee, want 10 karakters is veel te weinig voor een salt.
Eh ? Met een salt van 10 karakters heb je al 2^(10*6) verschillende uitkomsten mogelijk voor eenzelfde input.
(Uitgaande nog maar van printable tekens, dus 64 mogelijkheden = 6 bits).
Je rainbow table wordt 2^60 x zo groot en jij noemt dat veel te weinig ?
Ik wil weten waar jij je storage haalt !
(Ik schreef en bedoelde -salt- , niet maximale password lengte )
Je kunt salten wat je wilt, maar Linkedin1 en MyLinkedInPW, password1 etc etc vallen er echt wel uit. En van dat kaliber zijn er zoveel dat je niet anders kunt dan reageren alsof het volledige bestand gecompromitteerd is.
Niet als de wachtwoorden salted zijn, want zelfs met een kleine salt van bijvoorbeeld 5 karakters (zoals "a,8!c") is een wachtwoord als 'Linkedin1' al te lang/ingewikkeld om te achterhalen met brute force technieken, rainbow tables of dictionary attacks. "Linkedin1a,8!c" (14 karakters) vind je nooit met de huidige technieken.
Dat is niet hoe een salt werkt. Je schrijft alsof het salt geheim kan blijven en dus een verlenging van het password geeft.
Een salt is gewoon bekend in/bij de password hash functie (en dus bij de hacker die de hash-file te pakken krijgt), want die moet in staat zijn het user password te vergelijken met de opgeslagen hash+salt resultaat.
Het doel van het salt is dat als 10 mensen allemaal "password" als password nemen, er toch 10 verschillende hash resultaten in de file staan, waarvan niet te zien is dat ze hetzelfde password hebben.
En waarbij een precomputed rainbow table tig keer zo groot wordt, omdat elk password dus evenveel keren voorkomt als de salt groot is.
Ik wil niet al te hard in de ouwe lullen stand, maar je zou echt naar Crack en Jack the Ripper moeten kijken, en de papers die proefondervindelijke resultaten ervan beschrijven, met welke toegevoegde rule of woordenlijst en weer een paar procent extra accounts uit rolde.
Nogal veel mensen halen hun password uit een feitelijk erg beperkte zoekruimte.
Bij password crackers gaat het bij de dictionary niet (letterlijk) om de Van Dale, maar om woorden, en de 'normale' permutaties die mensen typisch gebruiken als password.
qwerty, asdf, variaties op de username, 1=l, e=3, a=@ , Klingon, staan niet in de Van Dale, maar wel in de dictionary en de permutatie rules op de basis woorden lijsten.
Dan is LinkedIn1, LinkedinPW1, L1nked1n,L1nk3d1n echt niet buiten bereik.
De mensen zijn gewoon niet zo veel veranderd.
Ja lekker, moet je mensen nog meer passwords door de strot duwen.
Shared secrets tussen systemen bedoel ik natuurlijk, niet tussen een mensen en systemen.
Ok, maar uiteindelijk moet je op een end-to-end pad uitkomen tussen user password en authenticatie back end.
Als je tot aan de end-user toe een challenge-response geeft (en dus de hashing door javascript bij de enduser laat uitvoeren) gaat er nooit een plaintext password over de verbinding tussen user en ook niet over alle tussenliggende systemen.
Het nadeel is dat ergens aan de serverzijde een plaintext van het password beschikbaar moet zijn ...
Ik wil wel zeggen dat hashes + salt *beter* zijn dan plaintext, maar ik bestrijd dat ze de bij een compromise van de username/hash database je de mogelijkheid geven om anders te reageren dan bij een plaintext password lek.
Uiteraard, om klanten gerust te stellen, inclusief advies om wachtwoorden te veranderen, etcetera. Ook al weet je dat het technisch met de huidige stand van zaken onmogelijk is om bepaalde wachtwoorden te kraken (zoals mijn eigen hash die ik hierboven postte), dan nog is het een goed idee om jezelf in te dekken en iedereen het wachtwoord te laten veranderen enzo. Dus je hebt gelijk, netto moet je precies hetzelfde reageren.
Ik ben geen enorme fan van de boeken van WF Hermans, maar hij kon sommige titels goed kiezen ;-)