1 / 32

RSA

RSA. Monica Bianchini monica@ing.unisi.it Dipartimento di Ingegneria dell’Informazione Università di Siena. Introduzione  1.

dionne
Download Presentation

RSA

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. RSA Monica Bianchini monica@ing.unisi.it Dipartimento di Ingegneria dell’Informazione Università di Siena

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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. : ZnZn 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

  7. 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

  8. 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 consiste nell’esecuzione delle seguenti divisioni • 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

  9. 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 0jm, 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 j2 • 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 i2, 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)

  10. L’algoritmo di Euclide  3 • La sequenza di numeri t0,t1,…,tm viene calcolata con l’algoritmo di Euclide, contemporaneamente a qj,rj • n0=n • b0=b • t0=0 • t=1 • q= n0/b0  • r=n0-qb0 • while r>0 do • temp=t0-qt • if temp0 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-qb0 • ifb01 then • b non ammette inverso modulo n • else • b-1=t (mod n)

  11. L’algoritmo di Euclide  4 • Note • 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 • 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 •  28-1 (mod 75)=67

  12. 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: • xa1 (mod m1) • xa2 (mod m2) • xar (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Zm  Zm … Zm • (x)=(x (mod m1),…,x (mod mr)) • Esempio 2 • Siano r=2, m1=5, m2=3  M=15, e la funzione  assume i valori… 1 r 2

  13. 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 1ir, si definisca Mi=M/mi  MCD(Mi,mi)=1, i • Per 1ir, 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 Miyi1 (mod mi), per 1ir • Definiamo : Zm  Zm … Zm ZM come • (a1,…ar)=aiMiyi (mod M) • Mostreremo che =-1, il che fornisce una formula esplicita per la risoluzione del sistema di congruenze originale -1 2 r 1 r i=1

  14. Il teorema Cinese dei Resti  3 • Definiamo X=(a1,…ar) e sia 1jr • Consideriamo il termine aiMiyi, ridotto modulo mj: se i=j, aiMiyi ai (mod mj); se ij, invece, aiMiyi 0(mod mj), poiché Mi è divisibile per mi. Pertanto… • X aiMiyi (mod 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 r i=1

  15. 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Z11Z13 Z1001 è definita da • -1 (a1,a2,a3)=715a1+364a2+924a3 (mod 1001) • Se x5 (mod 7), x3 (mod 11), x10 (mod 13), • x=7155+3643+92410 (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 xai (mod mi), per 1ir,ammettesoluzione unica modulo M=m1m2…mr, • X aiMiyi (mod M) • con Mi=M/mi, yi=Mi (mod mi), per 1ir r i=1 -1

  16. 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 gG 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 gG. Allora, l’ordine di g è un divisore di n • Corollario 2 (Teorema di Eulero) • Se bZn*, allora b(n)1 (mod n) • Infatti… • Zn* è un gruppomoltiplicativo di ordine (n) • Corollario 3 (Teorema di Fermat) • Sia p un numero primo e bZp. Allora,bpb (mod p) • Infatti… • Se p è primo, (p)=p-1. Pertanto, per b0 (mod p), il risultato segue dal Corollario 2. Se b0 (mod p), il risultato è ancora vero perché 0p 0 (mod p) /

  17. 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 gruppoZp* è ciclico: esiste un elemento Zp* che ha ordine uguale a p-1 • Teorema4 Se p è primo, Zp* è un gruppo ciclico • Un elemento  di ordine p-1 è un elemento primitivomodulo p • Un elemento  è primitivo se e solo se {i: 0ip-2}=Zp* • Supponiamo che p sia primo ed  sia un elemento primitivo modulo p. Ogni elemento Zp* può essere riscritto come =i, con 0ip-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)

  18. 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

  19. Il crittosistema RSA  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, ab1 (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 • RSA è realizzato in Zn, dove n è il prodotto di due numeri primi distinti p e q (n )=(p-1)(q-1) • Le operazioni di codifica e decodifica sono inverse. Infatti, poiché ab1 (mod (n)), ab=t(n)+1, per qualche intero t1. Sia xZn*, allora… (xb)a  xt(n)+1 (mod n)  (x(n))t x (mod n)  1t x (mod n)  x (mod n)

  20. 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)=100112=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

  21. Sicurezza di RSA • La sicurezza del crittosistema RSA è basata sulla “speranza” che ek(x)=xb (mod n) sia one-way, 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

  22. 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… • Genera due numeri primi grandi, p e q • Calcola n=pq e (n)=(p-1)(q-1) • Sceglie in maniera casuale un intero positivo 0b(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)

  23. 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): • 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)

  24. 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,yZn; 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)

  25. 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é lk, 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)

  26. Implementazione di RSA  5 • La tecnica “elevamento al quadrato-moltiplicazione” presuppone che l’esponente b sia rappresentato, in notazione binaria, come b=bi2i con bi uguale a 0 o 1, 0il-1 • 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 l-1 i=0 • z=1 • for i=l-1 downto 0 do • z=z2 (mod n) • ifbi=1 then z=zx (mod n)

  27. 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…  Il testo cifrato è 5761

  28. 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 • In ciascuna iterazione dell’algoritmo vengono calcolati un quoziente ed un resto, in tempo O ((log r0)2) • 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+2r0, con fi i-esimo 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) )

  29. 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

  30. 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

  31. 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 p2-(n-(n)+1)p+n=0 le cui soluzioni sono esattamente p e q, i fattori di n  Rilevare (n) è difficile quanto fattorizzare n

  32. 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 p2 – 18426p +84773093=0 che, risolta, fornisce i due fattori di n,p=9539 e q=8887

More Related