Per dirla a modo mio, in primo luogo, un "oracolo" in crittografia si basa sul concetto di un oracolo mitologico; una persona con una linea diretta a una divinità, e quindi con accesso a informazioni che i comuni mortali non hanno. Nella crittografia, gli oracoli sono "scatole nere" in grado di eseguire compiti che sarebbero difficili per l'aggressore e possono quindi fornire a un utente malintenzionato le informazioni che sono normalmente difficili da ottenere.
Un oracle di riempimento, in particolare, può dire al malintenzionato se un messaggio che inserisce in esso è adeguatamente riempito (la maggior parte delle modalità di cifratura utilizza una forma di riempimento rimovibile dei dati per garantire che la lunghezza del messaggio sia un multiplo esatto della dimensione del blocco della cifra ). Lo fa tentando di decrittografare il messaggio e comportandosi in modo diverso quando un blocco è o non è riempito correttamente, tali differenze di comportamento sono visibili all'attaccante. L'oracolo di imbottitura è di solito un partecipante inconsapevole; l'attaccante in genere dirotta un'implementazione cifrata inizializzata, alimentando messaggi appositamente predisposti di sua scelta in quello che è noto come un attacco di testo cifrato scelto.
Un tipo di attacco correlato è un attacco a tempo; è un modo in cui un'implementazione di decrittografia può essere trasformata in un oracle di riempimento, misurando il tempo necessario per determinare se il blocco è adeguatamente riempito. Alcune modalità di cifratura, come CBC, possono essere decifrate in qualsiasi ordine, quindi alcune implementazioni decodificheranno l'ultimo blocco per controllare il riempimento del messaggio, nel tentativo di "fallire velocemente" sui messaggi corrotti. Tuttavia, la differenza tra il tempo necessario per controllare il padding e per tentare di decrittografare il messaggio completo può essere utilizzata da un utente malintenzionato per determinare quale dei due è successo, anche se l'errore mostrato all'attaccante è lo stesso in entrambi i casi.
Per proteggersi da questi tipi di attacchi, non deve esserci differenza di comportamento distinguibile tra un tentativo di decifrare un messaggio che non è adeguatamente riempito rispetto a uno che è. Il modo più noto per farlo è quello di incorporare un checksum sicuro noto come un codice di autenticazione dei messaggi. Questo MAC è tipicamente prodotto da un sicuro "hash con chiave", utilizzando la stessa chiave che ha crittografato il messaggio. Il messaggio viene prima crittografato e quindi il testo cifrato, insieme alle informazioni su come è stato crittografato, come l'algoritmo di cifratura, la modalità di cifratura, la dimensione della chiave, la dimensione del blocco e IV, viene sottoposto a hash utilizzando l'algoritmo MAC e la stessa chiave.
Per decrittografare, l'algoritmo ricalcola innanzitutto il MAC dato il testo cifrato e le informazioni di cifratura condivise tra i due computer. Se il MAC calcolato non corrisponde a quello incluso nel testo cifrato, la decrittografia fallisce; o il messaggio, MAC o entrambi sono stati cambiati in transito con qualche mezzo, o benigno (corruzione dei dati) o malevolo (tentativo di attacco).
Le probabilità che un utente malintenzionato, non conoscendo la chiave, sia in grado di cambiare il testo cifrato e il suo MAC in modo coerente è ritenuto difficile, e con questo intendo approssimativamente 1 su 2 ^ (keysize) possibilità, quindi la strategia di cambiare sistematicamente il messaggio diventa meno efficiente di provare semplicemente ogni possibile chiave. Inoltre, poiché la stessa operazione, che richiede sempre lo stesso tempo, è in grado di rilevare qualsiasi problema di dati post-crittografia che renderebbe il messaggio non valido, un utente malintenzionato non può rilevare la differenza apportata da qualsiasi modifica sistematica al testo cifrato e al MAC ; o corrisponde (estremamente improbabile; vedi sopra) o non ( molto più probabile).