CRAM-MD5
# CRAM-MD5

In crittografia, CRAM-MD5 è un meccanismo di autenticazione challenge-response definito nel RFC 2195 basato sull'algoritmo HMAC-MD5 MAC. È utilizzato da alcune implementazioni SASL ed è spesso supportato dagli agent SMTP.

## Protocollo

* Challenge: nell'autenticazione CRAM-MD5, il server invia una stringa di sfida al client
* Response: il client risponde con una stringa con questa struttura:
   * La stringa, inviata con base64, viene decodificata
   * La stringa decodificata viene criptata con HMAC-MD5 usando la password dell'utente come chiave segreta
   * La sfida codificata viene convertita in cifre esadecimali
   * La username ed uno spazio blank vengono aggiunti all'inizio della stringa hex
   * La concatenazione viene codificata in base64 ed inviata al server
* Comparazione: il server esegue lo stesso metodo del client e se la stringa calcolata è uguale a quella inviata dal client allora l'autenticazione è concessa.

Questo metodo fornisce tre importanti tipi di sicurezza.

* Nessuno può duplicare l'hash senza conoscere la password
* Nessuno può replicare l'hash perché dipende dalla sfida che non è prevedibile
* Eventuali osservatori del traffico non possono leggere la password

I due elementi che forniscono questi tipi di sicurezza sono l'algoritmo di hash e la sfida generata casualmente.

## Debolezze del protocollo

* Non c'è mutua autenticazione: il client non verifica l'identità del server
* Memorizzazione debole della password: alcune implementazioni richiedono l'accesso alla password in chiaro mentre altri utilizzano lo step intermedio processato con HMAC per memorizzare una specie di MD5 della password
* Minaccia di reversibilità: l'attacco tramite dizionario offline diventa fattibile dopo aver catturato un frame scambiato con successo nel processo di autenticazione
