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

4.8 KiB
Raw Blame History

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).
  2. Calcola il messaggio cifrato C usando la formula di cifratura: C \equiv M^e \pmod n
  3. 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!