Firma digitale con chiave simmetrica: HMAC
Un codice di autenticazione del messaggio (MAC) è un codice che viene generato da una funzione di hash e una chiave segreta. Il MAC viene inviato insieme al messaggio e può essere utilizzato per verificare l'integrità e l'autenticità del messaggio. Il MAC è calcolato utilizzando la chiave segreta e il messaggio, in modo che solo chi possiede la chiave segreta possa generare un MAC valido per quel messaggio. Il destinatario quando riceve il messaggio e il suo MAC può ricalcolare il MAC utilizzando la stessa chiave segreta e verificare che il MAC ricevuto corrisponda al MAC calcolato.
Di MAC ne esistono diversi tipi, tra cui HMAC (Hash-based Message Authentication Code) che è uno dei più comuni. HMAC utilizza una funzione di hash crittografica, come SHA-256, e una chiave segreta per generare il MAC. HMAC è progettato per essere sicuro contro attacchi di forza bruta e collisioni, e viene utilizzato in molti protocolli di sicurezza, come TLS, IPsec e SSH.
Il MAC è simile alla firma digitale, ma utilizza una chiave segreta condivisa tra mittente e destinatario, mentre la firma digitale utilizza una chiave privata del mittente e una chiave pubblica del destinatario. Per capire meglio le differenze tra hash, MAC e firma digitale, consideriamo i seguenti obiettivi di sicurezza:
- Integrità: può il destinatario verificare che il messaggio non sia stato alterato?
- Autenticazione: può il destinatario verificare che il messaggio provenga dal mittente?
- Non ripudio: può il mittente negare di aver inviato il messaggio?
Nella seguente tabella, vediamo come hash, MAC e firma digitale soddisfino questi obiettivi:
Obiettivo di sicurezza | Hash | MAC | Firma digitale |
---|---|---|---|
Integrità | Sì | Sì | Sì |
Autenticazione | No | Sì | Sì |
Non ripudio | No | No | Sì |
Tipo di chiave | Nessuna | Simmetrica | Asimmetrica |
Quindi i MAC sono utilizzati quando mittente e destinatario condividono una chiave segreta e vogliono garantire l'integrità e l'autenticità del messaggio. Non forniscono tuttavia la non ripudiabilità, poiché il mittente potrebbe negare di aver generato il MAC.
Invece, siccome utilizzano una chiave simmetrica condivisa, i MAC sono più veloci da calcolare rispetto alle firme digitali, ma richiedono che mittente e destinatario condividano la stessa chiave segreta. Cosa impossibile in un contesto di comunicazione pubblica dove si dovrebbe generare una chiave segreta per ogni coppia mittente-destinatario, quindi in una rete di \(n\) utenti ci sarebbero \(n*(n-1)/2\) chiavi segrete da gestire, mentre con le firme digitali basta un coppia di chiavi pubblica-privata per ogni utente, quindi \(2n\) chiavi da gestire. Per questo motivo, le firme digitali sono più adatte per la comunicazione pubblica, mentre i MAC sono più adatti per la comunicazione privata.
Un modo ERRATO
di autenticare un messaggio potrebbe essere di generare una chiave segreta casuale \(K\) e fare \(MAC = H(K + messaggio)\). Questo metodo è vulnerabile ad attacchi di tipo length extension
, in cui un attaccante può estendere il messaggio originale con dati arbitrari e generare un nuovo MAC valido senza conoscere la chiave segreta. Per evitare questo tipo di attacco, HMAC utilizza una costruzione più complessa che prevede l'utilizzo della chiave segreta in più passaggi.