Miért van szükség hashfunkcióra, és hogyan kell titokban tartani a jelszavakat?

Időről időre azt akarjuk, vagy sem, de vannak adatbázis-kiszolgálók hackerei. Mindezek miatt fontos, hogy győződjön meg arról, hogy az érzékeny adatokat, például a felhasználói jelszavakat, nem hozza nyilvánosságra. Ma a webes alkalmazásban a hasítási és jelszóvédelmi intézkedések témáját fogjuk lefedni.

A kriptológia meglehetősen összetett téma, amelyben messze vagyok egy szakértőtől. A mai napig különböző egyetemek és biztonsági szervezetek vesznek részt a kutatás területén.

Ebben a cikkben megpróbálom egyszerűen bemutatni magam, a jelszavak tárolására szolgáló erős módszer témakörében a webes alkalmazásokban

Hashing a karakterláncokat és az egész elemeket kódolja.

Ennek oka az egyirányú hasítás. Az "egyoldalú" azt jelenti, hogy nagyon nehéz vagy lehetetlenné válik az átalakulás visszafordítása.

A leggyakoribb hash függvény az md5 ():

Az md5 () függvénnyel mindig 32 karakterből álló karaktert kapsz. De ezek a karakterek hexadecimálisak lesznek; Technikailag egy hash lehet egy 128 bites egész szám. Az md5 () függvényben tetszőleges hosszúságú karakterláncokat és számokat helyezhet el, de a kimeneten mindig 32 karakterből áll. Ez a tény csak megerősíti azt a tényt, hogy ez egyirányú funkció.

Normál regisztrációs folyamat:

  • A felhasználó kitölti a regisztrációs űrlapot, beleértve a "Jelszó" mezőt.
  • A szkriptkezelő ezeket az adatokat az adatbázisba helyezi.
  • Az adatbázishoz történő írás előtt a jelszót egy hash függvény feldolgozza.
  • A jelszó eredeti értéke semmilyen helyen nem használható.

Bejelentkezési folyamat:

  • A felhasználó belépési és jelszavát adja.
  • A parancsfájlkezelő elrejti a felhasználó által megadott jelszót.
  • A szkript egy bejegyzést talál az adatbázisban, és elolvassa a benne tárolt jelszó értékeit.
  • Az adatbázisból és a felhasználó által beírt jelszóból álló jelszót összehasonlítjuk, és ha azok megegyeznek (a hasított formában), akkor a felhasználó be van engedve a rendszerbe.

A jelszószórás folyamatát később ismertetjük ebben a cikkben.

Ne feledje, hogy a jelszó eredeti értékét senki sem mentette. Ha az adatbázis a támadókhoz jut, akkor nem látják a jelszavakat, ugye? Igen, nem igazán. Nézzünk potenciális "lyukakat".

"Összetörések" akkor merülnek fel, ha két különböző típusú adat törlésével azonos eredményt kapunk. Valójában attól függ, hogy milyen funkciót használ.

Hogyan lehet ezt használni?

Például láttam néhány elavult szkriptet, ahol a crc32 () függvényt használták a jelszó hashhoz. Ez a funkció 32 bites egész számot ad vissza. Ez azt jelenti, hogy a kimeneten csak 2 ^ 32 (vagy 4,294,967,296) lehet opció.

Jelszó jelszóval:

Most játsszunk egy gazembert, aki ellopta az adatbázist egy elrejtett jelszóval együtt. Nem tudjuk átalakítani a 323322056-ot "supersecretpassword" -ra, de egy egyszerű szkriptnek köszönhetően felvehetünk egy olyan jelszót, amely pontosan az adatbázissal azonos formában lesz:

Ez a forgatókönyvnek biztosan időre van szüksége, de a végén egy stringet ad vissza. Most már használhatjuk a sztringet - a "supersecretpassword" helyett - amely lehetővé teszi számunkra, hogy bejelentkezzenünk a jelszóval rendelkező felhasználóként.

Például, itt a forgatókönyv néhány percen belül visszatért hozzám az "MTIxMjY5MTAwNg ==" sort. Próbáljuk ki:

Hogyan lehet ezt megakadályozni?

Manapság, még a legegyszerűbb otthoni számítógépen is, másodpercenként több milliárd hash függvényt használhat. Ezért olyan hash függvényre van szükségünk, amely a lehető legtöbb értéket generál.

Például használhatod az md5 () függvényt, amely 128 bites hashajtókat generál. Így a kiválasztási lehetőségek sokkal több 340,282,366,920,938,463,463,374,607,431,768,211,456 lesz. Az ütközés elkerülésére az összes iteráció futhat. Azonban néhány ember még mindig megtalálja a "lyukak" mellett ez itt).

A Sha1 () a legjobb alternatíva. visszaad egy 160 bites hashot.

Még akkor is, ha megszüntettük az ütközést, ez nem jelenti azt, hogy minden oldalról biztosítjuk magunkat.

A szivárványtábla a leggyakrabban használt szavak és kifejezések hash értékének kiszámításával épül fel.

Az ilyen táblázatok milliókat, sőt több milliárd vonalat is tartalmazhatnak.

Például egy ilyen táblázat létrehozásához át lehet menni a szótáron, és létrehozhat egy szóközt minden szóhoz. A szavak kombinációjához hashajtókat is létrehozhat. De ez nem minden; akkor is beilleszthet számokat a szavak előtt / után / között, és írhatja le az ilyen hash értékét az asztalra.

Itt ilyen hatalmas Rainbow Tables összeállítható és használható.

Hogyan használható:

Képzeljük el, hogy van egy adatbázist a kezünkben tízezres jelszóval. Nem lesz különösebben nehéz összehasonlítani őket a szivárványtábla értékeivel. Természetesen nem minden jelszó egybeesik, de a végén még egy pár lesz!

Hogyan védheti meg magát:

Add hozzá a "sót":

Mindössze annyit kell tenned, hogy a "sót" és a jelszót összefogja a hasítás előtt. Valószínűtlen, hogy a szivárvány asztaloknál ilyen érték van. De még mindig veszélyben vagyunk!

Ne felejtsd el, hogy a szivárványtáblák az ellopás után alakulhatnak ki.

Hogyan lehet ezt használni?

Ha sót hoztál létre, akkor az ellopás után az betolakodók kezébe kerül. Mindössze annyit kell tennie, hogy új szivárványtáblát állítanak elő az adatbázisból kapott "sókkal".

Például, a szivárványtáblában van egy hash az "easypassword" vonalról. Az új Rainbow táblában a korábbi érték helyett az "f # @ V" Hu ^% Hgfdseasypassword "karakterláncot kapja. Amikor futtatják a forgatókönyvet, újra megkaphatnak néhány mérkőzést.

Hogyan védekezhetsz?

Használhatjuk az "egyedülálló sót", amely minden felhasználó számára más lesz.

A só pótlása annak érdekében, hogy egyedivé váljon, felhasználói azonosítóvá válhat:

Ez önmagában azt jelenti, hogy a felhasználói azonosító soha nem fog változni.

Szintén véletlenszerű sorozatot hozhatunk létre minden egyes felhasználó számára, mint "egyedi sót" kapunk. Ezt a sót ugyanúgy kell tárolni, mint a felhasználó nyilvántartását.

Ez a módszer megvéd bennünket a szivárvány asztaloktól, mert minden jelszónak saját egyedi sója van. A támadónak 10 millió különböző szivárványtáblát kell létrehoznia, ami gyakorlatilag kivitelezhetetlen.

A legtöbb hash függvényt fejlesztették ki, mivel gyakran használják bizonyos értékek vagy fájlok ellenőrzőösszegeinek kiszámításához az adatok integritásának ellenőrzésével.

Hogyan kell használni?

Amint azt korábban mondtam, egy nagy teljesítményű grafikus kártyával rendelkező számítógép számolhat másodpercenként több milliárd hasist. A támadók "brute force" -ként használhatják, minden egyes lehetséges jelszó ellenõrzésével (az összes lehetséges opció teljes keresésével).

Ha úgy gondolod, hogy egy 8 karakteres jelszó ellenállhat a "durva támadásnak", akkor képzeld el:

  • Ha a jelszó nagybetűket, nagybetűket és számokat tartalmaz, ez csak 62 (26 + 26 + 10) lehetséges karakter.
  • A 8 karakterből álló karakterlánc 62 ^ 8 kombinációt tartalmaz. Ez valamivel több mint 218 billió.
  • Ha másodpercenként 1 milliárd lekeverést dolgoz fel, a jelszót 60 órán belül felveszi.

6 karakteres jelszó esetén ugyanaz a művelet több mint 1 percet vesz igénybe.

Ne habozzon megkövetelni a felhasználók számára, hogy 9 vagy 10 karakter hosszúságú jelszóval rendelkezzenek, bár ez ideges lesz.

Hogyan védekezhetsz?

Használjon lassú hash funkciókat

Képzeld el, hogy olyan hash függvényt használsz, amely másodpercenként 1 millió lajtást generál 1 milliárd helyett. A támadónak 1000-ször hosszabb ideig kell felvennie a jelszavakat. 60 óra lesz 7 év!

Az első lehetőség a funkció létrehozása:

Vagy használhat olyan algoritmust, amely "költségparamétert" használ, például BLOWFISH. PHP-ben ezt a crypt () metódussal lehet végrehajtani.

A crypt () metódus második paramétere dollárjelekkel ($) elválasztott értékeket tartalmaz.

Az első érték '$ 2a', ami azt jelenti, hogy a BLOWFISH algoritmust fogjuk használni.

A második érték '$ 10'. Ebben az esetben ez a "költségparaméter". Ez a paraméter jelenti az elvégzendő iterációk számát (10 => 2 ^ 10 = 1024 iteráció.) Az érték 04-től 31-ig terjedhet.

Futtassunk egy példát:

Ennek eredményeképpen van egy hash, amely tartalmazza az algoritmust ($ 2a), a költségparamétert ($ 10) és a 22 karakternél hosszabb sót. A többi a hash. Teszteljük:

Ha ezt futtatjuk, megkapjuk az üzenetet: "Hozzáférés engedélyezett!"

Tekintve mindent, amit megtudtunk, egy osztályt írunk:

Miért van szükség hashfunkcióra, és hogyan kell titokban tartani a jelszavakat?

Az információk azonnali megszerzésére két csatorna (látás és hallás) révén a tanítás hatékonysága sokkal nagyobb, mint a könyvek tanulása. És a házi feladatok és az online tesztek lehetővé teszik, hogy folyamatosan gondolkodj a tanult nyelvben, és azonnal ellenőrizd a tudását!

Miért van szükség hashfunkcióra, és hogyan kell titokban tartani a jelszavakat?

Miért van szükség hashfunkcióra, és hogyan kell titokban tartani a jelszavakat?

Ha sokáig szeretné megtanulni a HTML-t, akkor remek hírekkel szolgálok neked!

Miért van szükség hashfunkcióra, és hogyan kell titokban tartani a jelszavakat?

Ha már megtanulta a HTML-t, és tovább akar lépni, a következő lépés a CSS-technológia megtanulása.

Miért van szükség hashfunkcióra, és hogyan kell titokban tartani a jelszavakat?

Ha azt szeretnénk, hogy megértsék a fogalmak domain és tárhely, megtanulják, hogyan kell létrehozni egy adatbázist, feltölteni a fájlokat a honlapon keresztül FTP szerver, hozzon létre aldomain konfigurálja a postaládákat a helyszínen, és ellenőrzi a részvétel, a tanfolyam kifejezetten az Ön számára!

Kapcsolódó cikkek