Van wachtwoorden sla je eigenlijk alleen de
hash op, waarbij je bij voorkeur gebruikmaakt van een algoritme in de
SHA-familie. SHA-256 wordt veelgebruikt. Een verouderd algoritme, welke nog steeds wel veel gebruikt wordt, is het
MD5 algoritme. De kans op zogenaamde
collisions is bij laatstgenoemde echter groter. Dit houdt in dat de kans dat twee verschillende
strings een zelfde hash opleveren groter is.
Omdat een string (bijvoorbeeld een wachtwoord) altijd dezelfde hash oplevert, zul je in een tabel waar enkel gehashte wachtwoorden (dus
zonder salt) opgeslagen worden, meerdere hashes vinden die hetzelfde zijn. Hieruit kun je concluderen dat die gebruikers dezelfde wachtwoorden hebben gekozen.
Om te voorkomen dat hackers aan de gang gaan met je database en met behulp van
rainbow tables in korte tijd veel wachtwoorden buit kunnen maken (immers, als er 1 gekraakt is, geldt dit wachtwoord ook voor alle andere gelijke hashes!), kun je per gebruiker een
salt toevoegen.
Een salt is een willekeurige string van karakters die aan het (ongehashte) wachtwoord worden geplakt, waarna de hash van deze combinatie wordt opgeslagen. De salt zelf mag gewoon onversleuteld worden opgeslagen bij het user record.
Omdat voor iedere gebruiker een andere salt geldt, zullen alle hashes verschillend zijn, ook als meerdere gebruikers hetzelfde wachtwoord hanteren. Kortom, als een hacker nu 1 wachtwoord kraakt, betekent dit niet automatisch dat van een x aantal anderen ook meteen het wachtwoord gekraakt is.
Lang verhaal kort: salts sla je op bij de rest van inloggegevens.
quote:
Dit is irrelevant. Iedereen mag de salts weten, aangezien je daar niets aan hebt, zelfs niet in combinatie met het gehashte wachtwoord (+ salt), omdat hashes een vorm van
one way encryption zijn. Oftewel, van A naar B is makkelijk, van B naar A is onmogelijk.
You know, I rather like this God fellow. He’s very theatrical. A little pestilence here, a plague there... Omnipotence...got to get me some of that.