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.
- 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.
- 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