4.8 KiB
L'Algoritmo RSA
L'algoritmo RSA è Il primo algoritmo che soddisfa i requisiti della chiave pubblica è stato messo a punto solo nel 1977 da Ron Rivest, Adli Shamir e Leonard Adlemann, ed è noto, dalle iniziali degli autori, come algoritmo RSA. Ancora oggi è uno dei più utilizzati in tutto il mondo
La Base dell'Algoritmo: La Fattorizzazione di Interi
La sicurezza di RSA poggia su un concetto matematico noto come funzione unidirezionale a botola (trapdoor function). Si tratta di un'operazione estremamente facile da eseguire in un senso, ma quasi impossibile da invertire, a meno che non si possieda un'informazione aggiuntiva (la "botola").
-
La funzione di complessità “polinomiale” è la moltiplicazione di due numeri primi p e q molto grandi; Poichè noti p e q, il prodotto n = pq si calcola immediatamente.
-
La funzione inversa, di complessità "esponenziale", è la fattorizzazione; Se un numero n è il prodotto di due numeri primi “grandi”, la sua fattorizzazione richiede di norma tempi superiori all’età dell’universo. Infatti non si conoscono a tutt’oggi (e c’è ragione di ritenere che non si conosceranno mai), algoritmi efficienti di fattorizzazione.
Esempio pratico
Dati due numeri primi:
p = 61 \quad \text{e} \quad q = 53
Calcolare il loro prodotto n è un gioco da ragazzi:
n = p \times q = 61 \times 53 = 3233
Ma se ti dessi direttamente n = 3233 e ti chiedessi di trovare i due fattori primi originali p e q, ci vorrebbe molto più tempo.
Nella realtà, RSA utilizza numeri primi lunghi migliaia di cifre: un supercomputer impiegherebbe miliardi di anni per trovare i fattori primi partendo da n.
Generazione delle Chiavi
Vediamo come un utente (per convenzione Alice) genera la sua coppia di chiavi.
1 - Scelta dei numeri primi p e q
Vengono scelti due numeri primi casuali, crittograficamente sicuri e particolarmente grandi, p e q.
2 - Calcolo del modulo n
Viene calcolato il loro prodotto:
n = p \times q
Il numero n sarà la lunghezza del nostro "orologio" nell'aritmetica modulare e farà parte della chiave pubblica.
3 - Calcolo della funzione Toziente di Eulero phi
Si calcola la funzione \phi(n) (phi di Eulero), che indica quanti numeri interi minori di n sono coprimi con n:
\phi(n) = (p - 1) \times (q - 1)
4 - Scelta dell'esponente pubblico e
Viene scelto un intero e (esponente di cifratura) tale che:
1 < e < \phi(n)ee\phi(n)siano coprimi (cioè il loro Massimo Comune Divisore sia 1).
Nota: Nella pratica comune si usa spesso il numero e = 65537 perché rende i calcoli veloci.
5 - Calcolo dell'esponente privato d
Alice calcola l'esponente di decifratura d (la chiave privata). Questo numero è l'inverso moltiplicativo di e modulo \phi(n). Significa che deve soddisfare la seguente formula:
d \times e \equiv 1 \pmod{\phi(n)}
6 - Il Mazzo di Chiavi
A questo punto è stato generato un mazzo di chiavi composto da due coppie di numeri:
- Chiave Pubblica: Coppia
(e, n) - Chiave Privata: Coppia
(d, n)(mentrep,qe\phi(n)devono essere distrutti o nascosti!).
Cifratura e Decifratura
Supponiamo che Bob voglia inviare un messaggio segreto ad Alice.
Cifratura (Bob)
- Bob prende la chiave pubblica di Alice:
(e, n). - Calcola il messaggio cifrato
Cusando la formula di cifratura:C \equiv M^e \pmod n - Bob invia il messaggio cifrato
Cad Alice.
Decifratura (Alice)
- Alice riceve
C. - Usa la sua chiave privata
(d, n)per ripristinare il messaggio originaleMtramite la formula di decifratura:M \equiv C^d \pmod n
Grazie ai teoremi di Eulero e Fermat, l'aritmetica modulare garantisce che l'operazione (M^e)^d \pmod n restituisca esattamente M. Un eventuale spia che intercettasse C, e ed n non potrebbe calcolare M perché non conosce d, e calcolare d richiederebbe la fattorizzazione di n in p e q.
Esempio Pratico con Valori Ridotti
- Scelta: Scegliamo
p = 3eq = 11. - Modulo:
n = 3 \times 11 = 33. - Toziente:
\phi(n) = (3 - 1) \times (11 - 1) = 2 \times 10 = 20. - Esponente Pubblico: Scegliamo
e = 3(notiamo che3e20non hanno fattori in comune, quindi sono coprimi).- Chiave Pubblica: $(e=3, n=33)$
- Esponente Privato: Cerchiamo un numero
dtale ched \times 3 \equiv 1 \pmod{20}. Il numero èd = 7, infatti7 \times 3 = 21, e21 \div 20dà resto1.- Chiave Privata: $(d=7, n=33)$
Il messaggio da cifrare è M = 9:
C \equiv 9^3 \pmod{33} = 729 \pmod{33}
Se dividiamo 729 per 33, otteniamo 22 con il resto di 3. Quindi C = 3.
Il messaggio da decifrare è C = 3:
M \equiv 3^7 \pmod{33} = 2187 \pmod{33}
Se dividiamo 2187 per 33, otteniamo 66 con il resto di 9. Abbiamo recuperato il messaggio originale M = 9!