Gabay sa seguridad
Pagbuo ng password sa panig ng kliyente gamit ang Web Crypto at rejection sampling
Isang teknikal na whitepaper na nagpapaliwanag sa modelo ng pagbuo ng password sa panig ng browser ng PwdGen, mga hangganan ng entropy, rejection sampling, at mga limitasyon sa privacy.
Abstract
Gumagamit ang PwdGen ng paraan ng pagbuo ng sanggunian sa panig ng kliyente: ang browser o runtime Web Crypto ay nagbibigay ng random bytes, ang rejection sampling ay nagmamapa ng mga bytes na iyon sa walang pinapanigang bounded indices, at ang Fisher-Yates shuffle ay namamahagi ng mga kinakailangang character class sa buong huling password. Ang pamamaraan ay sadyang maliit, maaaring i-audit, at maaaring kopyahin sa web app, API adapter, CLI, at sa inihandang pwdgen-core package.
Inilalarawan ng dokumentong ito ang modelo ng engineering. Hindi ito isang pag-aangkin ng isang bagong cryptographic primitive, isang pormal na pamantayan, o isang independiyenteng third-party audit.
Pinagmulan ng randomness
Ang generator ay humihingi ng cryptographically strong random values sa pamamagitan ng crypto.getRandomValues(). Ang mga Web Crypto implementation ay inaasahang gumamit ng cryptographically secure pseudo-random number generator na naka-seed ng mataas na kalidad na entropy na ibinibigay ng host environment. Sa praktika, ang mga browser ay nagdedelegate ng responsibilidad na ito sa mga operating-system facilities at platform cryptographic providers.
Hindi inaangkin ng PwdGen na ang bawat tawag sa pagbuo ng password ay direktang kumukuha ng hardware noise source. Ang mas ligtas at mas tumpak na pahayag ay ang browser ay nagbibigay ng CSPRNG output sa pamamagitan ng Web Crypto API, at iniiwasan ng PwdGen ang mga non-cryptographic pseudo-random interface.
Bakit hindi Math.random()
Ang Math.random() ay hindi tinukoy para sa security-sensitive na paggamit. Ito ay angkop para sa mga simulation, visual effects, at ordinaryong randomized UI behavior, ngunit hindi ito nagbibigay ng mga garantiya na inaasahan para sa mga password, reset code, signing keys, o iba pang credentials.
Tinatrato ng PwdGen ang insecure pseudo-random fallbacks bilang isang failure state. Kung hindi available ang Web Crypto, ang generator ay dapat magpakita ng compatibility error sa halip na tahimik na gumawa ng mahihinang credentials.
Rejection sampling
Ang random bytes at integers ay karaniwang kinukuha mula sa power-of-two range. Ang mga password alphabet ay bihirang may sukat na eksaktong nahahati sa range na iyon. Ang direktang modulo operation ay maaaring gawing mas malamang ang ilang character kaysa sa iba.
Gumagamit ang PwdGen ng rejection sampling:
- Kumuha ng 32-bit unsigned integer.
- Kalkulahin ang pinakamalaking multiple ng alphabet size na kasya sa loob ng 32-bit range.
- Tanggihan ang mga value na nasa itaas ng boundary na iyon.
- Ilapat ang modulo lamang sa natitirang kumpletong range.
Pinapanatili nitong uniform ang bounded character selection nang walang ipinakikitang measurable modulo bias.
Character coverage at entropy
Para sa mga naka-configure na password policy, ang generator ay unang pumipili ng isang character mula sa bawat enabled class, pinupuno ang natitira mula sa pinagsamang alphabet, at pagkatapos ay hinahalo ang resulta. Ito ay tumutulong na matugunan ang mga patakaran ng password ng patutunguhan nang hindi inilalagay ang isang predictable class sa isang predictable na posisyon.
Ang theoretical entropy estimate ay:
bits = length × log2(uniqueAlphabetSize)
Ang value na iyon ay isang upper bound para sa uniformly random na mga pagpili mula sa naka-configure na alphabet. Hindi nito isinasaalang-alang ang password reuse, user-edited output, compromised devices, leaked passwords, o weak storage ng destination service.
Privacy boundary
Sa mga browser tools, ang mga nabuong value ay nananatili sa page memory at nakikitang result fields hanggang sa kopyahin o i-export ng user ang mga ito. Ang mga local generator ay hindi nagpapadala ng mga nabuong password sa mga server ng PwdGen, inilalagay ang mga ito sa mga URL, o isinusulat ang mga ito sa analytics events.
Ang boundary na ito ay hindi nagpoprotekta laban sa malicious browser extensions, clipboard managers, operating-system compromise, screen capture, phishing pages, o isang user na nagpe-paste ng nabuong password sa isang hindi ligtas na destinasyon.
Reproducible implementation
Ang pampublikong pwdgen-cli package at ang inihandang pwdgen-core package ay umiiral upang panatilihing inspeksyonable ang modelo ng pagbuo sa labas ng web page. Sinasaklaw ng unit tests ang character-class inclusion, excluded characters, invalid configurations, entropy formulas, at ang kawalan ng insecure pseudo-random fallback code paths.
Ang layunin ay hindi gawing pribadong pamantayan ang PwdGen. Ang layunin ay gawing sapat na maliit ang implementation upang mabasa, masubukan, at mapalitan ito ng mga developer kapag ang kanilang kapaligiran ay nangangailangan ng ibang trust boundary.