670 likes | 884 Views
Crittografia a chiave asimmetrica o pubblica (PKC). Proposta pubblicamente nel 1976 da Diffie e Hellman ma nota alla NSA dalla metà degli anni 60, rappresenta l’avanzamento più significativo nella lunga storia della criptografia Usa due chiavi: pubblica e privata
E N D
Crittografia a chiave asimmetrica o pubblica (PKC) • Proposta pubblicamente nel 1976 da Diffie e Hellman ma nota alla NSA dalla metà degli anni 60, rappresenta l’avanzamento più significativo nella lunga storia della criptografia • Usa due chiavi: pubblica e privata • Sistema asimmetrico poichè le due estremità non si trovano nella stessa condizione • Rappresenta un complemento e non una sostituzione della criptografia a chiave privata • Fondata sull’applicazione di concetti inerenti la teoria dei numeri
Crittografia a chiave asimmetrica Perchè? • Due importanti problemi da risolvere • Distribuzione delle chiavi • Come avere delle comunicazioni sicure senza dovere • ottenere le chiavi da un KDC fiduciale • Firma digitale • Come verificare che un messaggio provenga • effettivamente da chi se dichiara autore
Crittografia a chiave pubblica • Anche se può assicurare la segretezza, la crittografia asimmetrica non viene utilizzata per questo scopo a causa dei lunghi tempi computazionali. • Viene utilizzata in prevalenza per garantire autenticazione.
Crittografia a chiave asimmetrica • Ciascun utente dispone di una coppia di chiavi (Kpu, Kpr), da lui stesso generate: • Kpu viene resa pubblica in un elenco centrale, consultabile liberamente, mentre Kpr deve restare segreta (la conosce solo il proprietario), • un msg cifrato con una chiave può essere decifrato solo con l’altra e viceversa, • dalla conoscenza di Kpu non è possibile risalire a Kpr
Kd Testo in chiaro Testo cifrato Ki Crittografia a chiave asimmetrica
Crittografia a chiave pubblica (msg privato e incertezza sull’identità del mittente segretezza) • A cifra un messaggio in chiaro X con la chiave KUb (pubblica) di B, genera il testo cifrato Y e lo recapita a destinazione. • B utilizza la sua chiave KRb (privata e segreta) per decifrare Y e ottenere il messaggio X. Nessuno, eccetto B, può decifrare il messaggio X, neanche A che lo ha cifrato.
Crittografia a chiave pubblica Segretezza
Crittografia a chiave pubblica (msg pubblico e certezza identità mittente autenticazione) • A cifra un messaggio X con la propria chiave KRb(privata) e lo invia a n persone. • Chiunque delle n persone decifra il testo cifrato Y con KUb (pubblica) di A ottenendo X e la certezza sull’identità del mittente perché solo A conosce la sua chiave segreta
Crittografia a chiave pubblica Autenticazione
Crittografia a chiave pubblica (msg privato e certezza identità mittente segretezza e autenticazione) • A cifra un messaggio X con la propria chiave KRa (privata)Y (certezza su identità del mittente), poi cifra Y con KUb (pubblica) di B ( privatezza del msg) e lo recapita a destinazione Z • B decifra Z con la propria chiave KRb (privata)Y, (privatezza del msg) poi decifra Y con KUa (pubblica) di A (certezza identità di A) riottenendo X. • Solo B può leggere il msg (privato) ed avere la certezza sull’identità del mittente.
Crittografia a chiave pubblica Segretezza eAutenticazione
Crittografia a chiave pubblica Vari sistemi applicabili per • Encryption/decryption (segretezza) • Firma digitale (autenticazione) • Scambio delle chiavi (per le chiavi di sessione) Non tutti gli algoritmi adatti per tutti gli usi, alcuni sono specifici
Crittografia a chiave pubblica: considerazioni ◘Nello schema visto viene crittografato l’intero messaggio ◘ Richiede una grande area di memorizzazione poiché è necessario conservare copia del testo in chiaro ◘Una copia di testo cifrato deve essere conservata per verificare l’origine e il contenuto in caso di disputa ◘L’algoritmo di crittografia a chiave pubblica lento e complesso deve essere applicato 4 volte Soluzione Viene crittografato solo un piccolo blocco di bit che rappresenta una funzione del documento che funziona come blocco di autenticazione
Crittografia a chiave pubblica: sicurezza ◘Come negli schemi a chiave privata è sempre possibile in via teorica l’attacco con ricerca esaustiva a forza bruta ◘ Possibilità pratica di attacco dipende dalla lunghezza delle chiavi (tipicamente 512 - 1024 – 2048 bit) ◘Sicurezza basata su differenza tra difficoltà di un pesante problema di criptanalisi e facilità di encrypt/decrypt ◘Bisogno di usare numeri grandissimi ◘Lentezza nei confronti degli schemi a chiave privata
Funzioni one-way Could One be Fundamentally Harder than the Other? ? Seating Tour
Funzioni one-way • soluzione per ottenere una coppia di chiavi: funzioni one-way con trapdoor • idea: una funzione f: è one-way se: • dato x, calcolare f(x) è facile • dato y, calcolare x tale che f(x) = y è difficile • la funzione one-way è con trapdoor se: • dato y, calcolare x tale che f(x) = y è facile conoscendo un’informazione segreta k • dato y, calcolare x tale che f(x) = y è difficile se non si conosce k
definizione formale: f: è one-way se: f è calcolabile in tempo polinomiale da una MdT (Macchina di Touring) deterministica (cioè è facile da calcolare) esistono due polinomi p( ) e q( ) tali che: p(|x|) |f(x)| q(|x|) (cioè non deve produrre un output troppo corto) per ogni algoritmo A eseguibile su una MdT probabilistica, e per ogni polinomio p( ) esiste un numero naturale nA,p tale che: Funzioni one-way
Funzioni one-way • osservazione: se P = NP, allora non esistono funzioni one-way ! • contronominale: se esiste una funzione one-way, allora P NP • d’altra parte, potrebbe essere P NP senza che esistano funzioni one-way • (l’inversione di una funzione one-way deve essere “quasi sempre” difficile) • in crittografia, spesso si lavora con permutazioni (su {0,1}n) one-way • non sapendo se P = NP oppure P NP, si suppone che esistano funzioni one-way
Funzioni one-way • La classe dei problemi che hanno un algoritmo di soluzione che lavora in tempo polinomiale viene denotata P, • La classe di complessità NP è l’insieme di tutti i problemi decisionali per cui la risposta SI può essere verificata in un tempo polinomiale avendo una informazione extra detta certificato (non è detto che però sia semplice ottenerlo). • La classe di complessità co-NP è l’analogo del precedente, ma riguardante la risposta NO.
Esponenziazione modulare • primo esempio di funzione che sembra essere one-way: l’esponenziazione modulare • sia p un numero primo • consideriamo il campo p, e in particolare il suo gruppo moltiplicativo p* = {1,2,…,p-1} • si dimostra che p* è un gruppo ciclico g p* tale che p* = {g0, g1,…, gp-2} • l’esponenziazione modulare è la funzione f : p* definita come segue: f(z) = gzmod p
Esponenziazione modulare Esempio: • 5* = {1,2,3,4} è il gruppo moltiplicativo contenuto nel campo 5 = {0,1,2,3,4} • 2 è un generatore di 5*; infatti: 5* = {20,21,22,23} = {1,2,4,3} • possiamo definire la seguente esponenziazione modulare: f(z) = 2zmod 5 • ogni esponenziazione modulare produce una permutazione (one-way) degli elementi di p*
Esponenziazione modulare • dato x, possiamo calcolare gxmod p in tempo polinomiale • possiamo supporre che 0 x p-2 • la dimensione dell’input è il numero di bit necessari per rappresentare gli elementi di p*, quindi n = log2 p • vale: dove (xn-1,…,x1,x0 ) è la rappresentazione binaria di x
Esponenziazione modulare • Approccio immediato per il calcolo di gx mod p: ModExp(p, g, x) risultato = 1 while x > 0 do risultato = risultato * g mod p x = x – 1 return risultato • in pratica, nella variabile risultato si ottiene: g0, g1, g2, …, gx (sempre mod n) • problema: il numero di iterazioni è elevato e pari a x 2n (esponenziale rispetto a n)
Esponenziazione modulare • soluzione migliore: poiché vale: allora ci basta calcolare i valori g2j, per j {0,1,…,n-1}, e moltiplicare tra loro solo quelli per cui xj=1 • il tutto può essere fatto in tempo polinomiale (rispetto a n) tramite il cosiddetto algoritmo “square-and-multiply”
Esponenziazione modulare • algoritmo “square-and-multiply”: ModExp(p, g, x) ris = 1 for j = n-1 downto 0 do ris = (ris * ris) mod p if xj = 1 then ris = (ris * g) mod p return ris • esempio: 87 mod 11 p = 11, g = 8, x = 7, n = 4 osservazione: 87 = 2097152
Esponenziazione modulare • esecuzione dell’algoritmo: nella prima colonna, il valore di ris all’inizio della j-esima iterazione • nelle ultime due colonne, non è stata fatta la riduzione modulo p
Logaritmi discreti • l’operazione inversa si chiama logaritmo discreto • definizione del problema: dati: • p primo • g generatore di p* • y p* calcolare x {0,1,…,p-2} tale che gx y mod p • il calcolo dei logaritmi discreti sembra essereintrattabile: non si conoscono algoritmi che lo risolvono in tempo polinomiale (rispetto a n = log2 p) per tutte le istanze • per farsi un’idea, provare a calcolare a mano i logaritmi in base 3 in 113*
Logaritmi discreti • osservazioni: • 113 è troppo piccolo per applicazioni crittografiche • elencare gli elementi di p* richiede tempo O(p) = O(2n) • quindi, l’esponenziazione modulare può essere usata per “nascondere” il valore di x {0,1,2,…,p-2} in gxmod p • è come chiudere x in una cassetta che non può più essere aperta • abbiamo la funzione one-way, manca la trapdoor
Fattorizzazione • altro esempio di funzione che sembra essere one-way: il prodotto tra numeri interi • definizione molto semplice: dati due numeri primip e q, calcolare n = p q • il problema inverso è la fattorizzazione: dato un numero interon, che si sa essere il prodotto di due numeri primi p e q, calcolare p (o q)
Fattorizzazione • la dimensione dell’input è il numero di bit necessari per rappresentare gli elementi n, peq; poniamo quindi m = log2 n • algoritmo banale: si prova a dividere n per tutti gli interi compresi tra 2 e questo algoritmo richiede però tempo che è esponenziale rispetto a m • altri algoritmi, in generale possono richiedere un tempo esponenziale
Crittografia a chiave asimmetrica • Caratteristiche • Sicurezza dei msg da chiunque verso chiunque • Il numero di chiavi è proporzionale al numero di utenti • Il segreto risiede nella chiave • Si possono distribuire le chiavi pubbliche come si vuole
Crittografia a chiave asimmetrica • R.S.A. (Rivest-Shamir-Adleman Algorithm) • D.S.A. (Digital Signature Algorithm) ALGORITMI CONSENTITI DALLA LEGGE PER IL CALCOLO DELLA FIRMA DIGITALE
Crittografia a chiave asimmetrica • Problematiche • Tempi di computazione lunghi (i numeri -testo e chiave- coinvolti nei calcoli sono estremamente grandi ) • E’ necessario avere chiavi molto lunghe per ridurre al minimo la probabilità di forzature • Inadatti per testi molto lunghi • Resta problema certezza attributi associati alla chiave pubblica certificati digitali firmati da C.A.
Rivest, Shamir, Adleman (RSA) • Rivest, Shamir e Adleman del MIT nel 1977 • Sistema a chiave pubblica più noto e usato • Sicurezza dovuta alla difficoltà di fattorizzare grandi numeri • Chiavi funzioni di una coppia di grandi numeri primi • Cifrario a blocco • Basato sulla esponenziazione modulo un primo, • di numeri interi in un campo di Galois • Utilizza grandi numeri interi (tipicamente > 512 bit) • Brevetto scaduto nel 2000
Rivest, Shamir, Adleman (RSA)cenni preliminari • Generazione delle chiavi • Selezionare due numeri primi p, q • Calcolare n = p · q • Calcolare Ф(n) = (p – 1) · (q – 1) • Scegliere e primo relativamente a Ф(n) • Scegliere d tale che d · e modulo Ф(n) = 1 • KPub = [e,n] • Kpri = [d,n]
RSA + -------------------------------- + | From: Alice | | To: Bob | | Subject: TOP SECRET! | + -------------------------------- + Parte 1: | | chiave di sessione C | | crittata con RSA | | + -------------------------------- + | | | | | | Parte 2: | | messaggio M | | crittato con DES | | | | | | | | • ------------------------------------------------------------ +
RSA: esempio • supponiamo che Bob scelga p = 101 e q = 113, da cui nB = p q = 11413 e (nB) = (p-1)(q-1) = 11200 • ora Bob deve scegliere dB, compreso tra 2 e (nB)-1 = 11199, tale che MCD(dB,(nB)) = MCD(dB, 11200) = 1. Supponiamo che scelga • dB = 6597 • usando l’algoritmo di Euclide esteso, Bob calcola eB dB-1mod(nB) 3533 mod 11200 • la chiave pubblica di Bob è (nB, eB) = (11413, 3533), mentre la chiave privata è dB = 6597