Reflection attack
# Reflection attack

Il reflection attack è un tipo di attacco informatico volto a colpire sistemi di autenticazione di tipo challenge-response, che usano lo stesso protocollo di comunicazione in entrambe le direzioni (ovvero, ciascuna parte utilizza lo stesso protocollo per autenticarsi con l'altra parte). L'idea alla base di questo tipo di attacco è di imbrogliare la vittima chiedendogli una soluzione (response) alla sua stessa sfida (challenge).

## Attacco

In linea di massima, l'attacco è condotto come segue:

* L'attaccante inizia la connessione con la vittima.
* La vittima chiede all'attaccante di autenticarsi, inviandogli una sfida (challenge).
* L'attaccante inizia una seconda connessione con la vittima chiedendogli di identificarsi tramite la stessa challenge.
* La vittima risponde alla sfida con la risposta corretta.
* L'attaccante invia il response corretto nella prima connessione.

Se il protocollo di autenticazione non è progettato attentamente, la vittima che riceve la risposta la accetterà in quanto corretta e lascerà all'attaccante un canale di connessione autenticato (mentre il secondo canale verrà abbandonato).

## Contromisure

La contromisura più comune a questo tipo di attacco è la seguente: la vittima inserisce il suo codice di identificazione nel response alla challenge. In questo modo, se a sua volta riceve un response contenente il suo ID, può semplicemente scartarlo.

* Alice inizia la connessione con Bob
* Bob sfida Alice inviandogli un nonce. $B\rightarrow A:N$
* Alice risponde inviando il suo identificatore e il nonce crittati usando la chiave comune $K_{ab}$. $A\rightarrow B:\{A,N\}K_{ab}$
* Bob decifra il messaggi, controllando che provenga da Alice e non da lui stesso assicurandosi che contenga l'identificatore $A$ e non $B$. Se il nonce è quello inviato da lui, accetta il messaggio.

Un'altra possibile soluzione è usare protocolli (o chiavi crittografiche) differenti per le due direzioni di autenticazione.

