- https://people.csail.mit.edu/rivest/
- https://www.ae-info.org/ae/Member/Shamir_Adi
- https://adleman.usc.edu/
Funzionamento
L’algoritmo RSA genera in modo casuale un numero primo molto elevato (la chiave pubblica), poi utilizzando quest’ultima utilizzando funzioni matematiche complesse ricava un altro numero primo molto elevato che è la chiave privata. Queste chiavi sono impiegati dagli utenti per crittografare i documenti. Rivest, Shamir e Adleman hanno definito delle proprietà di base dell’algoritmo RSA .
- La decifrazione del messaggio crittografato ricrea il messaggio originale, ciò si può esprimere con l’equazione D(C(M))=M, dove D è l’azione di decrittografia, C quella di crittografia ed M il contenuto del messaggio.
- C e D sono relativamente facili da calcolare
- La disponibilità di C non offre alcun modo agevole per calcolare D. Pertanto solo chi è in possesso del valore di D può de crittografare un messaggio crittografato con C.
- Cifrando un messaggio M e poi decifrandolo si ottiene M cioè vale C(D(M))=M
I matematici che hanno realizzato tale algoritmo affermano che: se chi trasmette i dati ha utilizzato una procedura che soddisfa la proprietà 3, tutti gli altri che cercheranno di decifrare il messaggio dovranno provare tutte le possibili chiavi fino a trovare la chiave che soddisfa la C (M)= M .
Conseguenze
Questo calcolo è relativamente semplice, per un matematico, quando i numeri utilizzati per la crittografia sono costituiti da numeri con 10 0 20 cifre. Però gli schemi di crittografia RSA utilizzano numeri a 512 bit sia per C (chiave pubblica) sia per D(chiave privata). Cioè numeri che in rappresentazione decimale occupano 154 cifre. Entrambi i numeri sono numeri primi molto estesi. Per elaborare questi numeri è richiesto un tempo di calcolo molto elevato, infatti nessuno è in grado di violare una chiave a 512 bit utilizzando l’attacco “forza bruta”, per quanto non si possa mai dire. Questa funzione che soddisfa le proprietà precedenti si chiama a “porta segreta monodirezionale”, perché è facile calcolare la funzione in una direzione, ma non altrettanto nella direzione opposta.