Adott egy képzeletbeli bankjegy automata, amelybe bankkártyát helyezve akkor is lehet pénzt felvenni, ha nincs kapcsolat a bankkal. Ehhez az kell, hogy a pin kódokat tároljuk az automatában.
De mi történne, hogyha éjjel valaki ellopná a kódokat az adatbázisból és megszerezné a bank ügyfeleinek a pin kódját? Hogyan lehetne ezt kivédeni? Pl. egyszerű Hash függvénnyel Neumann János ötlete alapján.
Milyen viszonyban van a kezdeti 4531 és a 6538? Olyan mintha egy párt alkotnának. Ha valaki tudja, hogy 6538 a tárolt érték és ellopja az adatbázist, nem tudja megmondani, hogy melyik számból jött ki, mivel a számjegyek elvétele olyan mértékű adatvesztés, amit már nem lehet visszaállítani/kitalálni, viszont akárhányszor végezzük el, akkor is a kívánt eredményt kapjuk meg.
A weboldalak a jelszókat is hash kódokkal tárolják, azaz nem a beírt kódot tárolják, hanem egy algoritmus szerint átalakítják a bevitt jelszót és az eredményét tárolják.
Ezen az oldalon egy beírt jelszónak különböző hash kódjait lehet online generálni: http://www.fileformat.info/tool/hash.htm
Például az ′1234′ kód MD5 hash-e: md5(1234)=81dc9bdb52d04dc20036dbd8313ed055
Ezek alapján mondhatjuk, hogy a hash-ek tárolása teljes biztonságot ad? Sajnos nem. Tegyük fel, hogy egy hacker ellopta az adatbázist és éppen a mi jelszónkat böngészi. Ezen az oldalon beírja a hosszú hash kódot: http://md5cracker.org/decrypted-md5-hash/81dc9bdb52d04dc20036dbd8313ed055
Sajnos már tudja is a jelszónkat. A megoldás egyrészt az, hogy hosszú jelszót használunk, de azt nehéz megjegyezni. Másik megoldás, hogy minden jelszóhoz a hash képzéskor egy un. só-t adunk, ami egy fix string és azzal együtt generáljuk a kódot:
$$ md5(1234 + \text{my_strong_salt}) = 0e0db19d64ce23edc1bfb52063f25028$$
Próbáljuk rákeresni az eredményre a cracker oldalon!
Mostmár csak az a fontos, hogy a sót jól elrejtsük!