Guida alla sicurezza
Generazione lato client di password con Web Crypto e campionamento per rifiuto
Un whitepaper tecnico che spiega il modello di generazione lato browser di PwdGen, i limiti di entropia, il campionamento per rifiuto e i confini della privacy.
Abstract
PwdGen utilizza un metodo di generazione di riferimento lato client: il browser o il runtime Web Crypto fornisce byte casuali, il campionamento per rifiuto mappa quei byte in indici limitati non distorti, e un mescolamento Fisher-Yates distribuisce le classi di caratteri richieste nella password finale. Il metodo è intenzionalmente piccolo, verificabile e riproducibile nell’app web, nell’adattatore API, nella CLI e nel pacchetto pwdgen-core preparato.
Questo documento descrive il modello ingegneristico. Non è una rivendicazione di un nuovo primitivo crittografico, uno standard formale o una verifica indipendente di terze parti.
Fonte di casualità
Il generatore richiede valori casuali crittograficamente forti tramite crypto.getRandomValues(). Le implementazioni di Web Crypto dovrebbero utilizzare un generatore di numeri pseudo-casuali crittograficamente sicuro (CSPRNG) alimentato con entropia di alta qualità fornita dall’ambiente host. In pratica, i browser delegano questa responsabilità alle funzionalità del sistema operativo e ai provider crittografici della piattaforma.
PwdGen non afferma che ogni chiamata di generazione password campioni direttamente una sorgente di rumore hardware. L’affermazione più sicura e accurata è che il browser fornisce output CSPRNG tramite l’API Web Crypto, e che PwdGen evita interfacce pseudo-casuali non crittografiche.
Perché non Math.random()
Math.random() non è specificato per uso sensibile alla sicurezza. È adatto per simulazioni, effetti visivi e comportamenti UI casuali ordinari, ma non fornisce le garanzie attese per password, codici di reset, chiavi di firma o altre credenziali.
PwdGen tratta i fallback pseudo-casuali insicuri come uno stato di errore. Se Web Crypto non è disponibile, il generatore dovrebbe mostrare un errore di compatibilità piuttosto che produrre silenziosamente credenziali deboli.
Campionamento per rifiuto
Byte e interi casuali sono solitamente estratti da un intervallo potenza di due. Gli alfabeti delle password raramente hanno una dimensione che divide esattamente quell’intervallo. Un’operazione di modulo diretta può rendere alcuni caratteri leggermente più probabili di altri.
PwdGen utilizza il campionamento per rifiuto:
- Estrai un intero senza segno a 32 bit.
- Calcola il multiplo più grande della dimensione dell’alfabeto che rientra nell’intervallo a 32 bit.
- Rifiuta i valori sopra quel limite.
- Applica il modulo solo al restante intervallo completo.
Questo mantiene la selezione dei caratteri limitata uniforme senza introdurre un bias di modulo misurabile.
Copertura dei caratteri ed entropia
Per le politiche delle password configurate, il generatore seleziona prima un carattere da ogni classe abilitata, riempie il resto dall’alfabeto combinato, e poi mescola il risultato. Questo aiuta a soddisfare le regole delle password di destinazione senza posizionare una classe prevedibile in una posizione prevedibile.
La stima teorica dell’entropia è:
bits = length × log2(uniqueAlphabetSize)
Questo valore è un limite superiore per scelte uniformemente casuali dall’alfabeto configurato. Non tiene conto del riutilizzo delle password, dell’output modificato dall’utente, di dispositivi compromessi, password trapelate o archiviazione debole da parte del servizio di destinazione.
Confine della privacy
Negli strumenti del browser, i valori generati rimangono nella memoria della pagina e nei campi dei risultati visibili fino a quando l’utente non li copia o esporta. I generatori locali non inviano le password generate ai server di PwdGen, non le inseriscono negli URL né le scrivono in eventi di analisi.
Questo confine non protegge da estensioni del browser dannose, gestori di appunti, compromissione del sistema operativo, cattura dello schermo, pagine di phishing o un utente che incolla una password generata in una destinazione non sicura.
Implementazione riproducibile
Il pacchetto pubblico pwdgen-cli e il pacchetto preparato pwdgen-core esistono per mantenere il modello di generazione ispezionabile al di fuori della pagina web. I test unitari coprono l’inclusione delle classi di caratteri, i caratteri esclusi, le configurazioni non valide, le formule di entropia e l’assenza di percorsi di codice di fallback pseudo-casuali insicuri.
L’obiettivo non è fare di PwdGen uno standard privato. L’obiettivo è rendere l’implementazione abbastanza piccola che gli sviluppatori possano leggerla, testarla e sostituirla quando il loro ambiente richiede un diverso confine di fiducia.