Padding-Oracle attack

Un attacco CCA utilizzato contro protocolli reali

L’attacco richiede soltanto l’abilità di determinare ****se un cifrato modificato viene decifrato correttamente oppure no

Nella cifratura CBC un msg deve avere lunghezza multipla della lunghezza del blocco → uno schema di padding viene usato per ottenere il requisito

Sia $L$ la lunghezza del blocco in byte, sia $b$ il numero di byte che devono essere aggiunti al messaggio, risulta $1 \leq b \leq L$ (se il messaggio è già multiplo di $L$ allora $b=L$)

Strategia di padding: aggiungiamo al messaggio la stringa contenente un byte $b$ esattamente $b$ volte

In fase di decifratura, il pad viene controllato e rimosso, prima di restituire il plaintext

Se il pad non è corretto viene generato e restituito un errore $\perp$ → usando questa informazione Adv riesce a recuperare completamente il plaintext

Esempio

Consideriamo l’attacco su un cifrato di 3 blocchi $c = <c_0,c_1,c_2> = <IV, c_1,c_2>$

Applicando il CBC-mode e lo schema di padding abbiamo $m_2= F_k^{-1}(c_2) \oplus c_1$ dove $m_2$ termina con $0 \times b..b$

Sia $c_1'$ identico a $c_1$ a parte una modifica nel byte finale → risulta $m_2' = F_k^{-1}(c_2)\oplus c_1'$ uguale ad $m_2$ eccetto che per una modifica nel byte finale

Lo stesso ragionamento vale per qualsiasi byte scelto, in generale $c_1' = c_1 \oplus \Delta$ $\Rightarrow$ $m_2'=m_2 \oplus \Delta$

Un Adv $A$ modifica il primo byte di $c_1$ e chiede la decifratura di $c'=<IV, c_1^1,c_2>$

L’attacco viene ripetuto al più $L$ volte e alla fine $A$ ottiene il valore di $b$

$A$ crea valori $\Delta_i$ specifici per ogni possibile valore di byte e quando invia $c_i$ al sistema osserva se la decifratura è corretta → $A$ può calcolare il byte $B=(b+1) \oplus i$

L’attacco può essere esteso per recuperare gli altri byte del messaggio in chiaro