Vai al contenuto principale

Generatore di hash bcrypt

Il formato .htpasswd consigliato, in 3 clic

Vuoi aggiungere un account a un file .htpasswd con l'algoritmo consigliato, senza installare apache2-utils? Inserisci un nome utente e una password: la riga in formato $2y$ è pronta da incollare.

Il costo è un esponente: ogni scatto raddoppia il tempo di calcolo. 10 è il valore di htpasswd -B, 12 un buon compromesso oggi.

Punti chiave dello strumento

Formato $2y$ nativo

L'hashing bcrypt di htpasswd -B, derivato da Blowfish. Compatibile con Apache 2.4, nginx, Traefik e Caddy.

Fattore di costo regolabile

Da 4 a 15, con un cursore. Ogni scatto raddoppia il lavoro richiesto a un attaccante. 10 come predefinito, come htpasswd -B.

Riga pronta da incollare

Il risultato viene mostrato come riga user:hash completa, copiabile direttamente nel tuo file .htpasswd.

Sale nuovo a ogni chiamata

bcrypt incorpora nell'hash un sale da 128 bit. Due account con la stessa password generano due hash diversi.

Non viene conservato nulla

La password serve al calcolo e poi sparisce. Nessuna traccia nel database, nessun registro con la password in chiaro.

Perché generare un hash bcrypt online?

L'autenticazione HTTP Basic resta il modo più rapido per chiudere un'area di amministrazione, una preproduzione o una dashboard interna. Si basa su un file .htpasswd in cui ogni riga associa un identificativo a una password hashata - mai in chiaro.

Da Apache 2.4, il comando htpasswd -B produce bcrypt, ed è il formato raccomandato dalla documentazione ufficiale. Il problema: quel comando presuppone di aver installato apache2-utils su Debian o httpd-tools su RHEL. Su un computer Windows, su un hosting condiviso o da un'interfaccia web, spesso manca.

Tre situazioni in cui questo generatore ti toglie dai guai:

  • Proteggere una preproduzione → Chiudere l'accesso a un ambiente di test prima che Google lo indicizzi
  • Aggiungere un account senza accesso SSH → Creare la riga dal browser e incollarla tramite il file manager del tuo hosting
  • Modernizzare un file esistente → Sostituire gradualmente le voci $apr1$ con voci $2y$

Come usare il generatore in 3 passaggi

Passo 1: inserire l'identificativo e la password

Inserisci il nome dell'account e la sua password. Il campo è mascherato per impostazione predefinita; fai clic sull'occhio per rileggere quanto digitato prima di convalidare. Il pulsante "Genera una password" estrae una stringa casuale di 16 caratteri se non ne hai già una.

Passo 2: regolare il fattore di costo

Il cursore parte da 10, il valore di htpasswd -B. Sali a 12 per un accesso sensibile. Ogni scatto raddoppia il tempo di calcolo: in fase di generazione e a ogni verifica del server.

Passo 3: copiare la riga

Vengono mostrati due risultati: l'hash da solo e la riga .htpasswd completa. Copia quest'ultima, incollala nel tuo file e ricarica la configurazione del server.


Anatomia di un hash bcrypt

Una riga .htpasswd si divide in due campi separati da due punti:

admin:$2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy

Il secondo campo si scompone così:

ParteEsempioRuolo
Identificatore di algoritmo2yDice al server che si tratta di bcrypt
Fattore di costo10Esponente: il calcolo esegue 2^10 = 1.024 round
Sale + digestN9qo8uLOickgx2ZMRZoMye...53 caratteri: 22 per il sale da 128 bit, 31 per l'impronta

A differenza di APR1-MD5, il sale non occupa un campo separato: è attaccato al digest nell'ultimo blocco. Resta leggibile in chiaro, il che è normale - il suo ruolo non è essere segreto, ma impedire che una tabella precalcolata serva a recuperare la password.


Capire il fattore di costo

Il costo è un esponente, non un moltiplicatore. Un costo di N esegue 2^N round di derivazione della chiave:

CostoRoundTempo indicativoUtilizzo
8256~15 msTroppo basso oggi
101.024~60 msPredefinito di htpasswd -B, corretto
124.096~250 msConsigliato per un accesso sensibile
1416.384~1 sLatenza percepibile a ogni connessione

Due cose da tenere a mente. In primo luogo, quel tempo si paga a ogni verifica, quindi a ogni richiesta HTTP Basic: un costo di 14 su una pagina il cui browser ripete l'autenticazione per ogni risorsa si sente subito. In secondo luogo, l'impostazione giusta dipende dal tuo hardware: misura piuttosto che copiare un valore, con l'obiettivo abituale di 100-250 ms sul server che eseguirà la verifica.


Proteggere una directory con Apache

1. Creare il file

Posiziona il tuo file .htpasswd fuori dalla root web, così non verrà mai servito via HTTP:

/var/www/secrets/.htpasswd

2. Dichiarare la protezione

Nel .htaccess della directory da proteggere, o nel blocco <Directory> del tuo VirtualHost:

AuthType Basic
AuthName "Area riservata"
AuthUserFile /var/www/secrets/.htpasswd
Require valid-user

3. Ricaricare la configurazione

sudo apachectl configtest && sudo systemctl reload apache2

Per nginx, la stessa coppia di file si dichiara così:

location /admin/ {
    auth_basic           "Area riservata";
    auth_basic_user_file /var/www/secrets/.htpasswd;
}

nginx legge bcrypt dalla versione 1.0.3 sui sistemi la cui crypt_r() lo supporta, il che copre tutte le distribuzioni Linux comuni.


bcrypt a confronto con gli altri formati .htpasswd

FormatoPrefissoCosto di calcoloVerdetto
bcrypt$2y$Regolabile, 2^costo roundConsigliato per ogni nuovo progetto
APR1-MD5$apr1$1.000 iterazioni MD5Accettabile, massima compatibilità
SHA-1{SHA}1 iterazione, senza saleDa evitare: niente sale, decifrabile con una tabella
crypt() DESnessuno25 iterazioni, troncato a 8 caratteriObsoleto, non usarlo più

In sintesi: bcrypt è l'unico formato .htpasswd il cui costo si adatta all'hardware dell'epoca. Gli altri tre hanno un costo fisso, deciso negli anni '90 o 2000, che il progresso delle GPU ha reso irrisorio. Tieni l'APR1-MD5 solo se il tuo server non sa leggere $2y$.


Verificare l'hash dalla riga di comando

Il risultato di questo strumento è un hash bcrypt standard, verificabile con le utilità di sistema:

# Generare l'equivalente con htpasswd (pacchetto apache2-utils / httpd-tools)
htpasswd -nbB admin laMiaPassword

# Imporre un fattore di costo di 12
htpasswd -nbB -C 12 admin laMiaPassword

Le due stringhe non saranno identiche - il sale cambia a ogni estrazione -, ma entrambe validano la stessa password. Per controllarlo:

# Ripetere la verifica con il sale dell'hash esistente
python3 -c "import bcrypt,sys; print(bcrypt.checkpw(b'laMiaPassword', sys.argv[1].encode()))" '$2y$10$...'

FAQ - Domande frequenti

D: Cos'è il formato $2y$?

R: È il marcatore di bcrypt in un file .htpasswd. L'hash completo segue il modello $2y$<costo>$<sale><digest>: un identificatore di algoritmo, un fattore di costo a due cifre e 53 caratteri con il sale da 128 bit e l'impronta. È ciò che scrive htpasswd -B.


D: Che differenza c'è tra $2a$, $2b$ e $2y$?

R: Nessuna di sostanza: sono tre marcatori dello stesso algoritmo. $2y$ è stato introdotto da PHP nel 2011 per segnalare un'implementazione corretta di un bug sui caratteri non ASCII, un bug assente dalla libreria usata qui. Apache e nginx accettano tutti e tre.


D: Quale fattore di costo scegliere?

R: 10 come predefinito, 12 per un accesso sensibile. Il riflesso giusto è misurare sul server che eseguirà la verifica e puntare a 100-250 ms: abbastanza lento da ostacolare un attacco a dizionario, abbastanza veloce da non notarsi nell'uso quotidiano.


D: Perché non posso superare 15?

R: Poiché il costo è un esponente, 16 richiede già diversi secondi di calcolo e supererebbe il tempo concesso a una richiesta HTTP. Per un costo maggiore, genera l'hash in locale con htpasswd -B -C 18.


D: bcrypt è meglio di APR1-MD5?

R: Sì, nettamente. APR1-MD5 esegue 1.000 iterazioni di MD5, che l'hardware specializzato calcola a miliardi al secondo. bcrypt richiede memoria e accessi non sequenziali, limitando fortemente il parallelismo di una GPU. Per un nuovo file .htpasswd, bcrypt senza esitare.


D: Posso usare una password più lunga di 72 caratteri?

R: No, e non è un limite di questo strumento: bcrypt ignora semplicemente tutto ciò che supera 72 byte. Una password di 80 caratteri equivarrebbe quindi ai suoi primi 72. Attenzione: un carattere accentato conta come due byte in UTF-8.


D: La password viene memorizzata da qualche parte?

R: No. Viaggia in HTTPS fino all'API CaptainDNS per la durata del calcolo, poi viene dimenticata. Nessun database, nessun registro con la password in chiaro.


D: Dove va posizionato il file .htpasswd?

R: Fuori dalla root web, ad esempio in /var/www/secrets/. Se si trova in una directory servita via HTTP, un visitatore potrebbe scaricarlo e attaccare gli hash offline - che è esattamente ciò che il fattore di costo rende costoso, anche se non impossibile.


Strumenti complementari

StrumentoUtilità
Generatore APR1-MD5Produrre una riga .htpasswd nel formato storico di Apache
Generatore di passwordEstrarre una password solida prima di hasharla
Hash GeneratorCalcolare MD5, SHA-1, SHA-256 e SHA-512 di un testo
Codificatore Base64Codificare l'header Authorization di una richiesta Basic
Analizzatore di header HTTPControllare gli header restituiti da un'area protetta

Risorse utili


Impegno per la privacy

La tua password viene inviata all'API CaptainDNS solo per calcolare l'hash, su una connessione crittografata. Non viene né memorizzata né registrata. Vengono conservate solo metriche tecniche anonime (durata del trattamento, codice di risposta).