Biztonsági útmutató
Kliensoldali jelszógenerálás Web Crypto és rejection sampling segítségével
Egy technikai tanulmány, amely bemutatja a PwdGen böngészőoldali jelszógenerálási modelljét, entrópiahatárait, rejection samplinget és adatvédelmi korlátait.
Absztrakt
A PwdGen kliensoldali referencia-generálási módszert használ: a böngésző vagy a futtatókörnyezet Web Crypto szolgáltatása biztosítja a véletlen bájtokat, a rejection sampling ezeket torzítatlan korlátos indexekké képezi le, a Fisher-Yates keverés pedig elosztja a szükséges karakterosztályokat a végső jelszóban. A módszer szándékosan kicsi, auditálható és reprodukálható a webalkalmazásban, az API adapterben, a CLI-ben és az előkészített pwdgen-core csomagban.
Ez a dokumentum a mérnöki modellt írja le. Nem állítja, hogy új kriptográfiai primitív, formális szabvány vagy független harmadik fél általi audit lenne.
Véletlenszerűség forrása
A generátor kriptográfiailag erős véletlen értékeket kér a crypto.getRandomValues() segítségével. A Web Crypto implementációk várhatóan kriptográfiailag biztonságos pszeudovéletlen számgenerátort használnak, amelyet a gazdakörnyezet által biztosított kiváló minőségű entrópiával táplálnak. A gyakorlatban a böngészők ezt a felelősséget az operációs rendszer eszközeire és a platform kriptográfiai szolgáltatóira ruházzák.
A PwdGen nem állítja, hogy minden jelszógenerálási hívás közvetlenül egy hardveres zajforrást mintavételez. A biztonságosabb és pontosabb kijelentés az, hogy a böngésző CSPRNG kimenetet biztosít a Web Crypto API-n keresztül, és a PwdGen elkerüli a nem kriptográfiai pszeudovéletlen interfészeket.
Miért nem Math.random()
A Math.random() nincs biztonsági szempontból érzékeny használatra specifikálva. Alkalmas szimulációkra, vizuális effektekre és hétköznapi randomizált UI viselkedésre, de nem nyújtja a jelszavak, visszaállító kódok, aláíró kulcsok vagy más hitelesítő adatok esetében elvárt garanciákat.
A PwdGen a nem biztonságos pszeudovéletlen visszaesést hibás állapotként kezeli. Ha a Web Crypto nem érhető el, a generátornak kompatibilitási hibát kell mutatnia, ahelyett hogy csendben gyenge hitelesítő adatokat állítana elő.
Rejection sampling
A véletlen bájtok és egész számok általában egy kettő hatványa tartományból származnak. A jelszóábécék mérete ritkán osztja pontosan ezt a tartományt. Egy közvetlen modulo művelet egyes karaktereket kissé valószínűbbé tehet másoknál.
A PwdGen rejection samplinget használ:
- Vegyünk egy 32 bites előjel nélküli egész számot.
- Számítsuk ki az ábécé méretének legnagyobb többszörösét, amely belefér a 32 bites tartományba.
- Utasítsuk el a határ feletti értékeket.
- Csak a maradék teljes tartományra alkalmazzuk a modulo-t.
Ez egyenletessé teszi a korlátos karakterkiválasztást anélkül, hogy mérhető modulo torzítást vezetne be.
Karakterlefedettség és entrópia
A konfigurált jelszóházirendek esetén a generátor először kiválaszt egy karaktert minden engedélyezett osztályból, a többit a kombinált ábécéből tölti ki, majd megkeveri az eredményt. Ez segít teljesíteni a céljelszó-szabályokat anélkül, hogy egy kiszámítható osztályt kiszámítható pozícióba helyezne.
Az elméleti entrópiabecslés:
bits = length × log2(uniqueAlphabetSize)
Ez az érték egy felső korlát a konfigurált ábécéből történő egyenletes véletlen választásokra. Nem veszi figyelembe a jelszó-újrafelhasználást, a felhasználó által szerkesztett kimenetet, a feltört eszközöket, a kiszivárgott jelszavakat vagy a cél szolgáltatás gyenge tárolását.
Adatvédelmi határ
A böngészőeszközökben a generált értékek a lap memóriájában és a látható eredmény mezőkben maradnak, amíg a felhasználó ki nem másolja vagy exportálja őket. A helyi generátorok nem küldik el a generált jelszavakat a PwdGen szervereinek, nem teszik URL-ekbe, és nem írják elemzési eseményekbe.
Ez a határ nem véd a rosszindulatú böngészőbővítmények, vágólapkezelők, operációs rendszer kompromittálása, képernyőrögzítés, adathalász oldalak vagy az ellen, ha a felhasználó egy generált jelszót egy nem biztonságos célhelyre illeszt be.
Reprodukálható implementáció
A nyilvános pwdgen-cli csomag és az előkészített pwdgen-core csomag azért létezik, hogy a generálási modell a weboldalon kívül is ellenőrizhető legyen. Az egységtesztek lefedik a karakterosztályok belefoglalását, a kizárt karaktereket, az érvénytelen konfigurációkat, az entrópia képleteket és a nem biztonságos pszeudovéletlen visszaesési kódútvonalak hiányát.
A cél nem az, hogy a PwdGen privát szabvánnyá váljon. A cél az, hogy az implementáció elég kicsi legyen ahhoz, hogy a fejlesztők elolvashassák, tesztelhessék és lecserélhessék, ha a környezetük más bizalmi határt igényel.