INDIETRO | Altri enunciati importanti del Primo Capitolo: Teorema Cinese del Resto | VISUALIZZA TUTTO

RSA (sezione 1.9.1):

algoritmo

RSA è un algoritmo di crittografia che risolve il problema dello scambio delle chiavi.
Alice deve mandare un messaggio crittato a Bob.
Alice cerca la chiave pubblica (N,e) di Bob, calcola delim{[}{M^{e}}{]}_Ndove M è una codifica numerica del messaggio con 0 <= M<N (nel caso in cui M >= N si spezza il messaggio in più parti) e lo invia a Bob.
Il calcolo è facile grazie all'algoritmo dei quadrati ripetuti.
Alice non ha modo di capire come Bob riuscirà a leggerlo, nemmeno avendo il messaggio.
A questo punto Bob riceve il messaggio crittato e utilizza la sua chiave segreta d per decrittare il messaggio calcolando delim{[}{(delim{[}{M^{e}}{]}_N)^d}{]}_N=M

funzionamento

Il numero e viene preso in modo che sia relativamente primo con il valore della funzione di eulero in N cioè gcd(e, varphi (N))=1.
Ma essendo N prodotto di due primi p, q allora varphi (N)=varphi(pq)=varphi(p)varphi(q)=(p-1)(q-1), quindi, una volta calcolata facilmente varphi(N) è altrettanto facile trovare un e che soddisfi la condizione di essere relativamente primo con varphi(N).
Esistono dunque lambda, mu tali che lambda e +mu varphi(N)=1 e posso supporre che 0< lambda < varphi(N) perchè se così non fosse potrei sempre sommare(sottrarre) a lambda un opportuno multiplo di varphi(N) in modo da ricadere nell'intervallo:
(lambda+k varphi(N))e+(mu-ke)varphi(N).
lambda non può essere zero altrimenti avrei mu(p-1)(q-1)=1 impossibile negli interi con p,q distinti
lambda non può nemmeno essere varphi(N) altrimenti avrei chelambda divide lambda e e anche mu varphi(N) in lambda e +mu varphi(N)=1 e per il "non c'è due senza tre" dovrebbe dividere anche 1 cosa impossibile visto che lambda=varphi(N)=(p-1)(q-1) con p,q distinti.
Prendendo lambda>0 e e>1 necessariamente mu<0 e quindi si può scrivere lambda e =1+(- mu)varphi(N), dove lambda è il d segreto.
Infatti per decrittare il messaggio inviato ad Alice, Bob deve calcolare:
delim{[}{(delim{[}{M^{e}}{]}_N)^d}{]}_N = delim{[}{M^{ed}}{]}_N=delim{[}{M^{1+(- mu)varphi(N)}}{]}_N=delim{[}{M^{1+(- mu)(p-1)(q-1)}}{]}_N = delim{[}{M}{]}_N=M perchè M<N

sicurezza

Per rendere la trasmissione sicura e deve essere abbastanza grande in modo che M^e > N, ma non troppo per non appesantire la trasmissione. I numeri primi devono avere almeno 100 cifre decimali in modo che sia molto difficile fattorizzare N. Avendo N,e non posso calcolare d perchè dovrei conoscere varphi(N) che è tanto difficile quanto calcolare la fattorizzazione di N che ad oggi è un problema non trattabile. N deve essere diverso per persone diverse quindi si ha necessità di avere molti numeri primi grandi.
Gli algoritmi deterministici per il test di primalità sono molto lenti quindi vengono usati dei test probabilistici che producono i numeri primi industriali, cioè dei numeri che hanno una bassissima probabilità di non essere primi.


pseudoprimi

Un numero N è pseudoprimo relativamente alla base a se supera il test del piccolo teorema di Fermat:
a^{N-1}= 1 (mod N)
con gcd(a,N)=1 e 0<a<N.
Purtroppo ci sono infiniti numeri (numeri di Karl Mycol) che sono pseudoprimi relativamente ad ogni base che è per loro relativamente prima, quindi il test viene superato un sacco di volte, facendo credere che sia un numero primo ed invece è composto.


pseudoprimi forti

Per evitare il problema dei numeri di Karl Mycol sfrutto la proprietà che se p è primo e sia x tale che gcd(p,m)=1 allora x^2= 1 (mod p) se e solo se x= pm 1 (mod p)
Un numero N è pseudoprimo forte relativamente ad una base a se :
  1. N è composto
  2. N è pseudoprimo relativamente ad a
  3. N-1=2^i q exists 0<=i<=m-1 tale che a^{2^i q}= -1 (mod N) oppure a^q= 1 (mod N)

Il test è affidabile perchè grazie al Teorema di Rabin sappiamo che i numeri pseudoprimi forti sono "pochi".
La probabilità che prendendo una base a caso l'algoritmo si fermi senza rivelare che il numero era composto è minore uguale di (N-2)/4 1/(N-2)=1/4 e prendendo un grande numero di basi le probabilità si moltiplicano rendendo affidabile il test di primalità e producendo così numeri primi industriali.