A jelszóentrópia magyarázata: hogyan számítsd ki valójában egy jelszó erősségét
A „használj erős jelszót” gyakori tanács, de az „erős” szó homályos. Az entrópia az a tényleges mérték e mögött — egy szám, bitben kifejezve, amely megmutatja, hány próbálkozásra van szüksége egy támadónak a legrosszabb esetben. Ez a cikk elmagyarázza, mit jelent ez a szám, és hogyan számítható ki egy általad ténylegesen választott jelszóra.
Röviden
- Az entrópia (bitben) annak a keresési térnek a méretét méri, amelyet egy támadónak brute force módszerrel végig kell néznie:
entrópia = log2(karakterkészlet_mérete ^ hossz). - Minden további karakter megsokszorozza a keresési teret; minden további karaktertípus csak egy fix, viszonylag kicsi tényezővel szorozza meg azt.
- Egy 12 karakteres, csak kisbetűket használó jelszónak kevesebb entrópiája van, mint egy 8 karakteres, mind a négy karaktertípust vegyítő jelszónak — de egy 20 karakteres, kisbetűs jelmondat mindkettőt felülmúlja.
- A CSPRNG által generált jelszavak pontosan elérik elméleti entrópiájukat; az emberek által választott jelszavak szinte soha, mert az emberek nem véletlenszerűek.
Rövid válasz
Az entrópia bitben log2(N), ahol N az adott hosszúságú és karakterkészletű, egyformán valószínű jelszavak teljes száma. Gyakorlatban: entrópia = hossz × log2(karakterkészlet_mérete). Egy 16 karakteres jelszó, amelyet egyenletesen a 95 nyomtatható ASCII karakterből választanak ki, körülbelül 16 × log2(95) ≈ 105 bit entrópiával rendelkezik — ez összemérhető egy 256 bites AES-kulcs gyakorlati brute force ellenállásával, ami ehhez képest túlzás, de a 105 bit már messze meghaladja azt, amit a jelenlegi vagy belátható jövőbeli hardver ki tud meríteni. A PassGenerate így generálja a jelszavakat, a Web Crypto API CSPRNG-jét használva, így az entrópiaérték valós, nem csupán elméleti.
Az entrópiaképlet levezetése
Az entrópia feltételezi, hogy minden karaktert egymástól függetlenül és egyenletesen véletlenszerűen választanak ki egy rögzített készletből. Egy C méretű karakterkészlet és L hosszúságú jelszó esetén a lehetséges jelszavak száma C^L, és az entrópia bitben:
entrópia = L × log2(C)
| Karakterkészlet | Készlet mérete (C) | Bit karakterenként (log2 C) |
|---|---|---|
| Csak számjegyek (0-9) | 10 | 3.32 |
| Kisbetűk (a-z) | 26 | 4.70 |
| Kisbetűk + számjegyek | 36 | 5.17 |
| Vegyes nagy-/kisbetűk + számjegyek | 62 | 5.95 |
| Vegyes nagy-/kisbetűk + számjegyek + szimbólumok (~33 gyakori) | 95 | 6.57 |
Hossz vs. karakterkészlet mérete: miért nyer a hossz
Ez a táblázat megmutatja, miért helyez a NIST SP 800-63B kevesebb hangsúlyt a kikényszerített összetettségi szabályokra a hosszúsággal szemben:
| Hossz | Csak számjegyek | Kisbetűk | Vegyes betűk+számjegyek+szimbólumok |
|---|---|---|---|
| 8 | 27 bit | 38 bit | 52 bit |
| 12 | 40 bit | 56 bit | 79 bit |
| 16 | 53 bit | 75 bit | 105 bit |
| 20 | 66 bit | 94 bit | 131 bit |
| 24 | 80 bit | 113 bit | 157 bit |
| 32 | 106 bit | 150 bit | 210 bit |
Figyeld meg, hogy egy 8 karakteres jelszó, amely mind a négy karaktertípust használja (52 bit), kevesebb entrópiával rendelkezik, mint egy 12 karakteres, teljesen kisbetűs jelszó (56 bit). Ez a matematikai alapja egy jól ismert megállapításnak: négy további véletlenszerű karakter hozzáadása többet tesz a biztonságodért, mint szimbólumok és számjegyek kikényszerítése egy rövid jelszóba. Ez az oka annak is, hogy a hosszú, véletlenszerűen generált jelmondatok (több véletlenszerű szótári szó) egyszerre lehetnek erősebbek és könnyebben gépelhetők, mint egy rövid szimbólumhalmaz — minden további szó jellemzően 11-13 bitet ad hozzá, ha néhány ezer szavas listából származik, ami 4-6 szó esetén gyorsan összeadódik.
Hogyan néz ki ez valódi hardveren
A fenti bitszámok hasznosak az összehasonlításhoz, de nem árulják el, mennyi ideig tart egy valós támadás — ez a próbálkozást végző hardvertől függ, amely évről évre gyorsabb lesz. A Hive Systems évente pontosan erről tesz közzé egy referenciamérést, amely a brute force sebességét teszteli egy bérelt, fogyasztói GPU-kból álló flottán. A 2026-os táblázatuk szerint egy véletlenszerűen generált, 8 karakteres, teljes vegyes karakterkészletet (nagybetűk, kisbetűk, számjegyek, szimbólumok) használó jelszó feltörése körülbelül 132 évet vesz igénybe — ez csökkenés a 2025-ös 164 évhez és a 2024-es 225 évhez képest, azaz évente körülbelül 20-25%-os csökkenés, ahogy a GPU-hardver javul. Egy csak kisbetűket használó, 8 karakteres jelszó még gyorsabban esett vissza: a 2025-ös három hetes feltörési időről 2026-ra körülbelül két hétre.
Két dolog érdemel figyelmet ebből a referenciamérésből. Először is, a trend egyirányú — bármi is számít ma „biztonságosnak”, az évről évre gyengül pusztán a hardverfejlődés miatt, ami valós érv amellett, hogy inkább a hosszabb jelszavak felé tévedjünk, mint a jelenlegi minimum felé. Másodszor, kissé meglepő módon, a nyelvi modellek betanítására épített, speciális AI-gyorsító chipek nem bizonyultak gyorsabbnak a jelszavak brute force feltörésében, mint az egyenértékű gamer GPU-k, sőt egyes teszteknél lassabbak voltak — a jelszófeltörés egy tisztán számítási probléma, amely nem profitál azokból a mátrixszorzás-optimalizálásokból, amelyekre az AI-hardvert építették.
Miért nem ugyanaz a „véletlenszerűnek tűnő” és a valóban véletlenszerű
Az entrópiaszámítások valódi, egyenletes véletlenszerűséget feltételeznek. Az emberek által létrehozott jelszavak rendszeresen megsértik ezt a feltételezést, még akkor is, ha összetettnek tűnnek: a billentyűzetmintázatok (Qwerty123!), a leetspeak-helyettesítések (P@ssw0rd), valamint a dátumok vagy nevek szimbólummal kiegészítve mind messze a karakterek száma által sugallt szint alá csökkentik a tényleges entrópiát, mivel a támadók feltörőeszközeit pontosan ilyen mintázatok köré építették. Egy jelszó emberi szemmel véletlenszerűnek tűnhet, és mégis elbukhat egy célzott szótári támadás első néhány millió próbálkozásán belül.
Ez a gyakorlati oka annak, hogy egy kriptográfiailag biztonságos álvéletlenszám-generátort (CSPRNG) használó generátort érdemes előnyben részesíteni a saját magad által kitalált jelszóval szemben. A JavaScript Math.random() függvénye nem kriptográfiailag biztonságos, és alkalmatlan jelszógenerálásra — olyan algoritmus adja meg a kezdőértékét és generálja, amely bizonyos motorokban elég kiszámítható ahhoz, hogy néhány kimenetből rekonstruálható legyen. A Web Crypto API crypto.getRandomValues() függvénye az operációs rendszer kriptográfiai véletlenforrásából merít, így minden karakter valóban, egymástól függetlenül véletlenszerű, és a fenti entrópiamatematika ténylegesen érvényes.
Hány bitre van valójában szükséged?
Nincs egyetlen univerzális szám, mert ez attól függ, mi ellen védekezel:
- ~40-60 bit: Ellenáll a hétköznapi találgatásnak és a kisméretű automatizált támadásoknak, de elérhető egy jól felszerelt, offline támadás számára egy gyengén hasított adatbázis ellen. Csak valóban alacsony értékű, alacsony következményű fiókokhoz elegendő.
- ~70-90 bit: Kényelmesen brute force hatókörön kívül esik, még optimalizált feltörő hardverrel szemben is, bármely reális támadási időkeretben. Ésszerű célérték a legtöbb személyes fiókhoz.
- 100+ bit: Gyakorlatilag elérhetetlen brute force módszerrel a jelenlegi vagy belátható jövőbeli számítástechnikával, kriptográfiai értelemben ugyanolyan erős, mint egy jó titkosítási kulcs. Megfelelő a jelszókezelőd mesterjelszavához vagy más egyetlen hibaponthoz.
Legfontosabb tanulságok
- Az entrópia
hossz × log2(karakterkészlet_mérete)— a hossz lineáris hatással bír, a karakterkészlet mérete logaritmikus hatással, ezért dominál a hossz. - Egy rövid, minden karaktertípust tartalmazó jelszónak kevesebb entrópiája lehet, mint egy hosszabb, csak egyetlen típust használó jelszónak.
- A tényleges entrópia csak akkor egyezik meg az elméleti entrópiával, ha a karakterek valóban, egyenletesen véletlenszerűek — amit egy CSPRNG garantál, az emberi választás pedig általában nem.
- Törekedj legalább 70 bitre a mindennapi fiókoknál, és legalább 100 bitre a mesterjelszavaknál vagy más egyetlen hibapontoknál.
Miért bízhatsz a PassGenerate-ben
- A jelszavak helyileg, a böngésződben jönnek létre a Web Crypto API segítségével.
- Semmilyen jelszó nem kerül továbbításra szerverekre.
- Kriptográfiailag biztonságos álvéletlenszám-generátort (CSPRNG) használ.
- A NIST és az OWASP által ajánlott modern biztonsági bevált gyakorlatokat követi.
Hivatkozások
- Hive Systems 2026-os jelszótáblázat (brute force referenciamérési adatok)
- NIST SP 800-63B – Digital Identity Guidelines
- OWASP Authentication Cheat Sheet
- MDN Web Crypto API dokumentáció
Összegzés
Az entrópia a jelszó erősségének pontos, kiszámítható mértéke, nem pedig az „összetettség” homályos fogalma. A hossz fontosabb, mint a kikényszerített karaktertípus-keverés, mert lineárisan növeli a keresési teret, míg a karakterkészlet mérete csak logaritmikusan — és ez a matematika csak akkor áll fenn, ha a karakterek ténylegesen véletlenszerűek, ezért egy CSPRNG-alapú generátor, mint a PassGenerate, olyan jelszavakat állít elő, amelyek pontosan elérik elméleti entrópiájukat, amit egy ember által választott jelszó gyakorlatilag soha nem ér el.