===== 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: \( 4531^2 = 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: \(2061^2 =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 + \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!