# 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)$ * $e$ e $\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)$ (mentre $p$, $q$ e $\phi(n)$ devono essere distrutti o nascosti!). --- ## Cifratura e Decifratura Supponiamo che Bob voglia inviare un messaggio segreto ad Alice. ### Cifratura (Bob) 1. Bob prende la chiave pubblica di Alice: $(e, n)$. 3. Calcola il messaggio cifrato $C$ usando la formula di cifratura: $$C \equiv M^e \pmod n$$ 4. Bob invia il messaggio cifrato $C$ ad Alice. ### Decifratura (Alice) 1. Alice riceve $C$. 2. Usa la sua chiave privata $(d, n)$ per ripristinare il messaggio originale $M$ tramite 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 1. **Scelta:** Scegliamo $p = 3$ e $q = 11$. 2. **Modulo:** $n = 3 \times 11 = 33$. 3. **Toziente:** $\phi(n) = (3 - 1) \times (11 - 1) = 2 \times 10 = 20$. 4. **Esponente Pubblico:** Scegliamo $e = 3$ (notiamo che $3$ e $20$ non hanno fattori in comune, quindi sono coprimi). * *Chiave Pubblica: $(e=3, n=33)$* 5. **Esponente Privato:** Cerchiamo un numero $d$ tale che $d \times 3 \equiv 1 \pmod{20}$. Il numero è $d = 7$, infatti $7 \times 3 = 21$, e $21 \div 20$ dà resto $1$. * *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$! ---