Dalla Crittografia a Chiave Pubblica al Commercio Elettronico



Documenti analoghi
SISTEMI DI NUMERAZIONE E CODICI

LE FUNZIONI A DUE VARIABILI

! La crittoanalisi è invece la scienza che cerca di aggirare o superare le protezioni crittografiche, accedendo alle informazioni protette

da chi proviene un messaggio?

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

Introduzione alla crittografia. Il crittosistema RSA e la sua sicurezza

4 3 4 = 4 x x x 10 0 aaa

Lezioni di Matematica 1 - I modulo

STRUTTURE ALGEBRICHE

Introduzione alla crittografia con OpenPGP

Dimensione di uno Spazio vettoriale

Corrispondenze e funzioni

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

PROPRIETA' ASSOCIATIVA La somma di tre o più addendi non cambia se al posto di alcuni di essi si sostituisce la loro somma.

UNIVERSITÀ DEGLI STUDI DI TERAMO

Il glossario della Posta Elettronica Certificata (PEC) Diamo una definizione ai termini tecnici relativi al mondo della PEC.

Analisi di programmi: Crittografia

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6

Comunicazioni sicure su Internet: https e SSL. Fisica dell Informazione

LEZIONE 23. Esempio Si consideri la matrice (si veda l Esempio ) A =

RC4 RC4. Davide Cerri. Davide Cerri CEFRIEL - Politecnico di Milano cerri@cefriel.it

1. PRIME PROPRIETÀ 2

Scambio delle chiavi. mercoledì 7 dicembre 2011

( x) ( x) 0. Equazioni irrazionali

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

Informatica per la comunicazione" - lezione 13 -

SSL: applicazioni telematiche SSL SSL SSL. E-commerce Trading on-line Internet banking... Secure Socket Layer

Funzioni inverse Simmetrie rispetto alla bisettrice dei quadranti dispari. Consideriamo la trasformazione descritta dalle equazioni : = y

RETI DI CALCOLATORI. Crittografia. La crittografia

Crittografia. Appunti a cura del prof. Ing. Mario Catalano

Capitolo 2. Operazione di limite

I sistemi di numerazione

Firma digitale Definizione

L espressione torna invece sempre vera (quindi la soluzione originale) se cambiamo contemporaneamente il verso: 1 < 0.

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

razionali Figura 1. Rappresentazione degli insiemi numerici Numeri reali algebrici trascendenti frazionari decimali finiti

La firma digitale CHE COSA E'?

La firma digitale e le sue possibili applicazioni

DOCUMENTO ELETTRONICO E FIRMA DIGITALE

2.1 Definizione di applicazione lineare. Siano V e W due spazi vettoriali su R. Un applicazione

SOMMARIO I radicali pag I radicali aritmetici pag Moltiplicazione e divisione fra radicali aritmetici pag.

Funzioni. Funzioni /2

un protocollo è costituito da una serie di passi (step) e coinvolge due o più persone (parti, entità) allo scopo di svolgere un incarico

Basi di matematica per il corso di micro

2 FUNZIONI REALI DI VARIABILE REALE

ARCHITETTURA DI RETE FOLEGNANI ANDREA

Logica Numerica Approfondimento 1. Minimo Comune Multiplo e Massimo Comun Divisore. Il concetto di multiplo e di divisore. Il Minimo Comune Multiplo

Iniziamo con un esercizio sul massimo comun divisore: Esercizio 1. Sia d = G.C.D.(a, b), allora:

Sicurezza nelle applicazioni multimediali: lezione 4, crittografia asimmetrica. Crittografia asimmetrica (a chiave pubblica)

LA TRASMISSIONE DELLE INFORMAZIONI QUARTA PARTE 1

Fasi di creazione di un programma

Prodotto libero di gruppi

Lezione 1. Gli Insiemi. La nozione di insieme viene spesso utilizzata nella vita di tutti i giorni; si parla dell insieme:

1 Giochi a due, con informazione perfetta e somma zero

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Statistica e biometria. D. Bertacchi. Variabili aleatorie. V.a. discrete e continue. La densità di una v.a. discreta. Esempi.

Esercizi su lineare indipendenza e generatori

Numeri naturali numeri naturali minore maggiore Operazioni con numeri naturali

Logaritmi ed esponenziali

Corso di Informatica

Convertitori numerici in Excel

Lezione 7 Sicurezza delle informazioni

Funzioni. Parte prima. Daniele Serra

10. Insiemi non misurabili secondo Lebesgue.

Capitolo 13: L offerta dell impresa e il surplus del produttore

Teoria in sintesi 10. Attività di sportello 1, 24 - Attività di sportello 2, 24 - Verifica conclusiva, 25. Teoria in sintesi 26

Le funzioni continue. A. Pisani Liceo Classico Dante Alighieri A.S A. Pisani, appunti di Matematica 1

risulta (x) = 1 se x < 0.

ESEMPIO 1: eseguire il complemento a 10 di 765

Creare connessioni cifrate con stunnel

LA RETTA. Retta per l'origine, rette orizzontali e verticali

La Firma Digitale La sperimentazione nel Comune di Cuneo. Pier Angelo Mariani Settore Elaborazione Dati Comune di Cuneo

3. Introduzione all'internetworking

Esempi di funzione. Scheda Tre

la scienza della rappresentazione e della elaborazione dell informazione

ESERCIZI DI PREPARAZIONE E

13. Campi vettoriali

4. Operazioni elementari per righe e colonne

Aspetti Crittografici nel Cloud Computing

Appunti sulla Macchina di Turing. Macchina di Turing

Matematica 1 - Corso di Laurea in Ingegneria Meccanica

4 Dispense di Matematica per il biennio dell Istituto I.S.I.S. Gaetano Filangieri di Frattamaggiore EQUAZIONI FRATTE E SISTEMI DI EQUAZIONI

Dispense di Informatica per l ITG Valadier

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da

Corso di Calcolo Numerico

Complemento al corso di Fondamenti di Informatica I corsi di laurea in ingegneria, settore dell informazione Università la Sapienza Consorzio Nettuno

Applicazioni lineari

Schemi delle Lezioni di Matematica Generale. Pierpaolo Montana

Probabilità discreta

Diagonalizzazione di matrici e applicazioni lineari

Funzioni funzione dominio codominio legge argomento variabile indipendente variabile dipendente

ESERCIZI DI ALGEBRA LINEARE E GEOMETRIA

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

CAPITOLO 16 SUCCESSIONI E SERIE DI FUNZIONI

Sicurezza nei Sistemi Distribuiti

Sicurezza nei Sistemi Distribuiti

Lezione 8. La macchina universale

Documenti cartacei e digitali. Autenticità. Cosa si vuole garantire? Riservatezza. Integrità 11/12/2012. PA digitale: documenti e firme (I.

SISTEMI E RETI. Crittografia. Sistemi distribuiti e configurazione architetturale delle applicazioni WEB.

Transcript:

Dalla Crittografia a Chiave Pubblica al Commercio Elettronico Vincenzo Schifano Abstract Uno degli aspetti sicuramente più attuale all interno del mondo dell informatica, con cui ci relazioniamo quotidianamente, è quello della sicurezza informatica e quindi della crittografia. La crittografia è impiegata nelle operazioni più comuni, quando utilizziamo il cellulare, quando accediamo al nostro account email per controllare la posta, quando preleviamo del denaro presso uno sportello ATM, sono tutte operazioni rese sicure grazie a un qualche protocollo crittografico che proibisce a un probabile agressore di accedere ai nostri dati sensibili. 1. Introduzione Sin dai tempi più antichi si è sentito il bisogno di proteggere le informazioni sensibili, dalle direttive di un generale ai vari accampamenti durante delle guerre alle corrispondenze di carattere politico e diplomatico tra i regnanti di paesi diversi. Uno dei primi approcci utilizzati per raggiungere tale scopo fu l'uso della steganografia (dal greco στεγανός, nascosto, e γραφία, scrittura), l'idea era dunque quella di nascondere il messaggio in qualcosa o in qualcuno. Il passo successivo che rivoluzionò il mondo della sicurezza nello scambio delle informazioni fu l'uso della crittografia, dal greco κρυπτóς che significa "nascosto", e γραφία che vuol dire scrittura. Sebbene sembri che le due parole vogliano dire la stessa cosa, questa volta l'idea consiste nel cifrare il messaggio vero e proprio e non semplicemente nel nasconderlo, così da renderlo incomprensibile in caso di intercettazione da parte di persone non autorizzate. Tra le varie tecniche di encrypting ricordiamo: cifrari a trasposizione, cifrari a sostituzione monoalfabetica, cifrari a sostituzione polialfabetica, cifrari poligrafici o tomogrammici, cifrari a dizionario o a repertorio, cifrari misti, macchine cifranti, cifrari a chiavi segrete e, infine, i moderni cifrari a chiave pubblica. Per meglio comprendere i vari protocolli e le tecniche usate è necessario operare dei richiami matematici: Definizione 1: (Modulo di un numero). Dato un numero qualsiasi, calcolarne il modulo è abbastanza semplice: per esempio, per calcolare 25 modulo 7, si divide 25 per 7 ottenendo il quoziente 3 e il resto 4, ne segue che (25 mod 7) = 4. In generale per calcolare (a mod b) si trovano due interi q ed r tali che a = qb + r e ovviamente 0 r b. il valore di (a mod b) è definito pari a r. [1] Definizione 2: (Gruppo, Gruppo moltiplicativo). Un gruppo ammette una sola operazione binaria. I numeri in Z p sono un gruppo con l addizione. La somma di due numeri del gruppo restituisce un terzo elemento che fa ancora parte del gruppo. Gli elementi 1,, (p-1) insieme alla moltiplicazione (mod p) formano un gruppo detto gruppo moltiplicativo (mod p) o anche Z p *. Nel caso di Z p il campo finito è costituito dal gruppo di addizione, definito dall addizione (mod p), e dal gruppo moltiplicativo Z p *. Un gruppo può contenere un sottogruppo, costituito da una parte degli elementi del gruppo completo: se si applica l operazione del gruppo a due elementi del sottogruppo, si ottiene ancora un elemento del sottogruppo. I sottogruppi sono molto utilizzati per velocizzare alcune operazioni di crittografia. Per esaurire completamente un gruppo moltiplicativo è necessario definire anche l operazione inversa alla moltiplicazione: la divisione (mod p) può essere definita come segue: c = a/b (mod p). La formula è equivalente a dire che esiste un numero c, (mod p), tale che c b = a (mod p). Non si può dividere per 0 ma l operazione è sempre definita se b 0. Scelto un g qualsiasi nel gruppo Z p * consideriamo i numeri: 1, g, g 2, g 3 tutti (mod p) : questa è una serie infinita di numeri ma Z p * contiene un numero finito di elementi, ad un certo punto gli elementi cominceranno a ripetersi. Supponiamo che accada quando g i = g j con i < j. Dividendo per g i otteniamo 1 = g j-i. Ne consegue che esiste un numero q = j-i tale che g q = 1 (mod p). Continuando a moltiplicare i vari g, è possibile ottenere tutti gli elementi 1, g, g 2, g 3,, g q-1, per questo motivo g prende il nome di generatore del gruppo: il numero totale di elementi che possono essere scritti come potenza di g è esattamente q ovvero l ordine di g. [2]

Definizione 3: (Campo, Campo finito). In matematica si definisce campo un insieme non vuoto K, caratterizzato da due operazioni binarie denominate somma, (K, +), e prodotto (K, ). Le due operazioni godono della proprietà commutativa, della distributiva rispetto al prodotto e dell'esistenza dell'elemento neutro (0 per la somma e 1 per il prodotto). Se l'insieme K ha un numero finito di elementi il campo si dice finito. In particolare il campo finito dei numeri modulo un numero primo p, si indica con campo (mod p) o semplicemente (mod p) o anche con Z/Z p. L'insieme degli elementi di un campo finito (mod p) contiene gli elementi 0, 1, (p-1). Ricordiamo che si può sempre aggiungere o sottrarre qualsiasi elemento multiplo di p senza cambiarne il risultato e tutti i risultati sono sempre compresi nell intervallo di valori 0, 1, (p-1). [3] Definizione 4: (Piano proiettivo). Dato il piano affine A = K 2, il piano proiettivo su K associato a V è l'insieme P(K), i cui elementi, chiamati punti di P(K), sono i sottospazi vettoriali di dimensione uno di K, cioè le rette vettoriali di K. Uno spazio proiettivo è detto reale se K = R, complesso se K = C. Ogni v ϵ V genera il sottospazio di V di dimensione uno <v> = {λv : λ ϵ V}. Quindi: P(K) = {P = <v> : v 0, v ϵ K 3 } = {<v> = λv : λ ϵ K}. Il generico punto P sarà definito come: P = [X P, Y P ; T P ] = [λx P, λy P ; λt P ]. Scegliamo la coordinata T e discriminiamo i punti per cui T P 0 (allora P = [x, y; 1], le coordinate non sono omogenee ed i punti si dicono proprii) e i punti per cui T P = 0 (allora P = [x, y; 0], le coordinate sono omogenee ed i punti si dicono impropri o all'infinito). 2. Crittografia a Chiave Pubblica Supponiamo di avere dieci persone che vogliono comunicare tra loro in maniera sicura, per fare ciò si incontrano scambiandosi una chiave segreta. Come succede con tutte le chiavi, è necessario un continuo aggiornamento delle stesse che porta dunque a successivi incontri. Si ha che per un gruppo di n persone servono n(n-1)/2 chiavi, quindi nel nostro caso sono necessarie ben 45 chiavi. All aumentare delle persone coinvolte nello scambio di informazioni la gestione delle chiavi diventa rapidamente ingestibile. La crittografia convenzionale è basata sull'uso di una chiave segreta, il problema principale di questo tipo di protocollo è quello di trovare un canale sicuro per trasmettere suddetta chiave. Per ovviare a questo problema si pensò dunque di usare non una sola chiave ma due, una segreta, per decifrare, e una pubblica, per cifrare. Lo scenario tipico dunque non prevede più la presenza di due sole parti bensì, per esempio, una rete di utenti. Data la asimmetria, dovuta all'uso di due chiavi diverse, questo tipo di cifrari sono detti asimmettrici. Le origini della crittografia a chiave pubblica si fanno risalire al 1976 con la pubblicazione dell articolo New Directions in Cryptography ad opera di Whitfield Diffie e Martin Hellman. La sicurezza della crittografia asimmetrica è garantita da delle funzioni one-way (a senso unico) con trapdoor (passaggio segreto), facili da calcolare ma difficili da invertire dove per difficili da invertire si intende operazioni che computazionalmente risultano essere proibitive. L'informazione trapdoor (vale a dire quella caratteristica aggiuntiva che aiuta nell'operazione di inversione della funzione prescelta) non deve però essere deducibile dalla descrizione della funzione altrimenti non sarebbe più one-way. [4] La Crittografia è la maniera per due persone, Alice (A) e Bob (B), di comunicare segretamente usando un canale non sicuro senza che un avversario, Oscar (O), capisca cosa sia stato detto tra i due. Definizione 5: (Criptosistema). Un Criptosistema è costituito da: un insieme finito P di possibili testi in chiaro ( Plaintext ); un insieme finito C di possibili testi crittografati ( Ciphertext ); un insieme finito K di possibili chiavi k = (k E, k D ) consistenti, in realtà come già detto, nella coppia chiave pubblica, chiave privata ; tali che per ogni k ϵ K, esiste una funzione regola per cifrare e k ϵ E e una corrispondente regola per decifrare d k appartenente a D. Ognuna delle e k : Pζ C e d k : C P sono funzioni tali che d k (e k (x)) = x per ogni testo in chiaro x appartenente a P. In un criptosistema ci sono quindi due chiavi. La chiave pubblica, che è pubblicata in una directory, definisce la e k e consente la cifratura, e la chiave

privata che è tenuta segreta, definisce la d k e permette di decifrare il messaggio [5]. 3. Problema del Logaritmo Discreto (DLP), Protocollo Diffie-Hellman (DH) e Algoritmo di El Gamal Come detto precedentemente, i padri fondatori della crittografia a chiave pubblica, Diffie ed Hellman, proposero il loro schema di lavoro, conosciuto come Schema Diffie-Hellman, per ovviare al problema inerente lo scambio della chiave segreta per poi garantire future comunicazioni. Definizione 6: (Discrete Logarithm problem - DLP). Dato un gruppo Z p, un α ϵ Z p e β= α b, calcolare b. Il problema del logaritmo discreto (DLP) è uno dei problemi matematici più noti all'interno della Teoria dei Numeri, è un problema per il quale non si conoscono delle soluzioni efficienti e pertanto uno dei migliori candidati in ambito crittografico. L'esponente b, dato ad α per ottenere β, è detto logaritmo discreto di β in base α rispetto al modulo p. Il problema del calcolo del logaritmo discreto è un esempio di funzione one-way inversa utilizzata per i protocolli asimmetrici (come ad esempio il celebre algoritmo RSA). Esistono infatti degli algoritmi efficienti per il calcolo di qualsiasi potenza ma non per l'operazione inversa. Se scegliamo un numero primo p sufficientemente grande, infatti, risulta un'operazione computazionalmente complicata, ne consegue che con la dovuta attenzione riguardo il numero p, si ottengono tempi polinomiali. Esempi di algoritmi con tempo polinomiale per risolvere questo tipo di problema sono l'algoritmo di Pohlig - Hellman o l'algoritmo di Shanks. Dalla complessità computazionale molto elevata deriva un certo grado di sicurezza dato dal fatto che la risoluzione di tale quesito va oltre le possibilità di un crittoanalista reale [6]. Algoritmo 1: (Diffie-Hellman key exchange Protocollo DH). 1. (Setup) A e B scelgono pubblicamente il campo Z p e un elemento ζ ϵ Z p. 2. A genera un intero casuale a ϵ Z p-1, chiave privata di A, calcola α = ζ a (mod p) in Z p e trasmette α a B attraverso un canale di comunicazione pubblico. 3. B genera un intero casuale b ϵ Z p-1, chiave privata di B, calcola β = ζ b (mod p) in Z p e trasmette β ad A attraverso lo stesso canale. 4. A riceve γ e calcola β = k A = β a = (ζ b ) a. 5. B riceve α e calcola k = k B = α b = (ζ a ) b. Adesso sia A che B conoscono l'elemento k = ζ ab, chiave segreta, che può essere usato come chiave private per comunicazioni future. Anche se un avversario O dovesse in qualche modo venire a conoscenza dei valori Z p, ζ, α = ζ a (mod p) e β = ζ b (mod p) e volesse ricavare la chiave k, si troverebbe contro la funzione DH cioè k = DH(ζ a (mod p), ζ b (mod p)) = ζ ab (mod p). Il problema che l'avversario deve risolvere mediante la funzione DH, detta Funzione Diffie-Hellman, è noto proprio come il Problema di Diffie-Hellman o anche DHP. Malgrado l'alto grado di sicurezza di una crittografia basata sul DHP, vi è un particolare tipo di attacco per violare questo tipo di protocollo: il cosiddetto Man in the middle o anche MITM. Questo tipo di attacco consiste nella capacità dell'attaccante di intromettersi tra i due interlocutori, assumendo con uno l'identità dell'altro, e di leggere i messaggi scambiati ed eventualmente modificarne alcuni ingannando i diretti interessati, prima di inoltrarli al vero destinatario. Nel caso della crittografia a chiave pubblica, se Alice chiede a Bob di inviarle la sua chiave pubblica ed Eve, una possibile attaccante, è capace di intercettarla allora questa può inviare all'ignara Alice una falsa chiave pubblica, la sua, della quale possiede la relativa chiave privata. A questo punto Alice cifra i suoi messaggi rivolti a Bob con la chiave di Eve che li decifra usando la sua chiave privata e li cifra nuovamente, magari alterandoli, usando la chiave pubblica di Bob che non sospetta nulla. Un modo per evitare la possibilità di un attacco di tipo MITM è quello di firmare le chiavi. [7]

Algoritmo 2: (El Gamal). 1. (Setup) Sono scelti un gruppo G qualsiasi e un elemento α ϵ G. Ogni utente prende un intero casuale (la chiave privata) l ϵ {0, 1,..., G -1} e rende pubblico β = α l (la chiave pubblica). Supponiamo che i messaggi siano elementi di G e che l'utente A desideri inviare un messaggio, m, all'utente B. 2. A genera un intero casuale k ϵ {0, 1,..., G -1} e calcola α k. 3. A consulta la chiave pubblica di B, β = α l, e calcola (β) k dopo mβ k. 4. A invia a B la coppia di elementi del gruppo (α k, mβ k ). 5. B calcola (m β k )((α k ) l ) -1 = (mα lk )(α lk ) -1 = m e recupera il messaggio. L'eventuale avversario O, ascoltando il canale pubblico, viene a conoscenza di α, α k, β e mβ k. Se risolvere il logaritmo discreto fosse possibile, si darebbe modo all'attaccante di trovare l e quindi sarebbe possibile usare lo stesso procedimento che effettua B per decifrare m [8]. Esempio 1: (Cifratura e decifratura con il gruppo G = Z * 11 = {1, 2, 3,..., 10} = <2>). 4. Curve Ellittiche Il primo uso delle curve ellittiche in Crittografia risale al 1985 ad opera di Victor Miller e Neal Koblitz, l'idea non era quella di creare dei nuovi criptosistemi più efficienti bensì di adattarne dei vecchi già esistenti applicando quanto visto sul DLP, invece che sul gruppo ciclico Z p, sul gruppo dei punti di una curva ellittica definita su un campo finito. Questo approccio consente di poter variare più gruppi al variare dei coefficienti della curva e, inoltre, risulta molto più efficiente. Ai fini di questa tesi, è sufficiente dare, per una curva ellittica, la seguente definizione, alla quale comunque ci si può sempre riportare anche dando definizioni più generali. Definizione 7: (Curva ellittica). Una curva ellittica ε, su un campo K, che denoteremo ε/k, o semplicemente con ε, è l'insieme dei punti proprii (x, y) ϵ K 2 che soddisfano l'equazione y 2 = x 3 +ax+b, con a, b appartenenti a K costanti tali che 4a 3 +27b 2 0, insieme al punto all'infinito ϴ = (0, 1; 0) della curva ε del piano proiettivo. Se K è finito, allora ε ha un numero finito di punti ε. 1. (Setup) Abbiamo G = 10 e α = 2. L'utente B sceglie casualmente l = 5 e calcola α l = 2 5 = 10 (mod 11). La chiave pubblica sarà composta dalla terna (n, α, α l ) = (10, 2, 10) e la chiave privata sarà l = 5. 2. L'utente A sceglie k = 7 e calcola α k = 2 7 = 7 (mod 11). 3. L'utente A considera α l = 10 e cifra il messaggio m = 3, calcola m(α l ) k = 3 10 7 = 8. 4. L'utente A invia la coppia (α k, mαl k ) = (7,8). 5. L'utente B, l'unico che conosce la chiave privata l, calcola mα lk (((α k ) l ) -1 = 8(7 5 ) -1 = 3. L'utente B riceve correttamente il messaggio, m = 3, inviato da A. [9] I punti di una curva ellittica si possono sommare mediante la regola corda-tangente, che consiste, in linea di massima, nel determinare il terzo punto d'intersezione R tra la retta per P e Q con la curva

stessa, e nel porre P + Q uguale al punto simmetrico di R rispetto all'asse x. Lo zero del gruppo è il punto all'infinito ϴ = (0, 1; 0), così l'opposto di un punto è il suo simmetrico rispetto all'asse x. In formule: siano P = (x P, y P ; 1) e Q = (x Q, y Q ; 1) due punti propri sulla curva y 2 = x 3 +ax +b. 1. Se x P = x Q allora y P = ± y Q. 1.1) Se y P + y Q = 0, allora P + Q = ϴ = (0, 1; 0). 1.2) Se y P = y Q 0, allora P = Q e P + Q = 2P = ({(3x P 2 +a) / 2y P } 2-2x P, -y P - (3x P 2 +a) {((3x P 2 +a) / 2y P ) 2-3x P } / 2y P ; 1). 2. Infine, se x P è diverso da x Q, sia m = (y P - y Q )/(x P - x Q ) il coefficiente angolare della retta passante per i punti P e Q. Allora (x P, y P ; 1) + (x Q, y Q ; 1) = (m 2 - x P - x Q, - y P - m(m 2-2 x P x Q ); 1). I crittosistemi basati su curve ellittiche sembrano offrire lo stesso livello di sicurezza di quelli basati su chiave pubblica con il vantaggio di avere delle chiavi molto più corte, permettendo dunque una maggiore velocità di encrypting e decrypting utilizzando però una minore quantità di ampiezza di banda. Nel mondo della crittografia non si suole usare le curve ellittiche sui reali, ma si restringe l'ordine del campo o a un numero primo dispari, quindi su Z p, oppure avente ordine una potenza di due. Non sembrano esserci molte differenze tra la sicurezza offerta nei due casi, la differenza sta dal punto di vista implementativo dato che le realizzazioni su potenze di 2 sono più veloci ed economiche. Siano date una curva ellittica ε su un campo finito K e un punto B ϵ ε, il problema del logaritmo discreto applicato alla curva ε in base B (o anche ECDLP) equivale a trovare, dato un punto P ϵ ε, se esiste, x ϵ K tale che xb = P. Se ci manteniamo su dei campi finiti allora è possibile calcolare il logaritmo discreto con tempi subesponenziali mediante l'algoritmo dell'index calculus. Questo è reso possibile dal fatto che un campo finito gode di due operazioni, somma e prodotto, mentre le curve ellittiche sono solamente additive pertanto non consentono l'uso di questo tipo di algoritmo rendendo i calcoli necessari molto laboriosi. Anche questa volta, la non esistenza di algoritmi efficienti per il calcolo del logaritmo discreto ci assicura un notevole grado di sicurezza crittografica. Così come il protocollo DH poteva essere violato tramite un attacco di tipo Man in the middle, così anche il protocollo EC ha dei punti deboli; per questo motivo non tutte le curve ellittiche sono delle candidate eccellenti per i nostri scopi. Vediamo ora come funziona il protocollo: Alice e Bob scelgono pubblicamente una curva ellittica ε su un campo finito K e un punto Q ϵ ε. Alice sceglie un intero casuale k A e calcola il punto k A Q inviandolo poi a Bob. Bob allora sceglie un intero casuale k B e calcola quindi il punto k B Q, dunque lo invia ad Alice. A questo punto Alice e Bob condividono la chiave P = k A k B Q. Se un attaccante Eve dovesse intercettare la comunicazione tra i due allora dovrebbe determinare P conoscendo Q, k A e k B. Questo è noto come problema Diffie Hellman applicato alle Curve Ellittiche. Un altro esempio di algoritmo basato sull'uso della crittografia a Curve Ellittiche è l'ecdsa (Elliptic Curve Digital Signature Algorithm), algoritmo di firma che viene utilizzato per autenticare un dispositivo oppure un messaggio inviato dal dispositivo. Ipotizziamo uno scambio di messaggi tra due dispostivi A e B, il dispositivo A invia il messaggio e la firma, creata mediante la chiave privata di A. Per verificare la firma di A, il dispositivo B deve conoscere la chiave pubblica di A ma dato che la conosce può facilmente verificare se il messaggio ricevuto è stato inviato proprio da A. Affinché questo algoritmo sia realizzabile, A e B devono decidere a priori su una curva ellittica usata come dominio dei parametri del processo. Algoritmo 3: (El Gamal per le Curve Ellittiche). L'algoritmo di El Gamal applicato alle Curve ellittiche fondamentalmente è lo stesso applicato precedentemente, l'unica differenza sta nel fatto che questa volta consideriamo il gruppo additivamente. 1. (Setup) Scegliamo una curva ellittica ε su un campo finito Z p, insieme ad un punto P sulla curva. Il punto P genera un sottogruppo ciclico G = {ϴ, P, 2P,..., (n-1)p} di ordine n. Ogni utente sceglie un intero casuale l appartenente a {0, 1,..., n-1} come chiave privata e rende pubblico il prodotto lp come chiave pubblica. Supponiamo che i messaggi siano elementi di G e che l'utente A desideri inviare un messaggio, m, all'utente B.

2. A genera un intero casuale k appartenente a {0, 1,..., n-1} e calcola kp. 3. A considera la chiave pubblica di B, lp, e successivamente la somma m+klp. 4. A invia a B la coppia di elementi del gruppo (kp, m+klp). 5. B calcola (m+klp) -l(kp) = m e recupera il messaggio. Ancora una volta, essere capaci di trovare l da P ed lp (risolvendo dunque il problema del logaritmo discreto applicato alle curve ellittiche) ci consentirebbe di crackare questo criptosistema [11]. 5. Pairing Bilineari Come abbiamo visto finora, la sicurezza del protocollo di scambio delle chiavi di Diffie-Hellman e quella di El Gamal è basata sulla difficoltà del problema del logaritmo discreto in un gruppo che può essere il gruppo moltiplicativo di un campo finito o, più efficientemente, il sottogruppo generato da un punto di una curva ellittica. Se però è possibile definire una funzione (bi)-lineare (pairing) tra punti di una curva ellittica e elementi del campo finito, tutto il vantaggio del considerare l'uso in Crittografia delle curve ellittiche è perso. Il campo della crittografia basato sui Pairing è relativamente recente. Definizione 8: (Pairing bilineare). Siano G 1 e G 2 due gruppi di ordine p (per qualche numero primo p sufficientemente grande). Un Pairing bilineare è una mappa bilineare e : G 1 G 1 G 2 tale cioè che e(ap, bq) = e(p,q) ab, per ogni P, Q ϵ G 1 e a, b Z Un Pairing bilineare si dice ammissibile se soddisfa le seguenti proprietà: Non-degenericità: P ϵ G 1 Q ϵ G 1 : e(p, Q) 1. Computazionabilità: esiste un algoritmo efficiente per calcolare e(p, Q) per qualche P, Q ϵ G 1 [12]. Osserviamo che se è possibile riconoscere un pairing ammissibile quando G 1 è una curva ellittica, allora è altresì possibile ridurre il calcolo del logaritmo discreto di P in base B mediante la relazione 1 = e(p, P) = e(xb, P) = e(b, P) x, ponendo e(b, P) = y e risolvendo y x = 1 nel campo finito. Il Pairing ammissibile più comunemente usato è il Pairing di Weil. Per introdurlo occorre definire alcuni concetti: Definizione 9: (Divisore, Ordine del Divisore, Grado del Divisore, Supporto del Divisore, Divisore principale). Se ε/k è una curva non singolare, allora un divisore di ε è una combinazione lineare di punti su ε. Se P j denota i punti su ε, allora un divisore è scritto come D = n j P j, dove gli n j sono interi. Se P è un punto e D è un divisore, allora l'ordine v P (D) è il coefficiente di P in D (è pari a 0 se P non è presente in D). Il grado del divisore D è dato da deg(d):= n j. L'insieme di tutti i punti P con coefficienti diversi da zero è chiamato supporto del divisore ed è definito come supp(d) = {P ϵ ε n j 0}. Se φ = f/g è una funzione razionale omogenea di grado n, allora il numero n degli zeri di φ è uguale al numero dei poli di φ. Il divisore di grado zero il cui supporto è determinato dagli n zeri di φ (quindi di f) con la loro molteplicità e con segno positivo e dagli n poli di φ (quindi gli zeri di g) con la loro molteplicità e con segno negativo si dice divisore principale di φ e si denota con div(φ). Due divisori D 1 e D 2 si dicono linearmente equivalenti e si scrive D 1 ~ D 2 se la loro differenza D 1 - D 2 è un divisore principale. [13] Definizione 10: (Funzione di Weil). Se ε è una curva ellittica, D un divisore su ε e f è una funzione razionale definita sulla curva e tale che supp(d) supp(div(f)) = 0, allora definiamo f(d):= P ϵ ε f(p) vp(d). Da notare che se f ha grado 0 allora f(d) dipende solamente da div(f), pertanto se moltiplichiamo f per una costante b, moltiplichiamo f(d) per P ϵ ε b vp(d) = 1. [14]

Definizione 11: (Weil Pairing). Sia n > 1 un intero e siano D 1, D 2 divisori su una curva ellittica ε, con supporti disgiunti, tali che nd 1, nd 2 ~ 0 (cioè sono entrambi divisori principali). Questo significa che ci sono funzioni φ 1 e φ 2 tali che nd i = div(φ i ) per i =1, 2. Definiamo il Weil Pairing come e n (D 1, D 2 ) = φ 1 (D 2 ) / φ 2 (D 1 ). Esempio 2: (Calcolo del Weil Pairing). Sia data la curva ε/f 7 : y 2 = x 3 +2, calcolare e 3 ((0, 3; 1), (5, 1; 1)). Siano: D (0,3;1) = [(0, 3; 1)]-[(0, 1; 0)] D (5,1;1) = [(5, 1; 1)+(6, 1; 1)] [(6, 1; 1)] = [(3, 6; 1)] [(6, 1; 1)] Le funzioni di cui sono i divisori principali sono: div((y 3t)/t) = 3D (0,3;1) div ((4x - y + t)/(5x - y - t)) = 3D (5,1;1) ne segue che: f (0,3;1) = (y - 3t)/t f (5,1;1) = (4x - y + t)/(5x - y - t) quindi: f (0,3;1) D (5,1;1) = f (0,3;1) (3, 6; 1)/f (0,3;1) (6, 1; 1) = (6-3)/(1-3) = 2 (mod 7) f (5,1;1) D (0,3;1) = f (5,1;1) (0, 3; 1)/f (5,1;1) ((0, 1; 0)) = 4/1 = 4 (mod 7) Infine: e 3 ((0, 3; 1), (5, 1; 1)) = 4/2 = 2 (mod 7) [15] Da notare che per alcune curve il pairing di Weil vale sempre 1, cioè è degenere. Ad esempio: sia p un un numero primo tale che p = 2 (mod 3) e sia q > 3 qualche fattore primo di (p+1). Sia la curva ellittica ε definita dall'equazione y 2 = x 3 +1 su Z p. Per ogni punto Q, R ϵ ε(z p ) vale e q (Q, R) = 1. In altre parole, il Weil Pairing è degenere su ε(z p ) Elenchiamo ora alcune proprietà del Weil Pairing su questa curva particolare: Poiché x 3 +1 è una permutazione su Z p ne consegue che il gruppo ε(z p ) contiene p+1 punti (compreso il punto all'infinito ϴ). Sia P ε(z p ) un punto di ordine q e sia G 1 il sottogruppo di punti generato da P. Per ogni y 0 ϵ Z p esiste un unico punto di coordinate (x 0, y 0 ) su ε(z p ). Quindi, se il punto (x, y) diverso da zero è generico su ε(z p ), allora y è uniformemente distribuita su Z p. Sia ζ un simbolo per cui valga ζ 2 + ζ + 1 = 0 e sia K = {a + ζ b : a,b Z p } il campo finito con p 2 elementi. La mappa ϕ(x, y) = (ζx, y) risulta un automorfismo del gruppo di punti sulla curva ε/k. È da notare che per ogni punto Q = (x, y) ε(z p ) abbiamo che ϕ(q) ε(k), ma ϕ(q) ε(z p ). Pertanto Q ε(z p ) è linearmente indipendente da ϕ(q) ε(k). Poiché i punti Q G 1 e ϕ(q) sono linearmente indipendenti, essi generano un gruppo isomorfo a Z q Z q. Chiamiamo questo gruppo di punti ε[q]. [17] Sia G 2 il sottogruppo di K di ordine q. Il Weil Pairing sulla curva ε(k) è una mappa e : ε[q] ε[q] G 2 tale che per ogni punto Q, R ϵ ε(z p ) vale e(q, R) = 1. Per avere una mappa non degenere è necessario definire il Weil Pairing modificato. Definizione 12: (Weil Pairing Modificato). Il Weil Pairing modificato è una mappa ê : G 1 G 1 G 2 tale che: ê(p, Q) = e(p, ϕ(q)). Il Weil Pairing modificato soddisfa le seguenti proprietà: Bilinearità: P, Q ϵ G 1 e a,b ϵ Z abbiamo che ê(ap, bq) = ê(p, Q) ab. Non-degenericità: Se P è un generatore di G 1 allora ê(p, P)ϵ K * è un generatore di G 2. Computabilità: Dati P, Q ϵ G 1 esiste un efficiente algoritmo, per esempio l'algoritmo di Miller, per calcolare ê(p, Q) ϵ G 2 [18].

Algoritmo 4: (El Gamal per il Weil Pairing). L'algoritmo di El Gamal applicato al Weil Pairing lavora come segue: (Setup) Sia G un generatore dei parametri per il BDH. Assegnato un parametro di sicurezza k ϵ Z +, l'algoritmo procede nel seguente modo: 1. Generiamo tramite G un numero primo q, due gruppi G 1, G 2, di ordine q e un'ammissibile mappa bilineare ê : G 1 G 1 G 2. Scegliamo ora casualmente un punto P generatore di G 1. 2. Scegliamo casualmente un s ϵ Z * q e fissiamo Q = sp. 3. Scegliamo una funziona hash crittografica H tale che H : G 2 {0, 1} n. Lo spazio dei messaggi M = {0,1} n. Lo spazio dei testi cifrati C = G 1 X {0, 1} n. I parametri del sistema pertanto sono params = <q, G 1, G 2, ê, n, P, Q, H> [19]. Algoritmo 5: (Miller). L'Algoritmo di Miller per il calcolo del Pairing di Weil si applica a curve ellittiche supersingolari, definite su Z P con p > 3 e quindi con l'ordine della curva pari a ord(ε(z p )) = 1 (mod p). Vediamo ora come funziona detto algoritmo: In input abbiamo due punti P, Q appartenente a ε[q], in output avremo e(p,q). 1. Si selezionano casualmente due punti T ed U della curva ε, tali che P+T, T, Q+U, U siano punti distinti. A questo punto, siano D P = (P+t)-T e D Q = (Q+U)-U equivalenti rispettivamente a (P)-(O) e (Q)-(O). 2. Si usa un algoritmo di valutazione per calcolare f P (Q+U), f P (U), f Q (P+T) e f Q (T) con div(f P ) = qd P e div(f Q ) = qd Q. 3. Si calcola ora e(p,q) = f P (D Q )/f Q (D P ) = (f P (D+U)f Q (U))/(f Q (P+T)f P (U)). La parte cruciale dell'algoritmo di Miller è il passo 2, per S = (x S, y S ) f P (S) produce f P tale che div(f P ) = qd P e calcola f P (x S, y S ). Dato che Dp = (P+T)-(T), per ogni k intero positivo esiste una funzione razionale f k tale che: div(f k ) = k(p+t)-k(t)-k(p)+(o). Se k = q allora : div(f Q ) = q(p+t)-q(t)-q(p)+(o) e f P = f Q. 6. Il progetto OpenSSL Il progetto OpenSSL è un'implementazione open source dei protocolli SSL v2/v3 (Secure Sockets Layers) e TLS v1 (Transport Layer Security), l'idea alla base di tale progetto era quella di creare un toolkit completo per effettuare operazioni di cifratura dei dati, per questo motivo l'intera piattaforma è stata sviluppata in linguaggio C così da essere portabile sui sistemi operativi più diffusi, inizialmente solo quelli di tipo unix-like e successivamente anche per Microsoft Windows. Il pacchetto supporta diversi algoritmi crittografici. Tra questi ricordiamo: Cifrari: Blowfish, Camellia, Cast, DES, RC2, RC4, RC5, IDEA, AES; Funzioni Hash Crittografiche: MD5, MD2, SHA, MDC-2; Crittografia a Chiave Pubblica: RSA, DSA, Scambio di chiavi Diffie-Hellman Funzioni di Autenticazione dei Messaggi: HMAC, MD2, MD4, MD5, MDC2, RIPEMD, SHA Certificati: X.509 [20] Il protocollo SSL/TLS nasce con lo scopo di garantire la sicurezza dello scambio di informazioni su Internet, consentendo alle applicazioni client/server di comunicare garantendo la sicurezza del collegamento mediante tre condizioni fondamentali: Affidabilità: per sua costituzione, il livello di trasporto include un controllo sull'integrità del messaggio basato su un apposito codice di autenticazione del messaggio (MAC) che utilizza funzioni hash sicure così da evitare che le informazioni scambiate tra client e server siano alterate durante la trasmissione delle stesse; Privatezza del collegamento: per far sì che il canale usato da due o più utenti per trasmettere i dati sia sicuro, si utilizzano degli

algoritmi crittografici a chiave simmetrica per cifrare i dati; Autenticazione: per autenticare l'identità degli utenti che usano il canale di trasmissione, è possibile usare la crittografia a chiave pubblica così che il client possa comunicare con il server corretto evitando che un utente malevolo si interponga nella comunicazione. In aggiunta all'uso della crittografia a chiave pubblica è prevista anche la certificazione sia del client che del server. OpenSSL è composto da un insieme di funzioni di cifratura e da utilities che permettono di usarle, in particolare porremo la nostra attenzione sul protocollo SSL che permette la mutua autenticazione tra un client e un server e la conseguente creazione di una connessione in primo luogo autenticata e successivamente crittografata. Il protocollo crittografico utilizzato nell'esempio è lo scambio di chiavi di Diffie-Hellman. L'obiettivo è quindi quello di creare un canale sicuro per trasferire informazioni da un client ad un server: il server genera e controlla i parametri condivisi con il client, entrambe le parti generano una coppia di chiavi, una pubblica ed una privata e si scambiano il rispettivo parametro pubblico. A questo punto, client e server generano autonomamente la chiave simmetrica condivisa. Per fare ciò è stato sufficiente avvalersi delle api EVP e delle numerose funzioni presenti in OpenSSL, incluse nelle librerie <openssl/dh.h>, usata per gestire il protocollo DH, e <openssl/bn.h> relativa alle funzioni che si occupano dei numeri primi sufficientemente grandi necessari per far sì che il protocollo sia sicuro. In particolare il contesto EVP è una struttura dati che ci consente di implementare il cifrario a chiave simmetrica. Come prima cosa quindi, è necessario allocare un contesto EVP : EVP_CIPHER_CTX*ctx; ctx = malloc(sizeof(evp_cipher_ctx)); Successivamente, si deve inizializzare settando la dimensione che deve avere la chiave e il blocco: EVP_CIPHER_CTX_init(ctx); EVP_CIPHER_CTX_set_key_length(ctx, key_size); Per deallocare il contesto invece: EVP_CIPHER_CTX_cleanup(ctx); free(ctx); Per dare vita ad un canale di comunicazione sicuro Diffie-Hellman è necessario che il server generi i parametri DH e li invii al client. È quindi necessario utilizzare un'altra struttura dati, la struttura DH, che contienga al suo interno i parametri necessari per applicare il protocollo (il numero primo p, il generatore g, la chiave privata priv_key e la chiave pubblica pub_key). Per generare una coppia di chiavi da utilizzare come parametri si usa la funzione DH_generate_key(dh) e si invia la pub_key al client. A questo punto il client, mediante la funzione DH_new() crea una struttura dati DH per accogliere i parametri generati dal server, successivamente viene generata un'altra coppia di chiavi e invia la pub_key al server. A questo punto, client e server costruiscono la chiave simmetrica Diffie-Hellman, il client cifra un file con la chiave simmetrica e lo invia al server che lo decifra. 7. Bibliografia [1] N. Ferguson, B. Schneier and T. Kohno, Il manuale della crittografia, Apogeo, pp.153. [2] N. Ferguson, B. Schneier and T. Kohno, Il manuale della crittografia, Apogeo, pp.154-155. [3] N. Ferguson, B. Schneier and T. Kohno, Il manuale della crittografia, Apogeo, pp.154-155. [4] N. Ferguson, B. Schneier and T. Kohno, Il manuale della crittografia, Apogeo, pp.165-166. [5] M. Leslie, Elliptic Curve Cryptography, pp.1 [6] A. Nicolosi, Sicurezza e applicazioni crittografiche della funzione Diffie-Hellman, Università degli Studi di Catania, pp.44-46 [7] M. Leslie, Elliptic Curve Cryptography, pp.2

[8] M. Leslie, Elliptic Curve Cryptography, pp.3 [9] M. Leslie, Elliptic Curve Cryptography, pp.4 [10] E. Bellini, La crittografia a curve ellittiche e applicazioni, Torino 2011, pp.4 [11] M. Leslie, Elliptic Curve Cryptography, pp.9 [12] D. Boneh, M. Franklin, Identity-Based Encryption from the Weil Pairing, Stanford University, pp.7 [13] D. Boneh, M. Franklin, Identity-Based Encryption from the Weil Pairing, Stanford University, pp. 28 [14] D. Boneh, M. Franklin, Identity-Based Encryption from the Weil Pairing, Stanford University, pp. 28 [15] R. Chen, The Weil Pairing, Computation of the Pairings, [16] V. Miller, The Weil Pairing, and its Efficient Calculation, Princeton 2004, pp 237 [17] D. Boneh, M. Franklin, Identity-Based Encryption from the Weil Pairing, Stanford University, pp. 19 [18] D. Boneh, M. Franklin, Identity-Based Encryption from the Weil Pairing, Stanford University, pp. 20 [19] D. Boneh, M. Franklin, Identity-Based Encryption from the Weil Pairing, Stanford University, pp. 23 [20] AA.VV., http://it.wikipedia.org/wiki/openssl [21] C. Ventre, Oblivious Transfer per la generazione di chiavi RSA: protocolli ed implementazione in OpenSSL, Università degli Studi di Salerno, pp.10