Nessuno usa RSA per crittografare direttamente i dati trasmessi tramite http (web) o SMTP (e-mail). RSA a 2048 bit ti consente solo di crittografare 245 byte alla volta e ciascuna di queste operazioni è costosa.
I protocolli consentono a una delle parti o a entrambe le parti di generare un nuovo numero casuale sufficientemente lungo da risultare non gestibile e unico. 128 bit sono sufficienti, sebbene TLS ne usi di più. Quindi utilizzano questo numero come chiave di crittografia simmetrica (tecnicamente, seed per KDF), che consente loro di crittografare rapidamente molti dati.
Se CSPRNG è backdoor-ed, l'avversario può prevedere la chiave segreta condivisa. Se la chiave condivisa non è segreta, interrompi completamente la sicurezza.
Se una delle parti ha generato la chiave segreta condivisa, deve trasmetterla all'altra parte, in modo che sia immune alle intercettazioni. Un modo semplice è quello di crittografare la chiave segreta condivisa utilizzando la chiave pubblica del destinatario. PGP fa questo, e SSL / TLS precedente ha fatto questo.
Un problema con la trasmissione della chiave segreta casuale condivisa crittografata con la chiave pubblica del destinatario è che se si mette le mani sulla chiave privata del destinatario, magari anni dopo quando non usano più questa coppia di chiavi, è possibile decrittografare i testi cifrati precedentemente registrati. Pertanto, un disco rigido rottamato con la chiave privata per un certificato server TLS scaduto da molto tempo consentirebbe ad es. l'NSA per decrittografare anni di vecchio traffico.
I nuovi protocolli richiedono l'uso di uno schema migliore: Diffie Hellman per stabilire un segreto condiviso anonimo e firme digitali per dimostrare che l'altra parte è chi dicono di essere.
Nei moderni protocolli, RSA viene utilizzato solo per la firma e la verifica delle firme.
Nota: potresti aver letto una spiegazione delle firme RSA come una sorta di crittografia. È una pessima spiegazione, non usarla .
Nota che il manuale RSA non è sicuro e non deve essere utilizzato. È necessario utilizzare schemi di riempimento sicuri per la crittografia RSA e per le firme RSA. Gli schemi di imbottitura per i due casi d'uso hanno obiettivi diversi e sono diversi. Mescolarli non è sicuro.
Nota che il vecchio TLS ha utilizzato pkcs # 1v1.5, ora è considerato non sicuro, usa invece RSASSA-PSS.
Come hai notato l'implementazione sicura di RSA è difficile, la raccomandazione moderna è quella di usare migliori primitive crittografiche, come quelle in libsodium (o meglio ancora, libsodium stesso).