• Non ci sono risultati.

Matematica Discreta II Lezione del giorno 29 ottobre 2007

N/A
N/A
Protected

Academic year: 2021

Condividi "Matematica Discreta II Lezione del giorno 29 ottobre 2007"

Copied!
1
0
0

Testo completo

(1)

Matematica Discreta II

Lezione del giorno 29 ottobre 2007

Nel sistema crittografico RSA è “computazionalmente difficile” per un intruso ricavare dalla chiave di cifratura c (resa pubblica) quella di decifratura d. Infatti si può notare che per calcolare la chiave di decifratura d è necessario conoscere il valore della funzione di Eulero (n)=(p-1)(q-1), e sappiamo (da osservazioni precedenti) che ciò è equivalente a conoscere i fattori primi p,q di n: il problema è quindi equivalente a quello di fattorizzare in numeri primi il numero n, e per un generico valore n non è a tutt’oggi noto un algoritmo di fattorizzazione di complessità polinomiale.

Ciò non toglie che per particolari valori di n, alcuni algoritmi di fattorizzazione riescano in modo efficiente a calcolare i fattori primi p,q di n, e quindi a rompere il sistema RSA, per cui anche la scelta di p,q deve essere fatta con cura, per assicurare la massima sicurezza del sistema.

Possiamo ricordare il cosiddetto “RSA-129 challenge”: una sfida lanciata nel 1977 dagli inventori del sistema RSA, relativa alla fattorizzazione del numero RSA-129, di 129 cifre in base 10; tale numero (prodotto di 2 primi p,q di 64 e 65 cifre):

(1143816257578888676692357799761466120102182967212423625625618429357069352457338 978 30597123563958705058989075147599290026879543541) =

(3490529510847650949147849619903898133417764638493387843990820577) * (32769132993266709549961988190834461413177642967992942539798288533)

era alla base di un sistema RSA con cui era cifrato il messaggio testuale “the magic words are squeamish ossifrage” (letteralmente “le parole magiche sono schizzinoso avvoltoio”).

L’esponente c per la cifratura (reso pubblico insieme al valore di n) era c=9007.

Le previsioni, basate sulla efficienza degli algoritmi di fattorizzazione dell’epoca, erano che fossero necessari “milioni di anni” per calcolare i fattori primi p,q, la chiave di decifratura d, e decifrare quindi il messaggio.

Ma lo sviluppo di nuovi algoritmi (in particolare del cosiddetto “crivello quadratico” di Pomerance) e il lavoro in parallelo di più di 1000 computers messi a disposizione da utenti Internet, permise, dopo 8 mesi di lavoro, di calcolare nel 1994 la chiave di decifratura:

d=106698614368578024442868771328920154780709906633937862801226224 496631063125911774470873340168597462306553968544513277109053606095 e decifrare il messaggio.

Esempio.

Supponiamo di scegliere come base di un sistema RSA i numeri primi p=13, q=17 e il loro prodotto n=221, con (221)=(p-1)(q-1)=192 (ovviamente i valori scelti in questo esempio sono troppo piccoli per costruire un sistema crittografico sicuro). La spazio dei messaggi in chiaro (e di quelli cifrati) è Z221 = {0,1,2,…..,220}.

Fissiamo come chiave di cifratura c=5 (numero coprimo con (221)=192) e calcoliamo il suo inverso modulo 192 con l’algoritmo Euclideo, ottenendo la chiave di decifratura d=77.

Se il messaggio in chiaro è x=2, il messaggio cifrato sarà y=25mod221=32; la decifratura di y ricalcolerà il messaggio in chiaro: y77mod221=3277mod221=2=x.

Notiamo che nel calcolo della riduzione di potenze modulo n (funzione di cifratura e di decifratura) possono essere coinvolti numeri molto grandi (nell’esempio precedente 3277 ha più di 100 cifre in

(2)

base 10), e la complessità di calcolo può essere alta. Questo problema si risolve con un algoritmo efficiente detto della esponenziazione modulare.

Esponenziazione modulare.

E’ un algoritmo mediante il quale, fissati 3 numeri naturali x,k,n, con n>1, si calcola la riduzione modulo n della potenza xk: xkmodn

con una complessità polinomiale, relativamente all’esponente k.

Sia t il numero di cifre binarie dell’esponente k; quindi la rappresentazione di k in base 2 sia:

k=at-12t-1+ at-22t-2+….+a12+a0 (con 0ai1)

Costruiamo una successione y0,y1,...,yt di numeri interi ponendo:

y0=1; per ogni i>0 yi=

(y

i12

x

ati

)

modn

Ogni elemento della successione yi con i>0 si calcola dal precedente con due prodotti (il quadrato di yi-1 e il prodotto del risultato per xati , quest’ultimo uguale ad x oppure ad 1) ed una divisione (per calcolare la riduzione modulo n), ossia si eseguono in totale non più di 3t operazioni, e dunque complessivamente l’algoritmo ha complessità polinomiale rispetto all’esponente k.

Dimostriamo che l’algoritmo fornisce il valore della riduzione xkmodn, e precisamente che si ottiene yt= xkmodn.

Non è infatti difficile dimostrare per induzione che per ogni i>0 si ha:

yi(a 2 a 2-i2 . ati-12 ati-) 2

1 -t 1 -i

x -t (mod n) In particolare, per i=t, si ottiene la congruenza:

yt  x(at-12t-1at-22t-2.a12a0)= xk (mod n)

Ma per costruzione ogni yi si calcola con una riduzione modulo n, quindi 0ytn-1, e allora, per definizione di riduzione modulo n, la precedente congruenza implica che yt = xkmodn.

Notiamo che nell’algoritmo anche la grandezza dei numeri coinvolti nei calcoli è limitata, rispetto al modulo n: ad ogni passo si moltiplicano fattori <n e si riduce il risultato modulo n.

Esempio.

Siano n=341, a=2, e calcoliamo con l’esponenziazione modulare la riduzione 2340mod341.

La rappresentazione binaria dell’esponente 340 è:

340 = 128+027+126+025+124+023+122+021+0 = (101010100)2

Seguendo i passi dell’algoritmo, costruiamo la successione y0,y1,y2,y3,y4,y5,y6,y7,y8,y9 con y0=1 e per i>0 yi=

(y

i12

2

a9i

)

mod341 , dove at-i è la cifra binaria coefficiente di 2t-i in 340.

Si ottiene :

y1=(122a8)mod341=2 ; y2=(122a7)mod341=4 ; y3=(422a6)mod341=32 ; y4=(3222a5) mod341=1 ;

y5=(122a4)mod341=2 ; y6=(222a3)mod341=4 ; y7=(422a2)mod341=32 ; y8=(3222a1) mod341=1 ;

y9=(122a0)mod341=1=2340mod341.

Possiamo allora concludere che 2340mod341=1 .

Riferimenti

Documenti correlati

Costruiamo un nuovo grafo ottenuto dal precedente aggiungendo un arco che colleghi i vertici v,w: otteniamo un grafo in cui esiste un cammino ciclico Euleriano, e possiamo applicare

Notiamo che in tale caso molte proprietà di (A, ) si trasmettono all’insieme (A/R, ), come si verifica facilmente: se in (A, ) vale la proprietà associativa o la

Infatti, preso un generico intero yB, la ricerca di un valore intero xA tale che si abbia f(x)=y porta all’equazione x-8=y, che ha la soluzione x=y+8 (soluzione il cui valore é in

Poiché nelle combinazioni l’ordine degli elementi non conta, possiamo ripartire le disposizioni di D n,m in sottoinsiemi, ponendo in ciascun sottoinsieme le disposizioni

Dato il monoide Z m ={[0], [1], …., [m-1]} delle classi di congruenza modulo m rispetto al prodotto di classi, sappiamo che gli elementi simmetrizzabili formano un gruppo Z m *

Formalmente, per costruire la funzione inversa di una funzione biunivoca, si deve seguire il procedimento usato per dimostrarne la surgettività; in

Prima osserviamo che se A=(a ij ), B=(b ij ) sono quadrati latini ortogonali (con elementi 1,2,….,n) e se f : {1,2….,n}  {1,2,…..,n} è una funzione biunivoca (una

La composizione di 2 funzioni iniettive è una funzione iniettiva.. La composizione di 2 funzioni surgettive è una