title: CRAM-MD5
text: # 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
  