06 Autenticazione dei messaggi

Requisiti

Consideriamo qui di seguito alcuni degli attacchi possibili e la tecnologia che tipicamente li contrasta.

threat

countermeasure

disclosure

encryption

traffic analysis

encriptyon

masquerade

msg authentication => digital signature

content modifications (ins, del, reorder)

msg authentication => digital signature

timing modification (replay, delay)

msg authentication => digital signature

source repudiation

msg authentication => digital signature

destination repudiation

digital signature + ad hoc protocols

Definiamo le seguenti funzionalità:

  • message authentication - una procedura per verificare che un messaggio provenga da una fonte autorizzata e non è stato alterato;

  • digital signature - è un message authentication che include anche misure per contrastare la source repudiation;

Queste due funzionalità richiedono una funzione che produca un authenticator. Quest’ultimo è utilizzato dalla funzione di autenticazione.

Metodi di autenticazione dei messaggi

Per produrre un authenticator sono possibili tre diversi metodi:

  • message encryption - in questo caso l’intero ciphertext è utilizzato come authenticator;

  • message authentication code (MAC) - una funzione pubblica che dato il messaggio e una secret key produce un valore di lunghezza fissa da utilizzare come authenticator;

  • hash function - una funzione che mappa un messaggio in un valore hash di lunghezza fissa, che serve come authenticator.

Message encryption

La cifratura di un messaggio può essere di per sè un mezzo di autenticazione.

In particolare, se si usa una chiave segreta simmetrica:

  • il messaggio deve provenire dal mittente, in quanto è l’unica altra parte che possiede la secret key;

  • il contenuto non può essere alterato se il messaggio ha una struttura appropiata, utilizzando ridondanza o un checksum per rilevare eventuali modifiche.

L’osservazione precedente deriva dal fatto che un attaccante può modificare il ciphertext alla cieca, senza averne comprensione, per questo è necessario utilizzare un apposita struttura o checksum che permetta di rilevare l’alterazione: il confronto tra il checsum del ciphertext originale rispetto quello modificato fallisce.

Il checksum può essere:

  • interno - se il relativo codice di controllo viene criptato insieme con il messaggio;

  • esterno - se il codice di controllo non è criptato; in tal caso il messaggio viaggia in chiaro.

I seguenti schemi illustrano i due casi predetti.

_images/12_checksum.svg

Per effettuare la cifratura del messaggio è possibile utilizzare le public/private key. In tal caso abbiamo le seguenti possibilità.

_images/09_pke_confidentiality.svg

Il diagramma precedente ci mostra l’uso della chiave pubblica di B per avere confidenzialità. Qui non vi è autenticazione perché la chiave pubblica di B è nota: chiunque può cifrare un messaggio con la chiave pubblica di B.

_images/10_pke_auth_signature.svg

In questo diagramma invece abbiamo autenticazione e firma del messaggio. Infatti l’uso della chiave privata di A assicura che sia stato proprio questo attore a cifrare il messaggio. Non vi è confidenzialità in quanto l’uso della chiave pubblica 1 di A permette l’accesso al contenuto del messaggio.

_images/11_pke_conf_auth_signature.svg

In quest’ultimo caso abbiamo anche la confidenzialità, oltre l’autenticazione e la firma. Ciò si ottiene con due cifrature in cascata:

  1. come nel caso precedente, usando a propria chiave privata, A assicura autenticazione del messaggio e la propria firma;

  2. successivamente, criptando con la chiave pubblica di B, assicura la confidenzialità 2.

Message authentication code (MAC)

Il MAC è un checksum crittografico:

  • è un blocco di grandezza fissa;

  • che dipende da due parameri: il messaggio e una chiave;

  • e, come l’encryption, non deve essere reversibile.

Il MAC viene appeso cone una firma al messaggio. Il ricevente esegue lo stesso calcolo sul messaggio, per poi controllare che il risultato coincida con il MAC.

L’uso del MAC assicura che il messaggio non sia stato alterato e provenga dal mittente. Di seguito si riportano i tre possibili modi di utilizzo del MAC.

_images/13_mac.svg

In figura, il blocco C rappresenta il cryptographic checksum che produce il \(MAC = C_{K}(M)\). Ovvero condensa un messaggio di lunghezza variabile M usando una secret key K in un authenticator di lunghezza fissa.

Il MAC è una funzione molti ad uno. Potenzialente più messaggi possono avere lo stesso MAC. Ma trovarne realmente due con questa proprietà deve essere molto difficile.

Ad esempio. Consideriamo un messaggio lungo 100 bits, che produca un MAC lungo 10 bits. Abbiamo \(2^{100}\) possibili messaggi a fronte di \(2^{10}\) possibili MAC. In queste condizioni ogni MAC può essere generato da \(2^{100} / 2^{10} = 2^{90}\) differenti messaggi.

Ai fini della sicurezza valgono le seguenti osservazioni.

  1. Un attacante può osservare M e \(C_{K}(M)\). Deve essere computazionalmente infattibile costruire un \(M'\) tale che \(C_{K}(M') = C_{K}(M)\).

  2. \(C_{K}(M)\) deve essere uniformemente distribuita. Cioè, dati due messaggi \(M\) e \(M'\) scelti casualmente, la probabilità che \(C_{K}(M) = C_{K}(M')\) deve essere \(2^{-n}\) done n è il numero di bit del MAC 3.

  3. Inoltre se \(M' = f(M)\) 4, in tal caso deve valere \(Pr[C_{K}(M) = C_{K}(M') = 2^{-n}\).

Hash function

Una funzione hash è una variante del MAC, che non usa una secret key K.

Se M è un messaggio, \(H(M)\) denota il valore hash. Un altro modo per chiamare l’hash è message digest.

Una funzione hash fornisce capacità di rilevamento di errori.

Inoltre una funzione hash può essere utilizzata per fornire autenticazione del messaggio.

I possibili schemi d’uso di una funzione hash sono sei, riportati qui di seguito:

_images/14_hash.svg

Un possibile attacco alle funzioni hash è il birthday attack. Questo consiste nel generare messaggi alternativi finché non si trova un messaggio con lo stesso hash. In media, se m è la lunghezza in bit del codice hash, basterebbe generare in media \(2^{m/2}\) messaggi per trovarne uno con lo stesso codice.

Ad esempio dato un codice hash a 64 bit, un attaccante può generare \(2^{64}\) messaggi e cercare un codice hash uguale all’originale.

In particolare:

  • A prepara un messaggio M da segnare con un hash lungo m bit;

  • l’attaccante genera \(2^{m/2}\) variazioni sul messaggio M, tutte con lo stesso significato;

  • trovata la variazione con lo stesso codice, l’attaccante la propone ad A per la firma.

La generazione di variazioni di un messaggio con lo stesso significato non è complesso. Ad esempio si possono inserire sequenze di «spazio-spazio-backspace». Oppure è possibile analizzare il testo sostituendodei sinonimi o forme verbali equivalenti.

Qual’è lo scopo di un birthday attack? Si comprende osservando questo scenario. A deve firmare un documento \(M\). L’attaccante B ne è a conoscenza e vuole far firmare ad A un diverso documento \(M'\):

  • B calcola l’hash di \(H_{M} = H(M)\);

  • quindi produce variazioni, con lo stesso significato, di \(M'\) finché non ne trova uno per il quale vale \(H_{M'} = H_{M}\);

  • a questo punto B fa” firmare ad A il messaggio \(M\), dopo di che copia la firma sul messaggio \(M'\) precedentemente trovato: nessuno può contestare la firma su \(M'\) che risulta matematicamente corretta.


1

Chiave pubblica, ergo diponibile a chiunque.

2

Perché solo la chiave privata i B può decrittare.

3

Questa ooservazione è necessaria per contrastare gli attacchi di tipo forza bruta.

4

Questo significa che il messaggio originale M viene alterato secondo una qualche forma. Ad esempio invertendo uno o più specifici bit. Una possibilità consiste nel modificare il carattere spazio con la sequenza di tre caratteri: spazio backspace spazio, che non altera il significato del contenuto del testo.