Deși RSA nu este destinat criptării, se poate folosi RSA pentru criptare. Dacă cineva folosește TextBook RSA, atunci va fi nesigur, deoarece criptarea este gratuită, atunci orice atacator poate verifica valorile. Numim asta oracolul de criptare și este gratuit pe sistemele cu cheie publică
Un simplu Oracol de criptare RSA joc...
def Ind_CPA_RSA(adversar, țintă):
(e,n,d,...) = generate_RSA_key() //keygen part
def RSA_encryption_oracle_PKCS#1_v1.5(text simplu): //Oracul de criptare
EM = PKCS#1_v1.5_padding(text simplu)
ciphertext = EM^e mod n
returnează text cifrat
pentru fiecare m din posibil_spațiu_mesaj: //interogări
c = RSA_encryption_oracle_PKCS#1_v1.5(m)
dacă c == țintă
print(tinta)
întoarce succesul
eșecul de întoarcere
Așadar, adversarul încearcă toate mesajele posibile cât de mult poate, pentru a vedea egalitatea pentru a câștiga.
În manual RSA dacă exponent public $e=3$ atunci atacul rădăcinilor cubice funcționează pentru toate mesajele astfel încât $len(m) < \sqrt[3]{n}$.
Pentru toate celelalte atacuri, articolul lui Dan Boneh este un bun punct de plecare;
$$\textbf{Nu utilizați niciodată Text Book RSA atâta timp cât știți ce faceți!}$$
Pentru a fi sigur, trebuie să utilizați criptarea RSA cu umplutură adecvată PKCS#1 v1.5 (RSAES-PKCS1-v1_5) sau OAEP (RSAES-OAEP) căptușeală. Aceste umpluturi adaugă randomizare pentru a realiza criptarea probabilistică.
Fiecare folosește codificări speciale pentru a realiza acest lucru, cum ar fi umplutura PKCS#1 v1.5;
EM = 0x00 || 0x02 || PS || 0x00 || M.
M
este mesajul. The PS
constau din partea de randomizare
Generați un șir de octet PS cu lungimea k - mLen - 3
constând din octeți non-zero generați pseudoaleatoriu.
Lungimea PS va fi de cel puțin opt octeți.
De exemplu pentru RSA pe 2048 de biți; $k = 256$, $mLen=4$ atunci PS
lungimea este de 249 de octeți de aleatorie pentru un mesaj de dimensiunea unei litere. Prin urmare, atacatorul nu poate testa valorile cu oracolul de criptare. Restul ataca problema RSA.
În mod similar, OAEP are caracter aleatoriu și OAEP s-a dovedit că are securitate IND-CCA1. Preferați OAEP față de PKCS#1 v1.5, deoarece are multe atacuri din cauza implementărilor necorespunzătoare.
Dacă cineva dorește un articol academic despre valorile criptării RSA, aici este articolul paywall;