In crittografia, un oracolo random è una macchina a oracolo, una scatola nera teorica che risponde ad ogni domanda con una risposta veramente random scelta uniformemente all'interno del suo dominio di output. Per ogni domanda specifica la risposta, una volta assegnata dall'oracolo, è sempre uguale. In altri termini, un oracolo random è una funzione matematica che associa ogni possibile domanda ad una risposta random scelta all'interno del suo dominio di output.
Gli oracoli random sono delle astrazioni matematiche usate nelle dimostrazioni crittografiche; sono usati tipicamente quando non ci sono implementazioni note delle funzioni che forniscono le proprietà matematiche richieste dalla dimostrazione. La sicurezza di un sistema provata usando questa dimostrazione viene detta sicurezza all'interno del modello a oracolo random, contrapposta alla sicurezza all'interno del modello standard. In pratica, gli oracoli random sono usati per modellare funzioni crittografiche di hash all'interno di schemi dove sono necessarie delle forti assunzioni di randomicità sull'output delle funzioni di hash.
Una dimostrazione di questo tipo, in genere, argomenta la sicurezza di un protocollo adducendo la necessità, per l'attaccante che vuole violare il protocollo, di risolvere un problema computazionalmente complesso o di indurre l'oracolo ad un comportamento impossibile. Non tutti gli usi delle funzioni crittografiche di hash richiedono oracoli random: alcuni schemi (p.e.: Sistema Cramer-Shoup) richiedono solo qualche proprietà definita all'interno del modello standard, come resistenza alla collisione, resistenza alla preimmagine, resistenza alla seconda preimmagine, ecc.
Gli oracoli random sono stati considerati a lungo nella teoria della complessità computazionale
L'utilizzo di un oracolo all'interno di una dimostrazione prevede che sia reso disponibile a tutti i partecipanti, avversari inclusi. Oracoli multipli possono essere simulati a partire da un singolo oracolo, utilizzando dei prefissi alle richieste (p.e.: le richieste di formato "1|x" o "0|x" possono essere considerate come richieste "x" rivolte a due oracoli distinti; le richieste di formato "00|x", "01|x", "10|x" e "11|x" possono essere considerate come richieste "x" rivolte a quattro oracoli distinti).
Nessuna funzione reale può implementare un vero oracolo random. Esistono, infatti, degli schemi di autenticazione e crittografia sicuri all'interno del modello a oracolo che diventano banalmente insicuri una volta sostituito l'oracolo random con una funzione reale.[5] Una dimostrazione di sicurezza all'interno del modello a oracolo rafforza comunque la tesi che un attacco ad un protocollo, se impossibilitato a violare le altre assunzioni (come la complessità computazionale), deve concentrarsi nello scoprire proprietà sconosciute e indesiderabili della funzione di hash adottata. La sicurezza di molti schemi è stata dimostrata all'interno del modello a oracolo random: per esempio l'OAEP e il PSS.