Jelszó (pin) tárolás
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.
- Adott egy ügyfél pin kódja: 4531
- Emeljük a négyzetére: 45312=20529961
- Az eredményből vegyünk el a középső 4 számjegyet, hogy újra 4 jegyű számot kapjunk: 2061. Azaz csak a két-két szélső számok maradtak.
- Emeljük újra négyzetre: 20612=4247721
- Az eredményből vegyünk el a középső 3 számjegyet, marad az első 2 és az utolsó 2. 4221
- Csináljuk meg a négyzetre emelést és a számjegyek elvételét 1000-szer!
- Tegyük fel hogy a végeremény: 6538 lesz.
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+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!