Files
cryptoseals/backend/src/main/resources/get/documentazione/RSA.md
T
elisabetta 716a081f7a
Deploy / trigger (push) Successful in 39s
Modifiche articoli e css
2026-05-26 11:28:26 +02:00

101 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 alletà delluniverso. Infatti non si conoscono a tuttoggi (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$!
---