Az, hogy milyen jelszót kell létrehozni, nagyban függ a jelszó tárolási módjától.
Évekkel ezelőtt nagyon nehéz volt feltörni a nyolc karakterből álló véletlenszerű jelszavakat, amelyek kis- és nagybetűket, szimbólumokat és számokat tartalmaztak. Egyes esetekben egy ilyen jelszó feltörése évekig tartott.
A napjainkban változó technológiának és a bérelhető gépeknek köszönhetően ez az idő órákra csökkent. De hogyan tárolódnak ezek a jelszavak?
A jelszavak online tárolása
A rendszerek nem tárolják a felhasználói jelszavakat közvetlenül fájlokban vagy adatbázisokban, mert a támadók átvehetik azt az adatbázist, ahol a rendszerek tárolják a jelszavakat. Ehelyett a rendszerek titkosítják a felhasználói jelszavakat, és a támadók mindegyik jelszó titkosított verziójával találkoznak.
Vannak olyan algoritmusok, amelyeket a rendszerek a jelszavak titkosítására használnak. Az egyik ilyen algoritmus a szimmetrikus algoritmus. A szimmetrikus algoritmus a titkosítás egy fajtája ahol ugyanazt a kulcsot használhatja titkosításhoz és visszafejtéshez. Az adatok titkosításához használt kulcs ugyanaz a titkosításhoz és a visszafejtéshez. A szimmetrikus algoritmusok biztonsága bizonyos kockázatokat rejt magában, mivel csak egy kulcs van a visszafejtéshez. Emiatt a rendszerek általában nem használnak szimmetrikus algoritmusokat a jelszavak titkosítására.
Általában a rendszerek a titkosításhoz hash algoritmusokat használnak. A hash algoritmusok az adatok integritásának ellenőrzésére és megjelenítésére szolgálnak, nem pedig az adatok titkosítására. A hash algoritmusok az adatokat rögzített méretű hash-vé alakítják. Ezek a hash-ek általában az adatok egyedi kivonatát jelentik.
A hash algoritmusnak köszönhetően, ha egy támadó átvette a jelszóadatbázist, a támadó innen visszafelé nem férhet hozzá a jelszóhoz. Van egy nagyon fontos árnyalat, amire itt érdemes odafigyelni. Elméletileg az a támadó, aki feltör egy olyan rendszert, amely minden jelszókombinációhoz ugyanazt a hash algoritmust használja, összehasonlíthatja a kapott eredményeket. Ha a támadó az összehasonlítások eredményeként ugyanazt az értéket állítja elő, akkor a támadó megtudta, mi a jelszó nyílt verziója. Ez a módszer a próbálkozásról és a hibáról szól, és a támadásnak ez a formája is általában brute force támadásnak nevezik.
A 2000-es évek elején több száz évbe telhetett, amíg a 8 karakterből álló, népszerű kivonatoló algoritmusokkal titkosított jelszavak összes kombinációját kipróbálták. Természetesen ez a di nem tartalmaz olyan egyszerű kombinációkat, mint az "123456" vagy a "saját jelszó" ebben a készletben. A mai szoftver- és hardvertechnológiák fejlődésével a jelszavak feltörésének módja is sokat változott.
A feltörekvő GPU-k hatása
A grafikus processzorok (GPU) párhuzamos adatfeldolgozási képességei idővel javultak. A GPU-k nem képesek olyan sokoldalú műveletek végrehajtására, mint az általános célú CPU-k. Tehát bár vannak annyi mag és párhuzamos feldolgozási teljesítmény, nincs értelme szinte minden problémára használni őket, mint pl CPU.
Mégis lehetséges néhány jelszavakhoz használt hash algoritmus meglehetősen hatékonyan végrehajtani a GPU-n. A hagyományos CPU-kkal elérhető másodpercenkénti kiszámítható hash-értékek az új GPU-platformokkal rendkívüli mértékben megnövekedtek.
Ahhoz, hogy ötletet kapjon, vizsgálja meg az alábbi táblázatban az olyan hash algoritmusok másodpercenkénti kivonatolási számát, mint az NTLM, MD5 és SHA1. Egyelőre elég azt tudni, hogy ezek az algoritmusok csak egy hash algoritmusok. A táblázat elkészítéséhez 25 AMD Radeon GPU-ból álló fürtrendszert használtam.
Algoritmus |
Hashings Per Second |
NTLM |
350.000.000.000 |
MD5 |
180.000.000.000 |
SHA1 |
63.000.000.000 |
SHA512Crypt |
364.000 |
Bcrypt |
71.000 |
Scrypt |
33.000 |
Amint látja, egy ilyen rendszerrel másodpercenként 350 milliárdszor lehet NTLM-kivonatokat generálni. Ez azt jelenti, hogy a 8 karakterből álló jelszó összes kombinációját 6 órán belül kipróbálhatja. Ráadásul a példában szereplő hardver évekkel ezelőtti. Képzeld el a mai jelszófeltörő képességet.
Mit tegyenek a szoftverfejlesztők?
A programozók útja meglehetősen egyszerű: előnyben kell részesíteni azokat az algoritmusokat, amelyeknél hosszabb ideig tart a hash értékek kiszámítása a jelszavak titkosítása során. A fejlesztőknek nemcsak a CPU-n használt algoritmus teljesítményét kell megtudniuk, hanem azt is, hogy mennyire ellenálló a GPU-világgal szemben.
Ha a fejlesztők olyan szoftver keretrendszerrel dolgoznak, amely a jelszavas titkosítási folyamatokkal is foglalkozik, mint például a Django, Ruby on Rails és Spring Security, ellenőrizniük kell, hogy a megfelelő döntések születtek-e a keretek között Biztonság.
Például, Tervezze meg, amely a Ruby on Rails felhasználói műveleteinek egyik leggyakrabban használt könyvtára, a Bcryptet használja alapértelmezett kivonatoló algoritmusként. Lehetővé teszi egy másik módszer használatát is hash algoritmusként. A Bcrypt algoritmus megbízható, mivel még mindig nagyon sokáig tart, amíg a GPU meghibásodik.
Összefoglalva, minél tovább tart a hash érték kiszámítása, annál nagyobb biztonságban van.
Hány karakterből kell állnia a jelszavának?
Minden egyes használt extra karakter geometriailag megnöveli a jelszó feltöréséhez és a jelszó biztonságosabbá tételéhez szükséges próbálkozások és hibák számát.
Tekintsük ezt a helyzetet két különböző forgatókönyvön keresztül. Vegye figyelembe a fenti táblázatban az NTLM hash algoritmus értékeit, és képzelje el, hogy megpróbálja feltörni a jelszót. Képzelje el, hogy nyolc vagy több karakterből álló jelszavakat céloz meg.
Karakterek száma |
Kis- és nagybetűk és számok |
Kis- és nagybetűk, számok és speciális szimbólumok |
8 |
kevesebb, mint 1 perc |
2 perc |
9 |
2 perc |
2 óra |
10 |
2 óra |
1 hét |
11 |
6 nap |
2 év |
12 |
1 év |
200 év |
13 |
több mint 100 éve |
több mint 1000 éve |
Ha megvizsgálja a táblázatot, láthatja, hogy a legalább 12 karakterből álló jelszó használata biztonságos, ha a nagy- és kisbetűk, számok és speciális szimbólumok összes kombinációját használja. Ha nem használ speciális szimbólumokat, akkor kiderül, hogy 13 karaktert kell használnia biztonságos jelszóhosszként. Ha ebben a rendszerben az NTLM hash helyett a Bcrypt hash metódust használná, akkor 8 karakter is elég lenne. Azonban nincs lehetősége megtudni, hogy a weben keresztül bevitt rendszer melyik hash módszerrel tartja meg jelszavát. Ezért minden lehetőséget mérlegelnie kell.
A szoftverfejlesztők fő problémája, hogy szinte lehetetlen meggyőzni a felhasználókat egy minimum 12 karakteres jelszóról. Ma már elmondható, hogy az ilyen hosszúságú jelszóhasználat aránya alacsony. Ezért a kifejlesztett rendszer használati forgatókönyve szerint meg kell találni azt a középutat, amelyet a felhasználók elfogadnak. hogy javítsák jelszavaik biztonságát.
egy utolsó javaslat a fejlesztőknek, hogy ne csak a minimális hosszát, hanem a maximális hosszát is ellenőrizzék a felhasználónak bemutatott űrlapokon keresztül érkező bemeneteknek. Különösen akkor, ha engedélyezi a lassú számítású hash algoritmus, például a Bcrypt használatát a biztonság érdekében célból bizonyos kockázatokkal szembesülhet, ha nem szabályozza a beírt jelszó maximális hosszát a felhasználó. Például a támadók úgy hajthatnak végre támadást, hogy több tucat, 100 ezer karakterből álló jelszót próbálnak ki egyidejűleg néhány speciálisan előkészített kéréssel. Ebben az esetben nagy a valószínűsége annak, hogy rendszere nem reagál a többi felhasználóra.
Tanácsok a végfelhasználóknak
A jelszó hossza legyen legalább 12 karakter, és ügyeljen arra, hogy kis- és nagybetűket, számokat és szimbólumokat tartalmazzon. Soha ne felejtse el, hogy a jelszavát tároló rendszereket feltörhetik, és visszaélhetnek az Ön adataival. Nem tudhatja, hogy a rendszer mely algoritmusokat használja a jelszó titkosításához, ezért kizárólag Önön múlik, hogy tegyen meg óvintézkedéseket és hozzon létre erős jelszavakat.