ElGamal: un protocollo di crittografia a chiave pubblica Elena Rocchi ALMA MATER STUDIORUM UNIVERSITA’ DI BOLOGNA Facoltà di Scienze Matematiche Fisiche e Naturali Corso di Laurea Magistrale in Scienze e Tecnologie Informatiche Sicurezza dei Sistemi Informatici
Sommario Crittografia asimmetrica Logaritmo discreto ElGamal: algoritmo di crittografia ElGamal: osservazioni ElGamal: firma digitale
Crittografia asimmetrica 1976: nascita crittografia asimmetrica o a chiave pubblica (Diffie - Hellman) Ogni utente del sistema crittografico possiede una coppia di chiavi (chiave pubblica usata in fase di codifica e chiave privata usata in fase di decodifica) La crittografia si dice asimmetrica poiché KE≠KD
Crittografia asimmetrica Qualunque utente può codificare messaggi verso gli altri utenti usando la loro chiave pubblica, solo il destinatario dei messaggi li può decodificare usando la sua chiave privata Le funzioni di codifica e decodifica dei messaggi sono note a tutti Necessità di utilizzare funzioni tali per cui Complessità computazionale(codifica)<<Complessità computazionale(decodifica) (one-way) Problema decodifica computazionalmente intrattabile, a meno che non si possiedano informazioni aggiuntive (trap door)
Aritmetica modulare Aritmetica dei numeri interi in cui si opera con un insieme limitato di numeri È detta anche aritmetica dell’orologio, poiché i numeri si ripetono ciclicamente ogni volta che raggiungono i multipli di un numero n detto modulo Un'aritmetica finita modulo n si basa sull'insieme {0,1,2...n-1} (possibili resti di una divisione per n) Esempio: aritmetica modulo 5 20 mod 5=1 21 mod 5=2 22 mod 5=4 23 mod 5=3 24 mod 5=1 25 mod 5=2 . . .
Notazione utilizzata Z = {. . . , -3, -2, -1, 0, 1, 2, 3, . . .} numeri interi Zn = {0, 1, 2, . . ., n-1} numeri interi modulo n Zn*= insieme numeri interi primi con n compresi tra 1 e n-1 Zn* = {1, . . ., n-1} se n è primo (gruppo moltiplicativo)
Notazione utilizzata g generatore dell’insieme Zn* se Zn* = {1, g, g2, . ., g(n-2)} = {gi mod n | i ∈ Zn-1} ∀ β ∈ Zn* ∃ b ∈ Zn-1 | β = gb mod n Zn* è detto gruppo moltiplicativo ciclico Ricalcando la notazione relativa al campo dei numeri reali . . .
Logaritmo discreto . . . definiamo l’esponente b da assegnare a g per ottenere β come il logaritmo discreto di β in base g, ovvero b = logg β mod n
Se g è generatore di Zn* -> logaritmo discreto sempre definito Esempio: aritmetica modulo n = 7 g = 2 Z7* = {20, 21, 22, 23, 24, 25} = {1, 2, 4, 1, 2, 4} (mod 7) log2 4 può valere 2 ma anche 5 log2 3, log2 5, log2 6 non sono definiti . . . . . . g = 2 non è un generatore di Z7* Se g è generatore di Zn* -> logaritmo discreto sempre definito
Alcuni problemi notevoli in crittografia
Logaritmo discreto Assunzione del logaritmo discreto: il problema del calcolo del logaritmo discreto è intrattabile sono noti algoritmi generici esponenziali e algoritmi specifici polinomiali che funzionano solo se i dati del problema soddisfano determinate condizioni aggiuntive esistono metodi sofisticati, nessuno dei quali ha tempo di esecuzione polinomiale index calculus method collision search method
Logaritmo discreto non è stato dimostrato nessun lower bound esponenziale per il problema generico si ritiene che la complessità computazionale del calcolo del logaritmo discreto sia dello stesso ordine di una fattorizzazione (manca la dimostrazione!) si ritiene che l’ipotesi di intrattabilità del problema del logaritmo discreto sia più ‘forte’ di quella del problema della fattorizzazione
Logaritmo discreto Mentre calcolare l’esponenziale discreto è relativamente semplice, il calcolo del logaritmo discreto rappresenta un problema computazionalmente intrattabile (meccanismo one-way) . . . . . . a meno che non si possiedano informazioni aggiuntive (trap door)
ElGamal: introduzione CRYPTO 1984: il ricercatore egiziano Taher ElGamal presenta un articolo intitolato “A Public Key Cryptosystem and a Signature Scheme Based on Discrete Logarithms”
ElGamal: introduzione All’interno di questo articolo, vengono illustrati i dettagli di un nuovo algoritmo di crittografia appartiene alla famiglia degli algoritmi di crittografia a chiave pubblica basa la sua sicurezza sull’intrattabilità computazionale del calcolo dei logaritmi discreti si può considerare come una variante dell’algoritmo Diffie-Hellman molto utilizzato attualmente (le ultime versioni di PGP ne fanno utilizzo)
ElGamal: le operazioni principali Generazione dei parametri di sistema e delle chiavi Codifica Decodifica
Chiave pubblica (n,g,gb mod n) ElGamal: generazione dei parametri di sistema e delle chiavi Tutti gli utenti del sistema: scelgono di comune accordo un numero primo grande n e un generatore g dell’insieme Zn* Ogni utente: sceglie un numero casuale b, con 1 ≤ b ≤ n-2 calcola gb mod n Chiave pubblica (n,g,gb mod n) Chiave privata (b)
ElGamal: codifica Per codificare un messaggio M, il mittente deve: ottenere la chiave pubblica del destinatario (n,g,gb mod n) codificare M come un intero m in Zn (1 ≤ m ≤ n-1) scegliere un intero k in modo casuale, 1 ≤ k ≤ n-2 calcolare x = gk mod n calcolare y = m (gb)k mod n = m gkb mod n = mxb Ciò che viene spedito al destinatario è (x,y)
ElGamal: decodifica Per decodificare il messaggio criptato (x,y) il destinatario deve: calcolare, usando la sua chiave privata b, il numero xb = (gk)b mod n calcolare il valore x-b come x-bxb = 1 mod n ricavare m calcolando m=x-by mod n Infatti, abbiamo che x-by = x-bmxb = g-bk m (gb)k = =g-bk m gbk = m mod n = m
Chiave pubblica di Bob (11,6,7) Chiave privata di Bob (3) ElGamal: esempio Partner di comunicazione: Alice e Bob 1° fase: generazione dei parametri di sistema n = 11 g = 6 2° fase: generazione delle chiavi Alice e Bob creano individualmente la propria coppia di chiavi pubblica e privata; consideriamo la generazione delle chiavi da parte di Bob scelta di un numero b casuale, 1 ≤ b ≤ 9 (b = 3) calcolo gb mod n : 63 = 7 mod 11 Chiave pubblica di Bob (11,6,7) Chiave privata di Bob (3)
ElGamal: esempio 3° fase: comunicazione Alice vuole spedire a Bob un messaggio M ottiene da Bob la sua chiave pubblica (11,6,7) codifica M come un intero m, 1 ≤ m ≤ 10 (m = 8) sceglie un intero k in modo casuale, 1 ≤ k ≤ 9 (k = 2) calcola x = gk mod n : x = 62 = 3 mod 11 -> x = 3 calcola y = m (gb)k mod n : 8(7)2 = 7 mod 11 -> y = 7 spedisce a Bob la coppia (3,7)
ElGamal: esempio Bob riceve il messaggio (3,7) calcola, usando la chiave privata b, il valore xb = 33 = 27 = 5 mod 11 calcola il valore x-b = 9 mod 11 (5 * 9 = 45 = 1 mod 11) ricava il messaggio originale (m=8) come m=x-by : 9 * 7 = 63 = 8 mod 11
ElGamal: osservazioni Affinché l’algoritmo funzioni, è necessario che: sia relativamente semplice e veloce calcolare gli esponenziali discreti gk e (gb)k notiamo che: i due esponenziali discreti devono essere calcolati per ogni messaggio inviato sono indipendenti dal messaggio possono essere calcolati in anticipo (“offline”) se necessario
chiave pubblica = (n,g,y) con y=gb mod n ElGamal: osservazioni sia computazionalmente difficile ottenere dalla chiave pubblica la chiave privata b (assunzione del logaritmo discreto) chiave pubblica = (n,g,y) con y=gb mod n Se così non fosse, l’avversario potrebbe calcolare . . . . . . b=logg(y) mod n (in tempo polinomiale) a partire dal messaggio (x,y) potrebbe calcolare . . . . . . xb = (gk)b mod n x-b come x-bxb = 1 mod n m=x-by mod n
ElGamal: osservazioni se si possiede un algoritmo per calcolare in tempo polinomiale il logaritmo discreto, ElGamal è violabile se si possiede un algoritmo per violare ElGamal in tempo polinomiale, non è detto che il logaritmo discreto possa essere calcolato in tempo polinomiale
ElGamal: osservazioni Assunzione del logaritmo discreto Nessun avversario può decodificare testo cifrato Vogliamo una sicurezza maggiore . . . . . . l’avversario non deve nemmeno comprendere la struttura del testo (sicurezza semantica) Sicurezza semantica -> scelto un messaggio M e ricevuto in risposta un messaggio M’ (dove M’ può essere la codifica di M o la codifica di un messaggio random), l’avversario non riesce a distinguere le due casistiche ElGamal è semanticamente sicuro
ElGamal: osservazioni ElGamal fa uso della casualità nel processo di codifica (randomized encryption) x = gk mod n y = m (gb)k mod n Scopo della randomized encryption: diminuire l’efficacia di attacchi chosen plaintext (dato che codificando uno stesso messaggio più volte si ottengono testi cifrati diversi) diminuire l’efficacia di attacchi di tipo statistico (modifica la distribuzione di probabilità dell’input)
ElGamal: osservazioni La presenza dell’intero casuale k comporta, però, la necessità di comporre un testo cifrato lungo il doppio rispetto al testo in chiaro (message expansion) bisogna trasmettere due interi di dimensioni paragonabili gk e m(gb)k generalmente, hanno bisogno di un numero di cifre simile (in termini di ordini di grandezza)
ElGamal: osservazioni Se k fosse fissato? Consideriamo i messaggi m1 ed m2 Siano (x,y1) e (x,y2) i relativi testi cifrati Abbiamo: Saremmo in grado di risalire a m2 conoscendo m1 (vulnerabilità ad attacchi known ciphertext)
ElGamal: osservazioni Se non usassimo il generatore g? L’avversario sarebbe facilitato perché: si riduce lo spazio di ricerca dei logaritmi (non tutti i numeri hanno il proprio logaritmo se la base non è un generatore) spazio dei messaggi x = gk mod n più piccolo (alcuni valori non comparirebbero mai) esisterebbero più chiavi private!! Ogni numero avrebbe più di un logaritmo
ElGamal: osservazioni Esempio: aritmetica modulo 7 20 = 1 21 = 2 22 = 4 23 = 1 24 = 2 25 = 4 log2 4 può valere 2 ma anche 5 log2 3, log2 5, log2 6 non sono definiti
Trade-off sicurezza e prestazioni ElGamal: osservazioni Come scegliere il numero primo n? Trade-off sicurezza e prestazioni Al crescere di n: è possibile mandare un numero maggiore di messaggi (dato che 1 ≤ m ≤ n-1) diventa più costoso trovare numeri primi grandi diventa più costoso trovare un generatore dell’insieme Zn* diventa più costoso calcolare gli esponenziali discreti (lentezza dell’algoritmo ElGamal)
ElGamal: osservazioni Necessità di utilizzare numeri primi molto grandi 512 bit sono considerati a rischio sono richiesti almeno 1024 bit
Firma digitale Proprietà firma digitale (come per la firma manuale): generabile da una sola persona e non falsificabile non riutilizzabile documento su cui è apposta non modificabile non ripudiabile da chi l’ha generata
ElGamal: firma digitale Schema della firma digitale Appendix-Randomized necessita del messaggio originale per verificare la validità della firma a parità di input, può generare sequenze di esecuzione ogni volta diverse utilizza una funzione hash così definita h : {0,1}* ->Zn
ElGamal: le operazioni principali Generazione delle chiavi (vedi algoritmo) Generazione della firma Verifica della firma
La coppia (r,s) è la firma di m ElGamal: generazione della firma Per apporre una firma sul documento M, il firmatario deve: applicare la funzione hash h ad M, per ottenere un valore m tale che 1 ≤ m ≤ n -1 scegliere un intero k in modo casuale 1 ≤ k ≤ n-2 primo con n-1 (MCD(k,n-1) = 1) calcolare r =gk mod n (abbiamo che 1 ≤ r ≤ n-1) calcolare s come soluzione dell’equazione br + ks = m mod n-1 (1) La coppia (r,s) è la firma di m
yr rs = gbr gks = gbr+ks = gm mod n ElGamal: verifica della firma Dopo avere ricevuto la firma (r,s), per verificarla, il destinatario deve: controllare che r rispetti il vincolo 1 ≤ r ≤ n-1, e in caso contrario rifiutare il messaggio data la chiave pubblica del firmatario (n,g,gb mod n) posto y = gb mod n, calcolare v1 = yr rs mod n ricordiamo che per (1) yr rs = gbr gks = gbr+ks = gm mod n eseguire la funzione hash sul messaggio M originale per calcolare v2 = gm mod n accettare la firma se v1 = v2
ElGamal: sicurezza dello schema di firma Se un avversario provasse a forgiare una firma? la scelta di k casuale e il calcolo di r = gk mod n non risultano problematici il calcolo di s come soluzione dell’equazione br + ks = m mod n-1 è problematico, poiché non si possiede b (chiave privata), difficile da calcolare (logaritmo discreto) l’avversario potrebbe scegliere un numero s casuale, con probabilità di successo pari a 1/n (tende a zero per n abbastanza grande)