Strumento password Torna al generatore

Guida alla sicurezza

Perché Math.random non è sicuro per le password

Scopri perché Math.random è adatto per effetti UI ma non per password, codici di reset, token o altri segreti sensibili alla sicurezza.

Math.random() è una funzione pseudo-casuale generale di JavaScript. È utile per animazioni, comportamenti UI randomizzati, esempi, giochi e simulazioni. Non è specificata per la sicurezza crittografica e non dovrebbe essere usata per generare password, codici di reset, segreti API, chiavi di firma o token di recupero.

Il problema

Un generatore di password necessita di imprevedibilità contro un attaccante, non semplicemente di valori che appaiono variati a un utente. Math.random() non fornisce una garanzia di sicurezza crittografica standard del browser e le implementazioni possono differire tra motori.

L’opzione più sicura nel browser

I browser moderni forniscono crypto.getRandomValues() tramite l’API Web Crypto. PwdGen utilizza quell’interfaccia e il rejection sampling, che evita la selezione di caratteri distorta. Se quell’API non è disponibile, il comportamento sicuro è fermare la generazione e spiegare il requisito di compatibilità.

Come verificare un generatore

Cerca nel codice sorgente Math.random. Un generatore di password serio non dovrebbe usarlo per i caratteri della password. Può apparire nella documentazione che spiega perché non è sicuro, ma non nel percorso di generazione.

Guida dettagliata

Questa guida si concentra sul motivo per cui Math.random è inappropriato per password e segreti. È scritta per sviluppatori, studenti e utenti di strumenti che controllano se un generatore utilizza casualità sicura, quindi l’obiettivo pratico non è creare un’affermazione di sicurezza drammatica. L’obiettivo è scegliere un’abitudine per le password che possa sopravvivere all’uso quotidiano: moduli di accesso, gestori di password, tastiere mobili, recupero account, dispositivi condivisi e servizi occasionali con regole di validazione strane. Una raccomandazione sicura è utile solo se una persona reale può seguirla coerentemente.

Il punto di partenza più sicuro è casualità più unicità. Casualità significa che il valore è selezionato da uno spazio ampio da una fonte casuale crittograficamente adatta, non inventato da un compleanno, un nome di animale domestico, uno schema di tastiera o una citazione preferita. Unicità significa che la stessa password non viene usata altrove. Una password lunga ma riutilizzata può fallire rapidamente dopo una violazione non correlata, mentre una password unica e casuale limita il danno al singolo account in cui è stata usata.

Per questo argomento, un preset pratico è crypto.getRandomValues con rejection sampling invece di Math.random. Puoi applicare quel preset con la guida all’API Web Crypto e poi memorizzare il valore finale in un gestore di password affidabile. PwdGen genera valori localmente nel browser con Web Crypto; la password generata non viene inviata a un server PwdGen. Quel design locale riduce l’esposizione lato server, ma non protegge da ogni minaccia. Un’estensione del browser dannosa, un dispositivo compromesso, una pagina di phishing o una gestione non sicura degli appunti possono ancora esporre un segreto dopo la generazione.

I problemi più comuni da evitare sono sequenze pseudo-casuali prevedibili, bias modulare, funzioni casuali personalizzate e codice demo copiato in produzione. Questi problemi contano perché gli attaccanti raramente devono forzare ogni possibile password quando le abitudini umane danno loro una scorciatoia. Credential stuffing, phishing, elenchi di password divulgate e abuso del recupero account sono spesso più realistici di una pura ricerca matematica. Ecco perché il miglior consiglio combina la qualità della password con controlli a livello di account come MFA, passkey, archiviazione dei codici di recupero e revisione regolare delle impostazioni di email o telefono di recupero.

Usa questa checklist quando applichi la raccomandazione:

Se un sito web rifiuta l’impostazione ideale, non forzare la password in uno schema più debole manualmente. Regola una variabile alla volta. Se i simboli sono rifiutati, mantieni attivi maiuscole, minuscole e numeri e aumenta la lunghezza. Se la lunghezza massima è bassa, usa la lunghezza più grande accettata e assicurati che il valore sia unico. Se una password deve essere letta ad alta voce, stampata o digitata su uno schermo TV o router, considera di escludere caratteri confondibili e aumentare la lunghezza per compensare l’alfabeto più piccolo.

Infine, ricorda il confine del consiglio sulle password. Una password forte è uno strato di difesa, non una garanzia. Non può rendere sicura una pagina di phishing, risolvere malware o compensare un servizio che memorizza le credenziali in modo inadeguato. L’abitudine utile è noiosa ma duratura: genera un valore unico, conservalo in modo sicuro, proteggi il percorso di recupero e sostituiscilo rapidamente se sospetti un’esposizione.

Un prossimo passo sicuro

Dopo aver letto questa guida, fai un piccolo audit di un account invece di cercare di sistemare tutto in una volta. Scegli l’account che causerebbe più problemi se fosse compromesso, conferma che la sua password sia unica e controlla l’email di recupero, il telefono di recupero, il metodo MFA e l’archiviazione dei codici di backup. Se qualche parte di quella catena è debole, migliora quella parte prima di passare ad account a rischio più basso. Questo ordine mantiene il lavoro gestibile e protegge gli account che gli attaccanti hanno più probabilità di usare come trampolino di lancio. Perché math.random non è sicuro per le password, il miglior risultato è un’abitudine ripetibile: genera localmente, conserva con cura ed evita il riutilizzo.

Domande frequenti

Math.random è mai accettabile?

Sì, per effetti visivi, simulazioni e casualità UI ordinaria, ma non per credenziali o token di sicurezza.

Cosa dovrebbero usare i generatori di password invece?

Dovrebbero usare una fonte casuale crittografica come crypto.getRandomValues() nel browser.

PwdGen ricade su Math.random?

No. Se Web Crypto non è disponibile, PwdGen mostra un avviso di compatibilità e non genera password con Math.random().

Fonti