Che cos'è questo strumento?
NTLM (NT LAN Manager) è il protocollo di autenticazione a sfida-risposta legacy di Microsoft, ancora usato oggi per gli accessi agli account Windows locali e come fallback in molti ambienti Active Directory. Il suo verificatore di password — comunemente chiamato "hash NTLM" — è definito nella specifica del protocollo MS-NLMP di Microsoft come `MD4(UTF-16-LE(password))`: la password viene prima codificata in UTF-16 little-endian (ogni carattere diventa così 2 byte, a differenza di UTF-8), e quella sequenza di byte viene poi sottoposta una sola volta all'algoritmo MD4 definito nella RFC 1320.
Il passaggio in UTF-16LE è il dettaglio su cui la maggior parte delle persone sbaglia quando reimplementa NTLM: calcolare l'hash dei byte UTF-8 di una stringa invece dei suoi byte UTF-16LE produce un digest completamente diverso e sbagliato, anche se il testo visibile appare identico. Questo strumento codifica correttamente, quindi il suo output corrisponde esattamente a ciò che Windows stesso memorizza e a ciò che si aspettano strumenti come hashcat (modalità 1000) e Mimikatz.
Poiché NTLM è precedente ai moderni criteri di hashing delle password, non possiede nessuna delle protezioni sviluppate in seguito appositamente per rallentare il cracking: nessun salt per utente, nessun fattore di lavoro configurabile, nessuna iterazione deliberata. È un singolo passaggio MD4, il che lo rende estremamente veloce da calcolare — una caratteristica comoda per la compatibilità con sistemi legacy, ma disastrosa contro attacchi a forza bruta e a dizionario.
Perché usarlo?
- Hai appena scritto una funzione Python che dovrebbe implementare MD4(UTF-16LE(password)) per un tool interno di audit, ma il valore che produce non combacia con quello atteso: incolli la stessa password qui, confronti l'hash di riferimento e capisci in trenta secondi se il bug è nella codifica UTF-16LE o nell'implementazione MD4.
- Durante un penetration test autorizzato hai estratto un hash da un dump NTDS.dit e vuoi verificare rapidamente, prima di lanciare hashcat su un intero wordlist, se una password candidata specifica produce quell'hash esatto.
- Stai preparando materiale didattico su NTLM per un corso di sicurezza e vuoi mostrare dal vivo agli studenti come lo stesso testo produca hash completamente diversi a seconda che venga codificato in UTF-8 o UTF-16LE prima dell'MD4.
- Un collega ti ha mandato un hash NTLM chiedendoti di verificarlo contro una password nota in un laboratorio CTF che stai risolvendo insieme: generi l'hash della password candidata qui e lo confronti carattere per carattere con quello ricevuto.
- Devi documentare in un report di audit di sicurezza perché un dominio Active Directory legacy è vulnerabile: generi l'hash NTLM della stessa password due volte su account diversi per dimostrare visivamente l'assenza di salt, un punto chiave del tuo report.
- Stai configurando hashcat in modalità 1000 per la prima volta e vuoi un valore di riferimento sicuro prima di lanciare un attacco reale: usi il vettore di test noto "password" per confermare che la tua configurazione di hashcat produce lo stesso output di questo strumento.
Come si usa
- Digita la password o la stringa che vuoi sottoporre a hash nel campo di input.
- Clicca su "Genera hash NTLM".
- Leggi l'hash NTLM di 32 caratteri esadecimali (l'output in maiuscolo è attivo per impostazione predefinita, come lo mostrano Windows e la maggior parte degli strumenti di cracking — deseleziona la casella per ottenerlo in minuscolo).
- Clicca su "Copia" per copiare l'hash negli appunti.
Esempio
Input
passwordRisultato
8846F7EAEE8FB117AD06BDD830B7586CQuesto è un vettore di test noto e verificabile in modo indipendente: l'hash NTLM della stringa letterale "password" è sempre 8846F7EAEE8FB117AD06BDD830B7586C. Puoi confrontare l'output di questo strumento con qualsiasi altra implementazione NTLM corretta.
NTLM a confronto con l'hashing moderno delle password
La tabella seguente evidenzia perché NTLM è considerato obsoleto per proteggere nuovi sistemi, pur restando radicato nell'infrastruttura Windows e Active Directory legacy.
| Proprietà | NTLM | bcrypt / scrypt / Argon2 |
|---|---|---|
| Primitiva sottostante | Singolo passaggio MD4 | Hash lento progettato appositamente, con costo regolabile |
| Salting | Nessuno — password identiche generano sempre hash identici | Salt casuale unico per ogni password |
| Iterazione / stretching | Nessuna | Fattore di lavoro configurabile, aumentabile nel tempo |
| Resistenza al brute-force | Molto debole — miliardi di tentativi al secondo sulle GPU moderne | Deliberatamente costoso per ogni tentativo |
| Dove si trova ancora | Autenticazione Windows legacy, fallback di Active Directory | Applicazioni nuove, best practice attuale |
Strumenti correlati
Se ti serve un hash crittografico general-purpose invece della costruzione MD4(UTF-16LE) specifica di NTLM, questi strumenti potrebbero fare al caso tuo.
→ Generatore di hash multi-algoritmo · Generatore di MD5 · Generatore di password
Errori comuni quando si reimplementa NTLM da zero
Se stai scrivendo il tuo codice per calcolare hash NTLM (per uno strumento di audit, un test unitario o per capire meglio il protocollo), questi sono gli errori più frequenti in cui inciampano quasi tutti.
- Codificare la password in UTF-8 invece che in UTF-16LE prima di applicare MD4 — l'errore singolo più comune, perché la maggior parte dei linguaggi di programmazione usa UTF-8 come codifica stringa predefinita.
- Usare l'ordine dei byte sbagliato (big-endian invece di little-endian) durante la codifica UTF-16 — il carattere "A" deve diventare 0x41 0x00, non 0x00 0x41.
- Confondere NTLM con NTLMv2 o con la risposta di sfida-risposta usata nell'autenticazione di rete: questo strumento calcola solo l'hash NT statico della password, non l'intero scambio di autenticazione a più fasi.
- Applicare più passaggi di MD4 invece di uno solo, magari per abitudine presa da altri schemi di hashing iterati — NTLM specifica esplicitamente un singolo passaggio, nessuna iterazione.
Domande frequenti
Che cos'è esattamente un hash NTLM?
È il verificatore di password che Windows calcola e memorizza per l'autenticazione NT LAN Manager, definito nella specifica MS-NLMP di Microsoft come MD4(UTF-16LE(password)) — un singolo passaggio MD4 sulla codifica in byte UTF-16 little-endian della password. È sempre lungo 128 bit, mostrati come 32 caratteri esadecimali.
Perché proprio UTF-16LE e non UTF-8 o ASCII?
Windows memorizza internamente il testo in UTF-16LE fin dalla progettazione di NT, quindi anche le password vengono codificate in questo modo prima dell'hashing. Ogni carattere diventa 2 byte (in ordine little-endian), inclusi i normali caratteri ASCII come "a", che diventano 0x61 0x00 invece del solo 0x61. Calcolare l'hash dei byte UTF-8 della stessa stringa produce un risultato completamente diverso e sbagliato: è il bug più comune in assoluto nelle implementazioni NTLM scritte da zero.
È sicuro usare NTLM oggi?
No, e Microsoft stessa consiglia di abbandonarlo a favore di Kerberos ove possibile. NTLM non usa salt, quindi password identiche producono sempre hash identici su qualsiasi utente e sistema, il che consente ricerche tramite rainbow table precalcolate. Non ha nemmeno iterazione o fattore di lavoro — un singolo passaggio MD4 senza salt —, quindi le GPU moderne possono tentare miliardi di combinazioni al secondo contro un hash catturato. Sopravvive principalmente per compatibilità con sistemi e applicazioni Windows più datati.
In cosa NTLM è diverso dagli hash di password moderni come bcrypt, scrypt o Argon2?
Gli algoritmi moderni di hashing delle password sono deliberatamente lenti e salati: bcrypt, scrypt e Argon2 aggiungono ciascuno un salt casuale unico per ogni password e un fattore di costo regolabile che può essere aumentato nel tempo man mano che l'hardware diventa più potente, proprio per rendere costoso il brute-forcing anche su larga scala. NTLM non fa nessuna delle due cose: è stato progettato in un'epoca in cui il brute-forcing offline non era ancora una minaccia concreta, e si vede. Proprio per questo NTLM non dovrebbe mai essere usato per proteggere qualcosa progettato oggi; i veri casi d'uso di questo strumento sono la compatibilità con l'infrastruttura Windows esistente e i test di sicurezza autorizzati, non la costruzione di nuovi sistemi.
Quali sono gli usi legittimi di un generatore di hash NTLM?
Verificare hash estratti da un database SAM o da un NTDS.dit durante un penetration test autorizzato o un audit delle credenziali; controllare che i propri strumenti o script implementino correttamente MS-NLMP; generare hash di prova per hashcat (modalità 1000) o verifiche di compatibilità con il formato Mimikatz in un laboratorio sotto il proprio controllo; e svolgere esercizi CTF o di formazione che coinvolgono esplicitamente NTLM. Usare questo strumento per attaccare account o sistemi che non ti appartengono, o per cui non hai un'autorizzazione scritta, non è un uso legittimo.
La mia password o il mio input vengono inviati a un server?
No. Il calcolo MD4 viene eseguito interamente in JavaScript nel tuo browser — non esiste alcuna API nativa del browser per MD4, quindi è implementato direttamente nel codice client di questa pagina — e nulla di ciò che digiti viene trasmesso da nessuna parte.
Come mai il mio codice che usa MD4(UTF-8(password)) non produce lo stesso hash di questo strumento?
È l'errore di implementazione più comune per NTLM: se codifichi la password in UTF-8 invece che in UTF-16LE prima di passarla a MD4, ottieni un digest completamente diverso, anche se il testo visualizzato è identico. Verifica che la tua funzione di codifica produca 2 byte per carattere in ordine little-endian prima di sottoporli a MD4.
Perché l'hash NTLM è sempre lungo esattamente 32 caratteri esadecimali, indipendentemente dalla lunghezza della password?
Perché MD4 produce sempre un digest fisso di 128 bit, mostrato come 32 cifre esadecimali (16 byte × 2 cifre per byte), sia che l'input sia una password di 3 caratteri sia che sia una stringa di migliaia di caratteri. Questa è una proprietà di tutte le funzioni hash crittografiche, non solo di MD4.
L'hash NTLM di una stringa vuota è comunque un valore valido?
Sì — anche una stringa vuota codificata in UTF-16LE (che produce zero byte) viene comunque passata attraverso MD4, producendo un hash valido di 32 caratteri. Questo valore specifico corrisponde all'hash NTLM di un account con password vuota, un dettaglio spesso citato negli audit di sicurezza.
Posso usare questo strumento per craccare un hash NTLM che ho, invece di generarne uno da una password nota?
No, questo strumento va in una sola direzione: da password a hash, non il contrario. NTLM è un hash crittografico e non è reversibile matematicamente — il cracking reale funziona generando hash da milioni di password candidate (con strumenti come hashcat) e confrontandoli con quello target, non invertendo la funzione.