# NTLM

Nelle reti Windows, NTLM (NT LAN Manager) è una suite di protocolli di sicurezza Microsoft che forniscono autenticazione, integrità e confidenzialità agli utenti. NTLM è il successore del protocollo Microsoft LAN Manager, e cerca di fornire retrocompatibilità con LM hash.

## NTLM e Kerberos

Microsoft ha adottato Kerberos come protocollo di autenticazione preferito per Windows 2000 e per i domini Active Directory. Kerberos è usato solitamente quando un server appartiene ad un dominio Windows oppure se viene stabilito un trust con un dominio (come ad esempio accade nell'autenticazione tra Linux e Windows Active Directory).
NTLM è utilizzato nelle seguenti situazioni:
* Il client si sta autenticando ad un server utilizzando un indirizzo IP
* Il client si sta autenticando ad un server che appartiene ad una foresta Active Directory differente che ha un legacy trust NTLM invece di un trust inter-foresta
* Il client si sta autenticando ad un server che non appartiene ad un dominio
* Non esiste un dominio Active Directory (ovvero quando esiste un workgroup oppure una rete peer-to-peer)
In Windows Vista e superiori, né LM o NTLM sono utilizzati di default. NTLM è ancora utilizzato per autenticazione interna. Per le autenticazioni esterne viene utilizzato di default NTLMv2. Le versioni precedenti di Windows possono essere configurate per funzionare in questo modo, ma non è la configurazione di default.

## Protocollo

NTLM è un protocollo challenge-response (sfida-risposta) che utilizza tre messaggi per autenticare un client all'interno di un ambiente orientato alla connessione e permette messaggi aggiuntivi se è richiesta integrità.
All'inizio, il client stabilisce un percorso verso il server ed invia un messaggio di negoziazione con le proprie capacità di connessione. In seguito il server risponde con un messaggio "sfida" (challenge) che è utilizzato per stabilire l'identità del client. Infine, il client risponde con il messaggio di autenticazione.
NTLM utilizza uno o entrambi i valori di password hashed, che sono entrambi memorizzati nel server (o nel domain controller) e che sono equivalenti alla password. Questo significa che se si riesce ad ottenere un hash password dal server, è possibile autenticarsi senza conoscere la password vera. I valori di password sono l'LM hash (una funzione di hashing di autenticazione basata su DES applicata ai primi 14 caratteri della password convertita al charset 8-bit della lingua) e l'NT hash (ovvero l'MD4 Little endian della password). Entrambi i valori hash sono di 16 bytes (128 bits).

### NTLMv1

Il server autentica il client inviando un numero casuale da 8 byte. Il client esegue un'operazione che coinvolge la stringa di sfida ed una stringa segreta condivisa tra client e server, nello specifico, si tratta di uno dei due password hash descritti in precedenza. Il client restituisce i 24 byte risultato della computazione. Le elaborazioni NTLMv1 sono solitamente eseguite utilizzando entrambi gli hash ed entrambi i risultati da 24 byte vengono inviati. Il server verifica che il client ha restituito il risultato corretto e da questo individua il corretto possesso della frase segreta ed, in definitiva, l'autenticità del client.
Entrambi gli hash producono risultati a 16 byte. Vengono aggiunti 5 byte di zero per arrivare a 21. I 21 byte sono separati in tre blocchi da 7 byte (56 bit). Ognuno di questi blocchi è utilizzato come chiave per criptare i 64 bit della sfida tramite DES. Queste tre codifiche sono nuovamente unite per formare una risposta a 24 byte. Entrambe le risposte, usando l'hash LM e l'hash NT sono restituire come risposta. Questa situazione è comunque configurabile.

### NTLMv2

NTLMv2, introdotto con Windows NT 4.0 SP4, è un protocollo di autenticazione challenge-response. È considerato come un sostituto migliorativo di NTLMv1.
NTLMv2 invia due risposte ad una sfida server da 8 byte. Ogni risposta contiene:
* 16 byte in hash HMAC-MD5 della sfida server
* Una sfida generata in modo casuale, parzialmente o interamente, dal client
* Una hash HMAC-MD5 della password del cliente ed altre informazioni
Le due risposte differiscono per il formato della sfida client. La risposta più corta utilizza un valore casuale ad 8 byte. Per verificare la risposta, il server deve ricevere la sfida client come parte della risposta. Viene quindi generato un pacchetto da 24 bytes composto dalla sfida breve concatenata alla risposta da 16 byte che corrisponde alla risposta prevista per il NTLMv1. In alcune documentazioni non ufficiali questa risposta è chiamata LMv2.
La seconda risposta inviata da NTLMv2 utilizza una sfida client di lunghezza variabile che include l'ora corrente nel formato NT Time, un valore casuale da 8 byte, il nome dominio ed altre informazioni standard. La risposta deve includere una copia di questa sfida client e la sua lunghezza. In alcune documentazioni non ufficiali questa risposta è chiamata NTv2.
Entrambi gli LMv2 e NTv2 eseguono l'hash della sfida client e server con la password utente ed altri informazioni utente La formula corretta prevede di cominciare con l'NT Hash, memorizzato nel SAM o AD e continuare l'hash utilizzando HMAC-MD5, con la username e il nome di dominio. Nel riquadro sottostante, X si riferisce al contenuto fisso del campo di formattazione.