@@ -0,0 +1,101 @@
|
||||
# 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$!
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user