Please enable JavaScript.
Coggle requires JavaScript to display documents.
Lezione 24: codici MAC e funzioni hash - Coggle Diagram
Lezione 24: codici MAC e funzioni hash
Codice MAC
Codice generato da una funzione C che viene aggiunto dal mittente al messaggio da inviare
Il destinatario ricalcola il codice dal messaggio e lo confronta con quello ricevuto per verificare l'autenticità
Funzione
molti-a-uno
Più chiavi doverse producono lo stesso codice MAC
Con un attacco a
forza bruta
, conoscendo una coppia messaggio in chiaro e codice MAC si possono provare tutte le 2^k chiavi possibili
Vi saranno 2^(k-n) chiavi valide
L'attaccante deve ripetere l'attacco sul sottogruppo di chiavi valide usando un'altra coppia messaggio in chiaro / codice MAC
Dopo k/n fasi rimarrà una sola chiave
n = lunghezza codice MAC
k = lunghezza chiave
Un migliore attacco è quello del
messaggio fraudolento
Il messaggio M è composto da concatenazioni di blocchi X1...Xm
Il codice MAC viene calcolato su E(K,Δ(M) = XOR(X1,...,Xm))
L'attaccante sostituisce i blocchi X1...Xm-1 con blocchi di messaggio fraudolento Y1...Ym-1
Xm viene sostituito con Ym = XOR(Y1,...,Ym-1,Δ(M))
Calcolando Δ(M') questo verrà uguale a Δ(M) in quanto lo XOR da Y1 a Ym-1 in XOR con la prima parte di Ym è uguale a 0
Un altro esempio di codice MAC, basato su DES e CBC suddivide il messaggio in blocchi da 64 bit e applica il DES con chiave da 56 bit generando un codice di 64 bit che viene messo in XOR con il blocco successivo
L'output cifrato DES dell'ultimo blocco costituisce la base da cui estrarre il codice MAC che può essere formato dai primi n bit con 16<=n<=64
Funzioni hash
Codice generato da una funzione H applicata ad un testo di lunghezza variabile con H(M) di lunghezza fissa
Il destinatario ricalcola la funzione hash dal messaggio e ne confronta il risultato con quello ricevuto per verificare l'autenticità
Deve essere facile da calcolare e monodirezionale (impossibile trovare messaggio partendo da hash).
Deve essere impossibile costruire due messaggi x ed y tali che H(x) = H(y)
Un esempio di funzione hash potrebbe calcolare lo XOR di tutti i bit nella stessa posizione di ogni blocco in cui è diviso il messaggio
Parti del messaggio con lo stesso valore daranno sempre lo stesso risultato e questo è analizzabile
Un esempio di funzione hash può calcolare lo RXOR nella stessa modalità del precedente ma ruotando a sinistra di una posizione il risultato ottenuto dopo ogni operazione di XOR
Se l'attaccante è in possesso del messaggio in chiaro e del relativo codice hash può generare un nuovo messaggio fraudolento aggiungendo un ultimo blocco di n bit costruito in modo da ottenere l'hash originario tramite l'operazione di XOR
RXOR = XOR ( A , ROTATE (B) )
Attacco a compleanno
Il mittente firma il messaggio aggiungendo il corrispondente codice hash cifrato con la propria chiave privata
L'attaccante genera 2^(m/2) varianti del messaggio (messaggi con stesso significato ma con parole diverse)
L'attaccante prepara 2^(m/2) varianti del messaggio fraudolento
I due insiemi vengono confrontati per trovare una coppia di messaggi M', F' tali che H(M') = H(F')
Probabilità di successo = 50% nel caso fallisca si generano altri messaggi validi e fraudolenti e si riprova
L'attaccante offre ad A l'hash H(M') che è uguale a H(F') per la firma e associa essa alla variante fraudolenta del messaggio F'. Il tutto viene inviato al destinatario
Il destinatario ricalcola l'hash su F' e verificando che è uguale a quello inviato da A accetta il messaggio F' come autentico e proveniente da A
Si basa sul paradosso del compleanno