După cum se indică în comentariile de mai jos, RSA nu este utilizat în mod obișnuit ca exponențiere modulară a unei chei simetrice. În schimb, fie cheia este criptată folosind umplutura PKCS#1 v1.5 sau - de preferință - OAEP, fie un secret partajat cu o valoare randomizată în interval $\mare[0, N\mare)$ este utilizat pentru exponentiația modulară. În acest din urmă caz, o cheie reală este derivată folosind o KDF (funcție de derivare a cheii), uneori numită și simplu „PRF” (a se vedea, de exemplu, TLS 1.2). Acesta este cunoscut sub numele de RSA-KEM.
Există, practic, două moduri prin care manipularea cheii printr-un atac de tip man-in-the-middle (MitM) poate fi evitată:
- stabilirea încrederii în cheia publică RSA;
- verificarea secretelor partajate și/sau a cheilor derivate.
Dacă partajați în prealabil și aveți încredere într-o cheie publică a unei perechi de chei statice, atunci ați avea un schimb de chei statice, adică cheia publică este de încredere, dar nu veți oferi securitate directă. Aceasta înseamnă că fiecare cheie simetrică ulterioară poate fi calculată dacă cheia privată este cunoscută de adversar.
Încrederea cheii publice poate fi stabilită în diferite moduri. Pentru o pereche de chei statice, cheia publică poate fi de încredere folosind PKI. Dacă trebuie să aveți încredere într-o cheie publică efemeră, destinatarul o poate semna cu o cheie privată care face parte dintr-o pereche de chei care este de încredere.
O altă modalitate este să verificați ulterior cheia de sesiune stabilită. Acest lucru se poate face fie explicit, fie implicit.
În verificarea explicită a secretului partajat, partea care a decriptat cheia o folosește pentru a genera un MAC peste date statice cunoscute de ambele părți și trimite MAC. Acea parte poate fi acum sigură că a fost stabilită cheia simetrică corectă.
În verificarea implicită, cheia este pur și simplu folosită pentru a trimite mesaje autentificate înainte și înapoi. Verificarea autentificării acestor pachete indică faptul că a fost stabilită cheia potrivită.
Desigur, este autentificată doar partea căreia se are încredere în cheia publică. În mod similar, dacă orice MAC este verificat, atunci asta arată doar că partea care deține cheia privată a putut decripta. Deci, dacă aveți nevoie de autentificarea părții rămase, atunci aceasta trebuie tratată separat.
În TLS, acest lucru se realizează pur și simplu prin faptul că cealaltă parte creează o semnătură care poate fi verificată. Acest lucru necesită, de asemenea, ca cheia publică a acelei perechi de chei să fie de încredere în prealabil; în cele din urmă trebuie să stabilești întotdeauna încredere în ceva înainte de a putea autentifica petrecerea.
Autentificarea clientului TLS este aproape niciodată utilizată. În schimb, este înlocuit de cadre de autentificare sau de autentificare bazată pe parolă. Sau identitatea clientului nu este deloc stabilită - până oricum nu se face o achiziție.
Rețineți că autentificarea cheilor stabilite folosind stabilirea cheilor RSA nu este diferită de stabilirea cheilor cu, de exemplu, Diffie-Hellman - deși cu acesta din urmă există două perechi de chei de luat în considerare. În cele din urmă, același tip de tehnici pot fi folosite.