L'operazione al centro di RSA è un esponenziazione modulare: dato input m , calcolo m e modulo n . Sebbene in generale questa sia una permutazione unidirezionale di interi modulo n , non soddisfa tutte le caratteristiche necessarie per la crittografia asimmetrica generica:
-
Se e è piccolo e m è piccolo, allora m e potrebbe essere più piccolo di n , a questo punto l'esponenziazione modulare non è più modulare e può essere ripristinata in modo efficiente.
-
L'operazione è deterministica, che consente una ricerca esaustiva sul messaggio : l'utente malintenzionato crittografa i messaggi possibili finché non viene trovata una corrispondenza con il messaggio crittografato effettivo.
-
L'esponenziazione modulare è malleabile: data la "crittografia" di m 1 e m 2 , una semplice moltiplicazione produce la crittografia di m 1 m 2 . Questo è simile alla crittografia omomorfica , che può essere una buona proprietà, o meno, a seconda del contesto.
Per questo motivo, il numero intero m soggetto a RSA non deve essere il dato da crittografare da solo, ma dovrebbe essere il risultato di una trasformazione che garantisce che m è "non piccolo", contiene alcuni byte casuali e scoraggia la malleabilità.
Il riempimento "v1.5" in PKCS # 1 svolge il lavoro abbastanza bene, in base a due avvertimenti (noti):
-
Un motore di decrittografia può essere trasformato in un oracle riempimento se l'utente malintenzionato può inviare messaggi dannosi per decrittografare, e osservare se il motore di decrittografia ha trovato o meno una struttura di imbottitura corretta. Questo è l'attacco di Bleichenbacher, che potrebbe funzionare contro il server SSL, che richiede circa un milione di handshake interrotti per recuperare la chiave simmetrica SSL. I server SSL sono stati successivamente riparati (se la decrittografia non riesce a trovare un padding, il motore continua comunque con un blob casuale invece del "pre-master secret"), ma ciò evidenzia un potenziale problema con PKCS # 1 v1.5.
-
Questo schema di riempimento non è mai stato "provato". Le prove di sicurezza sono una cosa carina da avere. A mio parere, questa imbottitura ha qualcosa di meglio, che è stato distribuito sul campo e ampiamente utilizzato da quasi 20 anni; ma molte persone lo preferiscono quando ci sono alcune matematiche che confermano l'esperienza.
OAEP mira a migliorare le cose su questi due punti. Si è scoperto che per il riempimento di oracoli, le cose non sono chiare ; e la prima dimostrazione è stata in qualche modo sbagliata da Shoup. La prova è stata "riparata" da Fujisaki, Okamoto, Pointcheval e Stern nel caso di RSA (OAEP è stato progettato come schema di riempimento generico, ma ora abbiamo una prova di sicurezza solo quando usato con RSA).
Per riassumere , OAEP cerca di migliorare rispetto al precedente padding per la resistenza contro attacchi cifratici scelti (non attacco plaintext scelto : poiché il la chiave pubblica è pubblica, chiunque può crittografare qualsiasi cosa a volontà), ma il pad v1.5 era già euristicamente buono, fino a un milione di decrittografie, che è abbastanza buono per molti scopi, e può essere patchato per altri (come è stato fatto per SSL). OAEP fa meglio se implementato correttamente , che non è facile come si crede di solito.