L'entropia delle password spiegata: come calcolare davvero la loro robustezza
"Usa una password forte" è un consiglio comune, ma "forte" è vago. L'entropia è la misura reale dietro questo consiglio — un numero, in bit, che indica quanti tentativi servono a un attaccante nel caso peggiore. Questo articolo spiega cosa significa quel numero e come calcolarlo per una password che stai effettivamente scegliendo.
In breve
- L'entropia (in bit) misura la dimensione dello spazio di ricerca che un attaccante deve esplorare per forza bruta:
entropia = log2(dimensione_set_caratteri ^ lunghezza). - Ogni carattere aggiuntivo moltiplica lo spazio di ricerca; ogni tipo di carattere aggiuntivo lo moltiplica solo per un fattore fisso e relativamente piccolo.
- Una password di 12 caratteri con solo minuscole ha meno entropia di una di 8 caratteri che mescola tutti e quattro i tipi di carattere — ma una passphrase di 20 caratteri in minuscolo supera entrambe.
- Le password generate da CSPRNG raggiungono esattamente la loro entropia teorica; quelle scelte dagli esseri umani quasi mai, perché gli esseri umani non sono casuali.
Risposta breve
L'entropia in bit è log2(N), dove N è il numero totale di password egualmente probabili per quella lunghezza e set di caratteri. In pratica: entropia = lunghezza × log2(dimensione_set_caratteri). Una password di 16 caratteri estratta uniformemente dai 95 caratteri ASCII stampabili ha circa 16 × log2(95) ≈ 105 bit di entropia — paragonabile a una chiave AES a 256 bit in termini di resistenza pratica alla forza bruta, il che è eccessivo per confronto, ma 105 bit sono già ben oltre ciò che qualsiasi hardware attuale o prevedibile può esaurire. PassGenerate genera le password in questo modo, usando il CSPRNG della Web Crypto API, quindi questa cifra di entropia è reale, non solo teorica.
La formula dell'entropia, passo dopo passo
L'entropia presuppone che ogni carattere sia scelto in modo indipendente e uniformemente casuale da un insieme fisso. Dato un set di caratteri di dimensione C e una password di lunghezza L, il numero di password possibili è C^L, e l'entropia in bit è:
entropia = L × log2(C)
| Set di caratteri | Dimensione (C) | Bit per carattere (log2 C) |
|---|---|---|
| Solo cifre (0-9) | 10 | 3.32 |
| Minuscole (a-z) | 26 | 4.70 |
| Minuscole + cifre | 36 | 5.17 |
| Maiuscole/minuscole + cifre | 62 | 5.95 |
| Maiuscole/minuscole + cifre + simboli (~33 comuni) | 95 | 6.57 |
Lunghezza vs. dimensione del set di caratteri: perché vince la lunghezza
Questa tabella mostra perché NIST SP 800-63B ridimensiona l'importanza delle regole di complessità forzata a favore della lunghezza:
| Lunghezza | Solo cifre | Minuscole | Maiuscole+minuscole+cifre+simboli |
|---|---|---|---|
| 8 | 27 bit | 38 bit | 52 bit |
| 12 | 40 bit | 56 bit | 79 bit |
| 16 | 53 bit | 75 bit | 105 bit |
| 20 | 66 bit | 94 bit | 131 bit |
| 24 | 80 bit | 113 bit | 157 bit |
| 32 | 106 bit | 150 bit | 210 bit |
Nota che una password di 8 caratteri che usa tutti e quattro i tipi di carattere (52 bit) ha meno entropia di una password di 12 caratteri tutta in minuscolo (56 bit). Questa è la base matematica di una scoperta ben nota: aggiungere quattro caratteri casuali in più fa più per la sicurezza che forzare simboli e cifre in una password corta. È anche il motivo per cui lunghe passphrase generate casualmente (diverse parole casuali del dizionario) possono essere sia più forti sia più facili da digitare rispetto a una breve accozzaglia di simboli — ogni parola aggiuntiva aggiunge tipicamente 11-13 bit se estratta da un elenco di qualche migliaio di parole, il che si accumula rapidamente su 4-6 parole.
Perché "sembrare casuale" non è lo stesso che esserlo
I calcoli di entropia presuppongono una vera casualità uniforme. Le password create dagli esseri umani violano sistematicamente questa ipotesi anche quando sembrano complesse: schemi da tastiera (Qwerty123!), sostituzioni leetspeak (P@ssw0rd), e date o nomi con un simbolo aggiunto riducono tutti l'entropia effettiva ben al di sotto di quanto suggerisce il numero di caratteri, perché gli strumenti di cracking degli attaccanti sono costruiti proprio attorno a questi schemi. Una password può sembrare casuale a un occhio umano e comunque ricadere tra i primi milioni di tentativi di un attacco a dizionario mirato.
Questo è il motivo pratico per preferire un generatore che usa un generatore di numeri pseudocasuali crittograficamente sicuro (CSPRNG) piuttosto che inventare tu stesso una password. Math.random() in JavaScript non è crittograficamente sicuro e non è adatto alla generazione di password — è inizializzato e generato da un algoritmo abbastanza prevedibile da poter essere ricostruito da poche uscite in alcuni motori. Il crypto.getRandomValues() della Web Crypto API attinge dalla fonte di casualità crittografica del sistema operativo, quindi ogni carattere è genuinamente e indipendentemente casuale, e la matematica dell'entropia sopra descritta si applica davvero.
Come appare con hardware reale
I numeri in bit sopra riportati sono utili per il confronto, ma non dicono quanto dura realmente un attacco — questo dipende dall'hardware che effettua i tentativi, e quell'hardware diventa più veloce ogni anno. Hive Systems pubblica ogni anno un benchmark esattamente su questo, testando la velocità di forza bruta su una flotta noleggiata di GPU consumer. La loro tabella 2026 colloca una password di 8 caratteri generata casualmente con il set di caratteri misto completo (maiuscole, minuscole, cifre, simboli) a circa 132 anni per essere craccata — in calo rispetto ai 164 anni del 2025 e ai 225 anni del 2024, un calo di circa il 20-25% annuo man mano che l'hardware GPU migliora. Una password di 8 caratteri solo minuscole è calata ancora più velocemente: da tre settimane per essere craccata nel 2025 a circa due settimane nel 2026.
Due cose di questo benchmark vale la pena conoscere. Primo, la tendenza è unidirezionale — ciò che oggi sembra "sicuro" si indebolisce ogni anno solo per i miglioramenti dell'hardware, il che è un argomento concreto per propendere verso password più lunghe piuttosto che il minimo attuale. Secondo, e in modo un po' controintuitivo, i chip acceleratori IA specializzati costruiti per addestrare i modelli linguistici si sono rivelati non più veloci nel craccare password per forza bruta rispetto a GPU da gaming equivalenti, e in alcuni test persino più lenti — il cracking delle password è un problema numerico puro che non beneficia delle ottimizzazioni di moltiplicazione matriciale su cui si basa l'hardware IA.
Quanti bit servono davvero?
Non esiste un unico numero universale, perché dipende da cosa ci si sta difendendo:
- ~40-60 bit: Resistente a tentativi casuali e attacchi automatizzati su piccola scala, ma alla portata di un attacco offline ben dotato di risorse contro un database con hash debole. Adeguato solo per account genuinamente di basso valore e basse conseguenze.
- ~70-90 bit: Comodamente fuori dalla portata della forza bruta anche con hardware di cracking ottimizzato, per qualsiasi tempistica di attacco realistica. Un obiettivo ragionevole per la maggior parte degli account personali.
- 100+ bit: Praticamente irraggiungibile per forza bruta con la potenza di calcolo attuale o prevedibile, crittografico nello stesso senso di una chiave di cifratura forte. Appropriato per la password principale del tuo gestore di password o altri punti singoli di fallimento.
Punti chiave
- L'entropia è
lunghezza × log2(dimensione_set_caratteri)— la lunghezza ha un effetto lineare, la dimensione del set di caratteri ha un effetto logaritmico, ecco perché la lunghezza domina. - Una password corta con tutti i tipi di carattere può avere meno entropia di una password più lunga con un solo tipo.
- L'entropia effettiva è uguale a quella teorica solo quando i caratteri sono genuinamente e uniformemente casuali — cosa che un CSPRNG garantisce e la scelta umana generalmente non raggiunge.
- Punta a 70+ bit per gli account quotidiani e 100+ bit per le password principali o altri punti singoli di fallimento.
Perché puoi fidarti di PassGenerate
- Le password vengono generate localmente nel tuo browser usando la Web Crypto API.
- Nessuna password viene trasmessa ai server.
- Utilizza un generatore di numeri pseudocasuali crittograficamente sicuro (CSPRNG).
- Segue le moderne best practice di sicurezza raccomandate da NIST e OWASP.
Riferimenti
- Tabella delle password 2026 di Hive Systems (dati di benchmark sulla forza bruta)
- NIST SP 800-63B – Linee guida sull'identità digitale
- OWASP Authentication Cheat Sheet
Conclusione
L'entropia è una misura precisa e calcolabile della robustezza di una password, non una vaga nozione di "complessità". La lunghezza conta più del mescolare forzatamente i tipi di carattere perché aumenta linearmente lo spazio di ricerca, mentre la dimensione del set di caratteri lo aumenta solo in modo logaritmico — e nulla di tutto ciò vale a meno che i caratteri non siano davvero casuali, motivo per cui un generatore basato su CSPRNG come PassGenerate produce password che raggiungono esattamente la loro entropia teorica, cosa che una password scelta da un essere umano praticamente non raggiunge mai.