Nástroj hesiel Späť na generátor

Bezpečnostná príručka

Generovanie hesiel na strane klienta pomocou Web Crypto a reject sampling

Technický whitepaper vysvetľujúci model generovania hesiel v prehliadači PwdGen, hranice entropie, reject sampling a limity súkromia.

Abstrakt

PwdGen používa referenčnú metódu generovania na strane klienta: prehliadač alebo runtime Web Crypto poskytuje náhodné bajty, reject sampling mapuje tieto bajty na nevychýlené ohraničené indexy a Fisher-Yates shuffle rozdeľuje požadované triedy znakov v rámci výsledného hesla. Metóda je zámerne malá, auditovateľná a reprodukovateľná naprieč webovou aplikáciou, API adaptérom, CLI a pripraveným balíkom pwdgen-core.

Tento dokument popisuje inžiniersky model. Nejde o tvrdenie nového kryptografického primitíva, formálneho štandardu ani nezávislého auditu tretej strany.

Zdroj náhodnosti

Generátor požaduje kryptograficky silné náhodné hodnoty prostredníctvom crypto.getRandomValues(). Očakáva sa, že implementácie Web Crypto používajú kryptograficky bezpečný generátor pseudonáhodných čísel naočkovaný vysoko kvalitnou entropiou poskytnutou hostiteľským prostredím. V praxi prehliadače delegujú túto zodpovednosť na operačné systémy a platformové kryptografické poskytovateľov.

PwdGen netvrdí, že každé volanie generovania hesla priamo vzorkuje zdroj hardvérového šumu. Bezpečnejšie a presnejšie tvrdenie je, že prehliadač poskytuje výstup CSPRNG prostredníctvom Web Crypto API a že PwdGen sa vyhýba nekryptografickým pseudonáhodným rozhraniam.

Prečo nie Math.random()

Math.random() nie je určený na bezpečnostne citlivé použitie. Je vhodný pre simulácie, vizuálne efekty a bežné náhodné správanie UI, ale neposkytuje záruky očakávané pre heslá, resetovacie kódy, podpisové kľúče alebo iné poverenia.

PwdGen považuje nebezpečné pseudonáhodné záložné riešenia za chybový stav. Ak Web Crypto nie je k dispozícii, generátor by mal zobraziť chybu kompatibility namiesto tichého generovania slabých poverení.

Reject sampling

Náhodné bajty a celé čísla sa zvyčajne získavajú z rozsahu mocniny dvojky. Abecedy hesiel majú zriedka veľkosť, ktorá tento rozsah delí presne. Priama operácia modulo môže spôsobiť, že niektoré znaky budú o niečo pravdepodobnejšie ako iné.

PwdGen používa reject sampling:

  1. Získajte 32-bitové celé číslo bez znamienka.
  2. Vypočítajte najväčší násobok veľkosti abecedy, ktorý sa zmestí do 32-bitového rozsahu.
  3. Odmietnite hodnoty nad touto hranicou.
  4. Aplikujte modulo iba na zostávajúci úplný rozsah.

Tým sa zachováva rovnomerný výber ohraničených znakov bez merateľného vychýlenia modulom.

Pokrytie znakov a entropia

Pre nakonfigurované politiky hesiel generátor najprv vyberie jeden znak z každej povolenej triedy, zvyšok doplní z kombinovanej abecedy a potom výsledok zamieša. To pomáha splniť požiadavky cieľových pravidiel pre heslá bez umiestnenia predvídateľnej triedy na predvídateľnú pozíciu.

Teoretický odhad entropie je:

bits = length × log2(uniqueAlphabetSize)

Táto hodnota je horná hranica pre rovnomerne náhodné výbery z nakonfigurovanej abecedy. Nezohľadňuje opätovné použitie hesiel, používateľom upravený výstup, kompromitované zariadenia, uniknuté heslá ani slabé úložisko cieľovej služby.

Hranica súkromia

V nástrojoch prehliadača zostávajú vygenerované hodnoty v pamäti stránky a viditeľných výsledkových poliach, kým ich používateľ neskopíruje alebo neexportuje. Lokálne generátory neposielajú vygenerované heslá na servery PwdGen, nevkladajú ich do URL ani nezapisujú do analytických udalostí.

Táto hranica nechráni pred škodlivými rozšíreniami prehliadača, správcami schránky, kompromitáciou operačného systému, snímaním obrazovky, phishingovými stránkami ani používateľom vkladajúcim vygenerované heslo do nebezpečného cieľa.

Reprodukovateľná implementácia

Verejný balík pwdgen-cli a pripravený balík pwdgen-core existujú na to, aby bol model generovania kontrolovateľný mimo webovej stránky. Unit testy pokrývajú zahrnutie tried znakov, vylúčené znaky, neplatné konfigurácie, vzorce entropie a absenciu nebezpečných pseudonáhodných záložných ciest.

Cieľom nie je urobiť z PwdGen súkromný štandard. Cieľom je, aby bola implementácia dostatočne malá na to, aby ju vývojári mohli čítať, testovať a nahradiť, keď ich prostredie vyžaduje inú hranicu dôvery.

Zdroje