Non con RSA "libro di testo", dove codifichi il tuo messaggio come un numero elevato e calcoli direttamente il testo cif c dal testo del messaggio m e la chiave pubblica (e, n) con c = m^e mod n
e decifrati usando la chiave segreta (d , n) come m = c^d mod n
.
Ma con RSA reale, sicuramente sì, quando viene introdotta la casualità.
Uno schema comune (standard ISO RSA - che è una crittografia ibrida) consiste nel creare prima un numero casuale lungo (ad esempio, se si utilizza RSA a 2048 bit che è n è 2048 bit, scegliere un numero casuale (fino a 2048- bit lunghi), che diventerà il tuo messaggio RSA m rsa . Questo messaggio RSA viene quindi crittografato asimmetricamente. Quindi si crea un hash crittografico (ad esempio, SHA-256) di questo valore casuale per creare un bit symmetric key. Il tuo messaggio reale verrà quindi crittografato con la chiave simmetrica (usando ad esempio AES-256-CBC) e questi due ciphertexts verranno aggiunti insieme.
Concesso in pratica lo schema di crittografia è leggermente più complicato; ad esempio, un protocollo come OAEP viene utilizzato per fornire anche l'autenticazione dei messaggi per prevenire attacchi di testo cifrato più sofisticati e adattivi contro un oracolo decrittante ( che i server HTTPS forniscono). Infatti, come indicato da CodesInChaos, l'utilizzo di un buon schema di riempimento (come OAEP) direttamente per un breve messaggio consente di applicare RSA direttamente al messaggio breve inserito.
Oltre a Ottimizzazione della crittografia asimmetrica ottimale (OAEP)
OAEP funziona come mostrato nello schema seguente. Per concretezza, assumiamo RSA a 2048 bit (che significa n = 2048 bit) e sia H la funzione hash SHA-256 e G be a funzione di generazione maschera basata su una funzione hash (che essenzialmente crea un hash della lunghezza desiderata di bit N-k0 a partire da SHA-256). La scelta della funzione di hash significa che la lunghezza di r (e Y) è k0 = 256 bit. Nota anche il rosso ⊕ (cerchi con più) significa XOR .
Quindi abbiamo un breve messaggio m (di lunghezza n-k0-k1 che è più corto di n-k0 = 2048-256 = 1792 bit) che vogliamo codificare direttamente in RSA. Creiamo una versione imbottita m pad per essere esattamente n-k0 bit (il pad sarà lungo k1 bit e inizierà con un 1 seguito da tutti gli zeri). Creiamo un numero random k0 = 256 bit e lo chiamiamo r. Calcoliamo G (r) e XOR questo valore con il messaggio riempito e questo diventa X. Quindi prendi X e calcoli H (X) e XOR questo con r per fornire Y. Poi con il tuo messaggio OAEP riempito (la concatenazione di X e Y), puoi applicare direttamente la crittografia RSA ad esso.
O per riassumere X = m pad ⊕ G (r) e Y = H (X) ⊕ r, con il messaggio OAEP che entra in RSA come concatenazione (X, Y). Per la decrittografia, prima il messaggio RSA viene decrittografato per il recupero (X, Y). Il decryptor calcola H (X) e lo xors con Y, per trovare r, che è r = Y ⊕ H (X). Quindi il decryptor calcola G (r) e lo aggiorna con X per recuperare il messaggio originale (e il pad può essere troncato lasciando cadere tutto a partire dall'ultimo 1 seguito da tutti gli zeri).