Biztonságos jelszó közlés és tárolás (szerver/kliens)

Elméleti cikkünkben most arról lesz szó, hogyan érdemes (kell) a jelszavakat küldözgetni, tárolni, kezelni szerver és kliens oldalon, és úgy egyáltalán elméletileg.

A jelszó útja a felhasználótól a szerverig

Az egyik leggyakoribb eset, amikor a felhasználótól bekérjük a regisztrációs vagy beléptetési folyamatnál a jelszavát, majd azt elküldjük a szerver felé, ellenőrzésre, tárolásra. Sokan úgy vannak ezzel a résszel, hogy elküldik a beírt jelszót simán kódolatlanul a szerver felé. A jelszó így kódolatlanul mozog a hálózati forgalom részeként, azt megfigyelve máris megtudják az illető jelszavát.

Ezért javasolt már a kliens oldalon elkódolni a felhasználó jelszavát és úgy elküldeni azt a szerver felé. Persze a tökéletes megoldás az, ha nem sima http, hanem https protokollon történik a hitelesítés, mivel így maga az adatfolyam is kódolt, nem csak a jelszó.

Egy másik (kevésbé szerencsés) megoldás, amikor nem kérjük be a felhasználótól a jelszót regisztrációkor, hanem azt mi generáljuk véletlenszerűen és levélben kiértesítjük. Mondanom sem kell, bármilyen véletlenszerű a jelszó, amint valaki elcsípi a levelet, vagy megtekinti azt, máris tudomása van a jelszóról. Ezt a gyakorlatot nem ajánlom.

A jelszó tárolása a szerveren

Amikor valamilyen formában megkapjuk a klienstől a jelszót (kódolva vagy kódolatlanul), azt el is kell tárolni.

SOHA nem tároljuk el a jelszavakat sima, szöveges formában, mindig valamilyen (és ez a fontos) visszakódolhatatlan formában kell azokat tárolni. Mivel nekünk és tulajdonképpen a felhasználón kívül senkinek nem kell tudnia a jelszavakat! Így annak pontos ismerete nem szükséges, mivel számunkra elegendő a mindig csak az ugyanúgy elkódolt jelszavakat összehasonlítani, ha egyeznek, akkor jó jelszót adott meg a felhasználó. Ezért a tároláskor már egy kódolt, nem visszafejthető kódot kell letárolni. Ezenfelül javasolt a jelszót sózni (salt) a kódoláskor.

A jelszó sózása (salt)

A jelszó-sózásnak az a lényege, hogy a jelszót még kiegészítjük valamilyen formában, plusz karakterekkel. Ez történhet a jelszóvégén, elején, a forma mindegy. A lényeg, hogy a jelszót még egy plusz információval ellátjuk mielőtt a végleges, tárolandó formára kódoljuk, így nehezítve a visszafejtést.

Megjegyzés: a visszafejtés jelentése itt a brute-force próbálkozásokat takarja.

Egyszerű jelszókódolás: kódolás(’jelszo’);

Sózott jelszókódolás: kódolás(’jelszo’+’so’);

Így ha valaki vissza is fejti az elkódolt jelszavakat, akkor egy hamis/ál-jelszót fog kapni. Persze itt igazából nem is az a lényeg, hogy hamis jelszót kapjon a feltörést végző, hanem az, hogy a brute-force eljárást megnehezítsük.

A jelszavak kódolása

A jelszavakat már nem érdemes MD5 algoritmussal kódolni, sem SHA-1 algoritmussal sem.

"2005 óta elektronikus aláírás területen használata nem javasolt, és 2010. december 31-ével az utódja, az SHA-1 algoritmus is kiváltandó az SHA-256 algoritmussal." forrás: http://hu.wikipedia.org/wiki/MD5

Ezeket már mind beláthatóan rövid idő alatt képesek feltörni brute-force eljárással. SHA-2,vagy SHA-3 kódolási eljárásokkal érdemes tárolni a jelszavakat.

brute-force törés, visszafejtés

A fent említett kódolások mind visszafejthetetlen lejárások, ami azt jelenti, hogy matematikailag nem ismert a dekódolási folyamat. Ez természetesen nem azt jelenti, hogy nem lehet feltörni az így tárolt jelszavakat. A visszafejthetetlen kódolások gyenge pontja a brute-force törés, ami röviden azt jelenti, hogy mindenegyes jelszó variációt végig próbálunk az ismert kódolással, ha egyezik az elkódolt jelszavunk a megszerzett már kódolt jelszóval, akkor megtaláltuk az eredeti jelszót.

Bár ez egy nagyon időigényes folyamat, a technika folyamatos fejlődése miatt egy idő után elavulnak az újabb kódolások is, így azokat le kell cserélgetni.

Példa MD5 törésre: http://www.md5decrypter.com/

Buy and Trade Bitcoin at Binance