RSA Monica Bianchini [email protected] Dipartimento di Ingegneria dell’Informazione Università di Siena Introduzione 1 • Nella crittografia classica, Alice e Bob scelgono segretamente una chiave k, che viene utilizzata per costruire una funzione di codifica ek ed una funzione di decodifica dk (uguale a ek o direttamente derivabile da essa): crittosistemi di questo tipo sono detti a chiave privata, dato che la conoscenza di ek li rende vulnerabili • Lo svantaggio principale dei metodi a chiave privata è che richiedono la comunicazione della chiave fra Alice e Bob, su un canale sicuro, prima della trasmissione di qualsiasi messaggio cifrato… potrebbe essere molto difficile da realizzare! • Per esempio, se Alice e Bob vivono lontani e decidono di comunicare via e-mail, non avranno accesso a nessun canale ragionevolmente sicuro per lo scambio della chiave Introduzione 2 • • • • I crittosistemi a chiave pubblica rendono il calcolo di dk, a partire da ek, computazionalmente irrealizzabile ek può essere resa pubblica Alice potrà inviare il messaggio cifrato a Bob utilizzando ek, ma solo Bob sarà in grado di decifrarlo, poiché sarà l’unico a conoscere dk L’idea dei crittosistemi a chiave pubblica è dovuta a Diffie e Hellman (1976), mentre la prima realizzazione pratica si ha l’anno successivo, ad opera di Rivest, Shamir e Adleman, che formularono RSA Da allora, sono stati formalizzati molti e diversi crittosistemi a chiave pubblica, la cui sicurezza è affidata alla difficoltà di risoluzione di problemi matematici distinti Introduzione 3 • • • • • RSA: la sicurezza è basata sulla difficoltà di fattorizzazione di interi “grandi” Merkle-Hellman Knapsack: la sicurezza del sistema, e di altri correlati, è basata sulla NP-completezza del problema della somma di sottoinsiemi; tutti i sistemi di questo tipo si sono, tuttavia, rivelati insicuri, tranne il crittosistema di Chor-Rivest McEliece: è basato sulla teoria algebrica dei codici, ed è a tutt’oggi ritenuto sicuro; la sicurezza è basata sulla difficoltà del problema di decodificare un codice lineare (che è NP completo) ElGamal: la sicurezza è basata sulla difficoltà del calcolo del logaritmo discreto in campi finiti Curve ellittiche: sono crittosistemi che traggono origine da sistemi tipo ElGamal, ma operano sulle curve ellittiche piuttosto che sui campi finiti. Sono i sistemi più sicuri, anche per chiavi piccole Introduzione 4 Una osservazione molto importante è che i sistemi a chiave pubblica non possono garantire la sicurezza incondizionata, poiché una spia, essendo venuta in possesso di un testo cifrato y, può codificare ogni possibile testo in chiaro x, utilizzando ek che è pubblica, fino a trovare l’unico x tale che y=ek(x) Per i sistemi a chiave pubblica, è sensato studiare la sicurezza computazionale • A questo scopo, può essere concettualmente utile pensare ad un sistema a chiave pubblica, in termini astratti, come ad una funzione unidirezionale • La funzione pubblica di codifica, ek, deve essere semplice da calcolare, ma difficile da invertire, per tutti tranne che per Bob: una funzione siffatta è una funzione one-way (unidirezionale) ek deve essere una funzione iniettiva one-way • Introduzione 5 • • • • • Le funzioni unidirezionali giocano un ruolo fondamentale nella crittografia, sia per la costruzione di crittosistemi a chiave pubblica, sia in altri contesti Sfortunatamente, anche se vi sono varie classi di funzioni che sono ritenute unidirezionali, non esiste per nessuna di esse una prova certa Sia n il prodotto di due numeri primi “grandi”, p e q, e sia b un intero positivo. : ZnZn definita da (x) = xb (mod n) è ritenuta essere una funzione unidirezionale (e, di fatto, è la funzione di codifica in RSA) Tuttavia, l’essere one-way non è una proprietà sufficiente per , poiché Bob deve essere in grado di decifrare i messaggi in maniera efficiente Bob deve possedere una trapdoor una sorta di canale preferenziale che gli permetta di accedere rapidamente all’informazione codificata, cioè Bob può decifrare facilmente il testo codificato perché possiede informazione aggiuntiva su k ek deve essere iniettiva, trapdoor, one-way Ancora sulla Teoria dei Numeri 1 • Ricordiamo che Zn è un anello, per ogni intero positivo n. Inoltre, ogni b Zn tale che MCD(b,n)=1 ammette un inverso in Zn, con (n) numero degli interi positivi minori di n e primi con n • Sia Zn* l’insieme dei residui modulo n che sono primi con n. Zn* è un gruppo abeliano rispetto alla moltiplicazione • L’operazione di moltiplicazione modulo n è associativa e commutativa, e 1 è l’elemento neutro • Ogni elemento in Zn* ammette inverso • Zn* è chiuso rispetto all’operazione di moltiplicazione, poiché se x e y sono primi con n, tale è anche il loro prodotto xy Sappiamo che, b Zn* esiste b-1, ma non conosciamo un algoritmo efficiente per calcolarlo: tale algoritmo è noto come algoritmo di Euclide esteso L’algoritmo di Euclide 1 • Descriviamo l’algoritmo di Euclide, nella formulazione di base, utilizzata per calcolare il più grande divisore comune di due interi positivi, r0 e r1, con r0> r1 • L’algoritmo di Euclide seguenti divisioni consiste nell’esecuzione r0=q1r1+ r2 0<r2<r1 r1=q2r2+ r3 0<r3<r2 rm-2=qm-1rm-1+ rm 0<rm<rm-1 rm-1=qmrm da cui si ricava facilmente che MCD(r0,r1)=MCD(r1,r2)=…=MCD(rm-1,rm)=rm Pertanto, MCD(r0,r1)=rm delle L’algoritmo di Euclide 2 • Poiché l’algoritmo di Euclide calcola il più grande divisore comune, può essere utilizzato per determinare se un intero positivo b <n ha un inverso modulo n, partendo con r0=n e r1=b; tuttavia non serve a calcolare effettivamente l’inverso • Teorema 1 Per 0jm, rj tjr1 (mod r0), dove qj,rj sono definiti dall’algoritmo di Euclide e tj sono definiti dalla relazione di ricorrenza t0=0, t1=1, tj=tj-2-qj-1tj-1 (mod r0) se j2 • Infatti… L’asserto è banalmente vero per j=0 e j=1. Per induzione, supponiamo che la relazione sia valida per j=i-1 e j=i-2, con i2, allora ri=ri-2-qi-1ri-1 ti-2r1-qi-1 ti-1r1 (mod r0) (ti-2-qi-1 ti-1 ) r1 (mod r0) tir1 (mod r0) • Corollario 1 Sia MCD(r0,r1)=1. Allora tm=r-1 (mod r0) • L’algoritmo di Euclide 3 La sequenza di numeri t0,t1,…,tm viene calcolata con l’algoritmo di Euclide, contemporaneamente a qj,rj 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. n0=n b0=b t0=0 t=1 q= n0/b0 r=n0-qb0 while r>0 do temp=t0-qt if temp0 then temp=temp (mod n) if temp<0 then temp=n – ((-temp) (mod n)) t0=t t=temp n0=b0 b0=r q= n0/b0 r=n0-qb0 if b01 then b non ammette inverso modulo n else b-1=t (mod n) L’algoritmo di Euclide 4 • • Note o Nell’algoritmo descritto, non viene utilizzato nessun vettore per tenere traccia dei successivi qj,rj e tj, dato che in tutti i calcoli sono coinvolti soltanto gli ultimi due termini delle diverse successioni o Nel passo 10., l’espressione per il calcolo di temp è stata scritta in modo tale che la riduzione modulo n venga eseguita con argomento positivo (e fornisca un risultato positivo) Esempio 1 Si vuole calcolare 28-1 (mod 75). L’algoritmo di Euclide esteso svolge i seguenti passi 75=228+19 7328 (mod 75)=19 28=119+9 328 (mod 75)=9 19=29+1 6728 (mod 75)=1 9=91 Passo 6. Passo 12. Passo 16. Passo 12. Passo 16. Passo 12. Passo 16. 28-1 (mod 75)=67 Il teorema Cinese dei Resti 1 • Il teorema Cinese dei Resti è un metodo per risolvere certi sistemi di congruenze • Siano m1,…,mr interi positivi primi fra loro ed a1,…,ar interi; si consideri il sistema di congruenze: xa1 (mod m1) xa2 (mod m2) xar (mod mr) • Il teorema Cinese dei Resti asserisce che il sistema ha un’unica soluzione modulo M= m1 m2… mr • Si consideri la funzione : ZM Zm1 Zm … Zm r 2 (x)=(x (mod m1),…,x (mod mr)) • Esempio 2 Siano r=2, m1=5, m2=3 M=15, e la funzione assume i valori… (0)=(0,0) (1)=(1,1) (2)=(2,2) (3)=(3,0) (6)=(1,0) (9)=(4,0) (12)=(2,0) (4)=(4,1) (7)=(2,1) (10)=(0,1) (13)=(3,1) (5)=(0,2) (8)=(3,2) (11)=(1,2) (14)=(4,2) Il teorema Cinese dei Resti 2 • Provare il teorema del Cinese dei Resti equivale a provare che la funzione è una bi-iezione (è il caso dell’esempio precedente, in cui è facile calcolare -1) • Per 1ir, si definisca Mi=M/mi MCD(Mi,mi)=1, i -1 • Per 1ir, si definisca yi=Mi (mod mi): l’inverso esiste perché MCD(Mi,mi)=1 e può essere calcolato con l’algoritmo di Euclide • Si noti che Miyi1 (mod mi), per 1ir • Definiamo : Zm Zm2 … Zm r ZM come 1 r (a1,…ar)=aiMiyi (mod M) i=1 • Mostreremo che =-1, il che fornisce una formula esplicita per la risoluzione del sistema di congruenze originale Il teorema Cinese dei Resti 3 • Definiamo X=(a1,…ar) e sia 1jr • Consideriamo il termine aiMiyi, ridotto modulo mj: se i=j, aiMiyi ai (mod mj); se ij, invece, aiMiyi 0 (mod mj), poiché Mi è divisibile per mi. Pertanto… X r aiMiyi (mod i=1 mj) aj (mod mj) X è una soluzione del sistema di congruenze • Inoltre, la funzione mappa domini di ugual cardinalità M e poiché si è appena dimostrato che è suriettiva, deve essere anche iniettiva, cioè è una bi-iezione e -1= • -1 è una funzione lineare degli argomenti a1,…ar Il teorema Cinese dei Resti 4 • Esempio 3 Siano r=3, m1=7, m2=11, m3=13 M=1001. Di conseguenza, M1=143, M2=91, M3=77 e y1=5, y2=4, y3=12. Pertanto, -1: Z7 Z11Z13 Z1001 è definita da -1 (a1,a2,a3)=715a1+364a2+924a3 (mod 1001) Se x5 (mod 7), x3 (mod 11), x10 (mod 13), x=7155+3643+92410 (mod 1001) =13907 (mod 1001)=894 (mod 1001) che può essere provato riducendo 894 modulo 7,11,13 • Teorema 2 (Teorema Cinese dei Resti ) Siano m1,…,mr interi positivi primi fra loro ed a1,…,ar interi. Il sistema delle r conguenze xai (mod mi), per 1ir, ammette soluzione unica modulo M=m1 m2… mr, X -1 r aiMiyi (mod i=1 M) con Mi=M/mi, yi=Mi (mod mi), per 1ir • • • • • Altri risultati 1 Un altro risultato della Teoria dei Gruppi, noto come Teorema di Lagrange, è rilevante per la descrizione delle proprietà del crittosistema RSA Per un gruppo moltiplicativo finito G, si definisce ordine di un elemento gG il più piccolo intero positivo m, tale che gm=1 Teorema 3 (Teorema di Lagrange ) Sia G un gruppo moltiplicativo di ordine n e sia gG. Allora, l’ordine di g è un divisore di n Corollario 2 (Teorema di Eulero ) Se bZn*, allora b(n)1 (mod n) Infatti… Zn* è un gruppo moltiplicativo di ordine (n ) Corollario 3 (Teorema di Fermat ) Sia p un numero primo e bZp. Allora, bpb (mod p) Infatti… / Se p è primo, (p)=p-1. Pertanto, per b0 (mod p), il risultato segue dal Corollario 2. Se b0 (mod p), il risultato è ancora vero perché 0p 0 (mod p) Altri risultati 2 • • • • • Pertanto, se p è primo, Zp* è un gruppo di ordine p-1, ed ogni elemento in Zp* ha ordine che divide p-1. Comunque, se p è primo, il gruppo Zp* è ciclico: esiste un elemento Zp* che ha ordine uguale a p-1 Teorema 4 Se p è primo, Zp* è un gruppo ciclico Un elemento di ordine p-1 è un elemento primitivo modulo p Un elemento è primitivo se e solo se {i: 0ip-2}=Zp* Supponiamo che p sia primo ed sia un elemento primitivo modulo p. Ogni elemento Zp* può essere riscritto come =i, con 0ip-2, in maniera univoca; l’ordine di =i è p-1/MCD(p-1,i) è esso stesso un elemento primitivo se e solo se MCD(p-1,i)=1 il numero degli elementi primitivi modulo p è (p-1) Altri risultati 3 • Esempio 4 Sia p=13. Calcolando le successive potenze del 2, si può verificare che 2 è un elemento primitivo modulo 13: 20 mod 13=1 21 mod 13=2 22 mod 13=4 23 mod 13=8 24 mod 13=3 25 mod 13=6 26 mod 13=12 27 mod 13=11 28 mod 13=9 29 mod 13=5 210 mod 13=10 211 mod 13=7 L’elemento 2i è primitivo se e solo se MCD(i,12)=1, cioè sse i=1,5,7,11 gli elementi primitivi modulo 13 sono 2,6,7,11 Il crittosistema RSA 1 • RSA è realizzato in Zn, dove n è il prodotto di due numeri primi distinti p e q (n )=(p-1)(q-1) Sia n =pq, con p e q numeri primi. Siano P = C = Zn Sia K ={(n,p,q,a,b): n =pq, p,q primi, ab1 (mod (n ))} Per k=(n,p,q,a,b): ek(x) = xb (mod n) dk(y) = ya (mod n) x,y Zn I valori di n e b sono pubblici, p,q ed a segreti • Le operazioni di codifica e decodifica sono inverse. Infatti, poiché ab1 (mod (n)), ab=t(n)+1, per qualche intero t1. Sia xZn*, allora… (xb)a xt(n)+1 (mod n) (x(n))t x (mod n) 1t x (mod n) x (mod n) Il crittosistema RSA 2 • • • • • Esempio 5: Un piccolo crittosistema RSA insicuro Supponiamo che Bob abbia scelto p=101 e q=113 n=11413 e (n)=100112=11200. Poiché 11200=26527, un intero b può essere utilizzato quale esponente di codifica se e solo se b non è divisibile per 2, 5 o 7 In pratica, Bob non fattorizzerà (n), verificherà solo che MCD((n),b)=1 utilizzando l’algoritmo di Euclide Supponiamo che Bob scelga b=3533; allora l’algoritmo di Euclide calcola b-1=6597 (mod 11200) l’esponente di codifica è a=6597 Bob pubblica n=11413 e b=3533. Supponiamo che Alice voglia inviare il testo in chiaro 9726, Alice calcolerà 97263533 (mod 11413)=5761 ed invierà il testo cifrato 5761 sul canale Quando Bob riceve y=5761, utilizza l’esponente di decifratura segreto a per calcolare 57616597 (mod 11413)=9726 Sicurezza di RSA • La sicurezza del crittosistema RSA è basata sulla “speranza” che ek(x)=xb (mod n) sia oneway, così da rendere computazionalmente impossibile, per una spia, decrittare il testo cifrato • La scappatoia (trapdoor) che permette a Bob di decifrare il codice cifrato è costituita dalla conoscenza della fattorizzazione di n=pq • Dato che Bob conosce p e q, può calcolare (n)=(p-1)(q-1) e quindi l’esponente di decifratura a, utilizzando l’algoritmo di Euclide esteso Implementazione di RSA 1 • • Ci sono diversi aspetti del crittosistema RSA che devono essere approfonditi, quali i dettagli implementativi, l’efficienza delle operazioni di codifica/decodifica, la sicurezza Per realizzare il crittosistema, Bob… 1. 2. 3. 4. 5. • Genera due numeri primi grandi, p e q Calcola n =pq e (n)=(p-1)(q-1) Sceglie in maniera casuale un intero positivo 0b(n) tale che MCD(b,(n))=1 Calcola a=b-1 (mod (n)) utilizzando l’algoritmo di Euclide Rende nota la chiave pubblica kp=(n,b) L’attacco più ovvio che può essere sferrato a RSA consiste quindi nel tentativo di fattorizzare n. Se la fattorizzazione di n può essere calcolata facilmente, allora altrettanto facilmente si può calcolare (n) e quindi l’esponente a di decifratura (così come fa Bob) Implementazione di RSA 2 Si congettura che il problema di violare RSA sia polinomialmente equivalente al problema di fattorizzare n, ma non esiste a tutt’oggi una prova certa Comunque… affinché RSA sia sicuro occorre certamente che n=pq sia sufficientemente grande da rendere la fattorizzazione computazionalmente irrealizzabile Gli algoritmi di fattorizzazione sono in continua evoluzione (parallelamente all’evoluzione dell’hardware): • • • o o Supponiamo che un algoritmo di fattorizzazione sia in grado di fattorizzare numeri aventi fino a 130 cifre decimali per garantire la sicurezza, occorre scegliere p e q a 100 cifre così che n abbia almeno 200 cifre Si osservi inoltre che, un eventuale implementazione hardware di RSA a 512 bit, sarebbe in grado di realizzare interi con 154 cifre decimali (poiché il numero di bit nella rappresentazione binaria è circa log210 volte il numero delle cifre decimali) Implementazione di RSA 3 Per quanto riguarda le operazioni di codifica/decodifica, entrambe presuppongono un elevamento a potenza modulo n • Dato che n è molto grande, occorre utilizzare un’aritmetica di alta precisione per effettuare i calcoli in Zn, ed il tempo impiegato per i calcoli dipenderà dal numero di bit della rappresentazione binaria di n • Supponiamo che n sia rappresentabile con k bit, cioè k=log2n+1; si può dimostrare che un’addizione ed una moltiplicazione sono eseguibili in tempo proporzionale, rispettivamente, a k e k2. Inoltre, una riduzione modulo n di un intero rappresentato con al più 2k bit può essere realizzata in O (k2) • Siano x,yZn; xy (mod n) può essere calcolato effettuando prima il prodotto xy (che ha 2k cifre) e quindi la riduzione modulo n La moltiplicazione modulare costa complessivamente, in tempo, O (k2) • Implementazione di RSA 4 Consideriamo ora l’operazione di esponenziazione modulare, cioè il calcolo di xc (mod n ): in RSA sia la funzione di codifica che quella di decodifica sono esponenziazioni modulari • L’elevamento a potenza in modulo può essere realizzato effettuando c-1 moltiplicazioni modulari; tuttavia, questa tecnica è molto inefficiente per c grande e, normalmente, c può essere dell’ordine di grandezza di (n)-1, che è esponenziale in k • La tecnica “elevamento al quadrato-moltiplicazione” riduce il numero di moltiplicazioni modulari necessarie al calcolo di xc (mod n ) ad al più 2l, dove l è il numero di bit della rappresentazione binaria di c poiché lk, il tempo richiesto per il calcolo è O (k3) • Pertanto le fasi di codifica/decodifica in RSA vengono eseguite in tempo polinomiale in k (numero dei bit per rappresentare il plaintext) • Implementazione di RSA 5 • La tecnica “elevamento al quadrato-moltiplicazione” presuppone che l’esponente b sia rappresentato, in notazione binaria, come l-1 b=b i2i i=0 con b i uguale a 0 o 1, 0il-1 1. 2. 3. 4. • z=1 for i=l-1 downto 0 do z=z2 (mod n) if bi=1 then z=zx (mod n) Il numero di operazioni eseguite dall’algoritmo comprende l elevamenti a potenza (passo 3.). Inoltre il numero di moltiplicazioni modulari (passo 4.) è uguale al numero di bit ad 1 nella rappresentazione binaria di b, che è un intero compreso fra 0 e l Il numero totale di operazioni è 2l Implementazione di RSA 6 • Esempio 6 Sia n=11413 e b=3533, come nell’Esempio 5. Alice codifica il plaintext 9726 utilizzando l’algoritmo di “elevamento al quadrato-moltiplicazione” per valutare 97263533 (mod 11413), come segue… i 11 10 9 8 7 6 5 4 3 2 1 0 bi 1 1 0 1 1 1 0 0 1 1 0 1 z 1 9726=9726 972629726=2659 26592=5634 563429726=9167 916729726=4958 495829726=7783 77832=6298 62982=4629 462929726=10185 1018529726=105 1052=11025 1102529726=5761 2 Il testo cifrato è 5761 Implementazione di RSA 7 Il secondo passo dell’algoritmo realizzato da Bob, per implementare il crittosistema RSA, è diretto e viene eseguito in un tempo dell’ordine O ((logn)2) • I passi 3. e 4. presuppongono l’uso dell’algoritmo di Euclide. Siano r0 ed r1 gli interi di cui si vuol calcolare il massimo divisore comune e sia r0>r1 • o In ciascuna iterazione dell’algoritmo vengono calcolati un quoziente ed un resto, in tempo O ((log r0)2) o Se è possibile ottenere un limite superiore al numero di iterazioni, si otterrà, in conseguenza, un limite sulla complessità dell’algoritmo Il Teorema di Lamé asserisce che se s è il numero di iterazioni, allora fs+2r0, con fi iesimo numero di Fibonacci. Dato che fi ((1+5)/2)i, s è O(log r0) Il tempo totale è O((log n )3) (in realtà, un esame più accurato, conduce a O((log n )2) ) Implementazione di RSA 8 Resta ancora aperto il problema di come Bob realizzi il primo passo del suo algoritmo di implementazione di RSA • Nella pratica, per generare numeri primi grandi la tecnica comunemente usata è quella di generare numeri casuali grandi e quindi effettuare un test di primalità con un algoritmo probabilistico di tipo Monte Carlo • Tali algoritmi sono veloci: il test su un numero intero n ha durata polinomiale in log2n, il numero di bit della rappresentazione binaria di n (in particolare, O((log2n)2)); tuttavia è possibile che l’algoritmo sbagli, dichiarando primo un numero che non lo è effettivamente • Eseguendo l’algoritmo più volte, la prpbabilità di errore può comunque essere ridotta al di sotto di una soglia prestabilita • Implementazione di RSA 9 Altra questione fondamentale è quella di stabilire quanti interi casuali (di lunghezza prefissata) occorre testare, prima di rilevare un numero primo • Un famoso risultato della Teoria dei Numeri stabilisce che il numero di interi primi minori di N è approssimativamente N/ln(N) • Pertanto se p è un numeo casuale, la probabilità che sia primo è 1/ln(p) • Per fare una stima, con interi rappresentati con 512 bit, 1/ln(p) 1/177, cioè, in media, su 177 interi casuali ve ne sarà uno primo o, escludendo i numeri pari, al più due • Un esempio di attacco a RSA 1 È possibile attaccare RSA in maniera diversa dal riuscire a calcolare una fattorizzazione per n ? • Se Oscar viene a conoscenza del valore di (n ), i due numeri primi p e q possono essere calcolati quali soluzioni del sistema n=pq (n )=(p-1)(q-1) Infatti, sostituendo q=n/p nella seconda equazione, si ottiene l’equazione di secondo grado in p p 2-(n-(n )+1)p+n=0 le cui soluzioni sono esattamente p e q, i fattori di n Rilevare (n ) è difficile quanto fattorizzare n • Un esempio di attacco a RSA 2 • Esempio 7 Supponiamo che Oscar abbia appreso che n=84773093 e (n )=84754668. L’informazione può essere utilizzata per scrivere la seguente equazione di secondo grado p 2 – 18426p +84773093=0 che, risolta, fornisce i due fattori di n, p=9539 e q=8887