Generatore di Password

Genera password casuali e sicure con lunghezza e set di caratteri personalizzabili

Lunghezza20
Quantità5

Cos'è un Generatore di Password?

Un generatore di password crea sequenze casuali di caratteri utilizzate come password per account utente, API key, credenziali di database e segreti di cifratura. A differenza delle password scelte dall'utente, le password generate attingono all'intero spazio delle combinazioni di caratteri possibili, rendendole resistenti agli attacchi a dizionario e alle tecniche di indovinamento basate su pattern. Questo strumento genera password casuali e sicure direttamente nel browser, usando il generatore di numeri casuali crittografico integrato.

La robustezza di una password dipende da due fattori: lunghezza e diversità dei caratteri. Una password di 20 caratteri che utilizza maiuscole, minuscole, cifre e simboli ha circa 131 bit di entropia. A quel livello, un attacco a forza bruta che testa un trilione di tentativi al secondo richiederebbe più tempo dell'età dell'universo per provare ogni combinazione. Il calcolo è diretto: entropia = lunghezza × log2(dimensione del set di caratteri).

Standard come NIST SP 800-63B raccomandano password di almeno 8 caratteri senza un limite superiore imposto dal verificatore, e sconsigliano regole di composizione forzata come richiedere esattamente un simbolo, preferendo invece passphrase più lunghe. Per credenziali machine-to-machine e account di servizio, 20 o più caratteri casuali tratti da un set completo è la base accettata nella maggior parte dei framework di sicurezza e dei regimi di conformità.

Perché Usare un Generatore di Password?

Gli esseri umani sono pessimi generatori di numeri casuali. Riutilizziamo le password, scegliamo parole del dizionario, sostituiamo lettere con pattern prevedibili (@ per a, 3 per e) e tendiamo a usare stringhe brevi. Un generatore di password elimina il bias umano dal processo.

🔐
Generazione orientata alla privacy
Le password vengono generate interamente nel browser usando la Web Crypto API. Nessun carattere lascia il dispositivo, nulla viene registrato e nessuna richiesta di rete viene effettuata durante la generazione.
Output in blocco istantaneo
Genera fino a 20 password contemporaneamente con un solo clic. Copia le password singolarmente o tutte insieme per script di provisioning o vault di credenziali.
🛡️
Nessun account richiesto
Nessuna registrazione, nessuna email, nessun cookie che traccia le password generate. Apri la pagina, configura le opzioni e genera.
🎛️
Controllo completo del set di caratteri
Attiva o disattiva maiuscole, minuscole, cifre e simboli in modo indipendente. Imposta la lunghezza da 4 a 128 caratteri per soddisfare i requisiti di qualsiasi sistema o policy.

Casi d'Uso del Generatore di Password

Sviluppo Frontend
Genera password di test per la validazione dei form, il test della lunghezza degli input e lo sviluppo del flusso di autenticazione. Verifica che i tuoi form di login gestiscano correttamente password da 128 caratteri e caratteri speciali.
Backend e DevOps
Crea credenziali per database, token API e password per account di servizio durante la configurazione dell'infrastruttura. Usa la generazione in blocco per effettuare il provisioning di più servizi in un'unica sessione.
Security Engineering
Genera segreti ad alta entropia per chiavi di cifratura, firma HMAC e rotazione dei segreti JWT. Imposta la lunghezza a 64 o più caratteri per segreti che devono superare i 256 bit di entropia.
QA e Penetration Testing
Testa l'applicazione delle policy sulle password generando stringhe che includono o escludono specifici set di caratteri. Verifica che i sistemi rifiutino correttamente le password al di sotto della lunghezza minima o della complessità richiesta.
Data Engineering
Genera credenziali casuali per ambienti di test, database di staging e segreti nelle pipeline CI/CD. Evita di riutilizzare le password di produzione nei dati di test generandone di nuove per ogni ambiente.
Sicurezza degli Account Personali
Crea password uniche per ogni account online. Abbina questo generatore a un password manager per conservare le credenziali che non hai bisogno di memorizzare.

Riferimento sull'Entropia delle Password

L'entropia misura quanto una password è imprevedibile. Si calcola come log2(dimensione_set ^ lunghezza). Maggiore è l'entropia, più combinazioni un attaccante deve esaminare. NIST e OWASP raccomandano almeno 80 bit di entropia per applicazioni ad alta sicurezza.

LunghezzaSet di CaratteriEntropiaTempo a Forza Bruta
8lower + digits~41 bitsMinutes to hours
12lower + upper + digits~71 bitsCenturies (offline)
16all character sets~105 bitsBeyond brute-force
20all character sets~131 bitsBeyond brute-force
32all character sets~210 bitsBeyond brute-force
64all character sets~419 bitsBeyond brute-force

I tempi di crack assumono 1 trilione di tentativi al secondo (attacco offline con GPU moderne). Gli attacchi online con limitazione del tasso sono di diversi ordini di grandezza più lenti.

CSPRNG vs Math.random() per la Generazione di Password

La fonte di casualità è importante quanto la lunghezza della password. Una password generata con un generatore di numeri casuali prevedibile può essere ricostruita da un attaccante che conosce l'algoritmo e lo stato iniziale. Questo strumento usa crypto.getRandomValues(), che è un generatore di numeri pseudocasuali crittograficamente sicuro (CSPRNG) integrato in ogni browser moderno.

crypto.getRandomValues()
Usa le fonti di entropia del sistema operativo (RNG hardware, temporizzazione degli interrupt, ecc.). L'output è imprevedibile anche se un attaccante conosce tutti gli output precedenti. Richiesto dalla specifica W3C Web Crypto per operazioni sensibili alla sicurezza.
Math.random()
Usa un algoritmo deterministico inizializzato da un pool di entropia limitato. L'output può essere previsto se lo stato iniziale è noto. La specifica ECMAScript afferma esplicitamente che Math.random() non fornisce numeri casuali crittograficamente sicuri. Non usarlo mai per generare password.

Esempi di Codice

Genera password in modo programmatico in diversi linguaggi. Ogni esempio usa una fonte di casualità crittograficamente sicura, non Math.random() o PRNG deboli equivalenti.

JavaScript (Web Crypto API)
// Generate a random password in the browser or Node.js 19+
function generatePassword(length = 20) {
  const charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*'
  const values = new Uint32Array(length)
  crypto.getRandomValues(values)
  return Array.from(values, v => charset[v % charset.length]).join('')
}

console.log(generatePassword())    // → "kR7!mZp$Xw2&nLq9@Yf3"
console.log(generatePassword(32))  // → "Hd4%tNx!Qw8#mKp2Rv6&Zj0*Ls3Yb7@"
Python
import secrets
import string

def generate_password(length: int = 20) -> str:
    """Generate a cryptographically secure random password."""
    alphabet = string.ascii_letters + string.digits + string.punctuation
    return ''.join(secrets.choice(alphabet) for _ in range(length))

# Single password
print(generate_password())      # → "kR7!mZp$Xw2&nLq9@Yf3"

# Batch of 5 passwords
for _ in range(5):
    print(generate_password(24))

# Ensure at least one char from each category
def generate_strong(length: int = 20) -> str:
    required = [
        secrets.choice(string.ascii_uppercase),
        secrets.choice(string.ascii_lowercase),
        secrets.choice(string.digits),
        secrets.choice(string.punctuation),
    ]
    remaining = length - len(required)
    alphabet = string.ascii_letters + string.digits + string.punctuation
    all_chars = required + [secrets.choice(alphabet) for _ in range(remaining)]
    secrets.SystemRandom().shuffle(all_chars)
    return ''.join(all_chars)
CLI (OpenSSL / /dev/urandom)
# OpenSSL — generate 32 random bytes, base64-encode
openssl rand -base64 32
# → "x7Kp2mNqR4wZ8vLs1Yb0Hd6tFj3Xc9Ga5eUi+Wo="

# /dev/urandom with tr — alphanumeric + symbols, 20 chars
tr -dc 'A-Za-z0-9!@#$%^&*' < /dev/urandom | head -c 20; echo
# → "kR7!mZp$Xw2&nLq9@Yf3"

# pwgen (install: apt install pwgen / brew install pwgen)
pwgen -sy 20 5
# Generates 5 passwords, 20 chars each, with symbols
Go
package main

import (
    "crypto/rand"
    "fmt"
    "math/big"
)

func generatePassword(length int) (string, error) {
    charset := "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()"
    result := make([]byte, length)
    for i := range result {
        idx, err := rand.Int(rand.Reader, big.NewInt(int64(len(charset))))
        if err != nil {
            return "", err
        }
        result[i] = charset[idx.Int64()]
    }
    return string(result), nil
}

func main() {
    pwd, _ := generatePassword(20)
    fmt.Println(pwd) // → "kR7!mZp$Xw2&nLq9@Yf3"
}

Domande Frequenti

Quanto deve essere lunga una password?
Per gli account utente, 16 caratteri da un set misto forniscono oltre 100 bit di entropia, sufficiente per tutti i modelli di minaccia attuali. Per i segreti delle macchine (API key, chiavi di cifratura), usa 32 caratteri o più. NIST SP 800-63B fissa un minimo di 8 caratteri ma raccomanda che i sistemi consentano password molto più lunghe senza troncamento.
Questo generatore di password è sicuro da usare?
Sì. Le password vengono generate nel browser usando la Web Crypto API (crypto.getRandomValues). Nessun dato viene inviato a nessun server. Puoi verificarlo aprendo la scheda rete del browser e osservando che non vengono effettuate richieste quando clicchi su Genera. Il codice sorgente è JavaScript lato client, visibile negli strumenti per sviluppatori del browser.
Cos'è l'entropia di una password?
L'entropia è una misura della casualità espressa in bit. Una password con N bit di entropia ha 2^N valori possibili. Ad esempio, una password di 20 caratteri tratta da 95 caratteri ASCII stampabili ha log2(95^20) = 131,1 bit di entropia. Ogni bit aggiuntivo raddoppia il numero di tentativi necessari a un attaccante.
Devo includere simboli nelle mie password?
Includere simboli aumenta il set di caratteri da 62 (lettere + cifre) a 95 (ASCII stampabile), aggiungendo circa 6,1 bit di entropia per carattere. Alcuni sistemi limitano i simboli consentiti. Se un sistema rifiuta certi simboli, disabilita l'opzione simboli e compensa con una password più lunga. Una password alfanumerica di 24 caratteri ha più entropia di una password di 16 caratteri con simboli.
Perché non usare Math.random() per generare password?
Math.random() non è crittograficamente sicuro. La maggior parte dei motori JavaScript lo implementa con xorshift128+ o un PRNG veloce simile progettato per simulazioni e giochi, non per la sicurezza. Un attaccante che osserva alcuni output può recuperare lo stato interno e prevedere tutti gli output futuri. La Web Crypto API usa fonti di entropia del sistema operativo che non sono prevedibili.
Posso usare le password generate per API key e token?
Sì, ma considera i requisiti di formato del sistema di destinazione. Alcune API si aspettano chiavi codificate in base64 o stringhe esadecimali piuttosto che caratteri arbitrari. Per la generazione di segreti grezzi, usa il set completo di caratteri con 32 o più caratteri. Per le chiavi base64, genera byte casuali e codificali separatamente invece di trattare base64 come un set di caratteri per password.
Ogni quanto dovrei ruotare le password?
NIST SP 800-63B (2017, aggiornato nel 2024) sconsiglia la rotazione periodica forzata per le password utente perché porta a scelte di password più deboli. Effettua la rotazione solo quando c'è evidenza di compromissione. Per i segreti delle macchine e gli account di servizio, effettua la rotazione in base al modello di rischio dell'organizzazione, tipicamente ogni 90 giorni per le credenziali ad alto privilegio.