• Non ci sono risultati.

Lezione del 28 maggio 2007 Sistema crittografico di ElGamal.

N/A
N/A
Protected

Academic year: 2021

Condividi "Lezione del 28 maggio 2007 Sistema crittografico di ElGamal."

Copied!
1
0
0

Testo completo

(1)

Lezione del 28 maggio 2007 Sistema crittografico di ElGamal.

E’ un sistema crittografico a chiave pubblica basato sul problema del logaritmo discreto.

Il destinatario B fissa un numero primo n, e calcola una radice primitiva a modulo n (per esempio con l’algoritmo di Gauss), rendendo pubblici tali dati.

Poi sceglie un numero intero h, con 1£h£n-1, e calcola (per esempio con l’esponenziazione modulare) il valore b=ahmodn: quindi bºah (mod n), ossia h è il logaritmo discreto in base a del numero b.

In questo sistema lo spazio dei messaggi in chiaro è In-{0}={1,2,….,n-1}.

La chiave di cifratura è b, che viene resa pubblica; la chiave di decifratura è h, tenuta segreta.

L’algoritmo di cifratura è definito nel modo seguente: il mittente A fissa a piacere un intero k , con 1£k£n-1 (senza la necessità di comunicarlo a B) e se xÎ{1,2,….,n-1} è il messaggio in chiaro, calcola (utilizzando per esempio l’esponenziazione modulare) i due numeri:

g=akmodn d=(xbk)modn (quindi 1£g,d£n-1, gºak (mod n), dº (xbk) (mod n)).

Il messaggio cifrato è la coppia (g,d): quindi lo spazio dei messaggi cifrati è il prodotto cartesiano In-{0}x In-{0}, e la funzione di cifratura f: In-{0} ® In-{0}x In-{0} è definita da:

f(x) = (g,d) = (akmodn, (xbk)modn)

Descriviamo la funzione di decifratura g: In-{0}x In-{0}® In-{0} tale che g(f(x))=x per ogni messaggio in chiaro x. Sia y=f(x)=(g,d) il messaggio cifrato.

Sia poi [b] l’inverso di [g] in Zn* (il valore b si calcola a partire da g,n con l’algoritmo Euclideo):

quindi bgº1 (mod n).

Si calcola infine, con l’esponenziazione modulare, il valore s=(dbh)modn (quindi sºdbh (mod n)) e si definisce l’algoritmo di decifratura ponendo g(y)=s.

Notiamo che la chiave di decifratura (tenuta segreta da B) è h, cioè il logaritmo discreto in base a del numero b, che, pur essendo pubblico b, è computazionalmente “difficile” da calcolare.

Resta da verificare però che g(f(x))=x.

Infatti si hanno le seguenti congruenze modulo n:

g(f(x)) º s º dbh º xbkbh º x(ah)kbh º x(ak)hbh º xghbh º x(gb)h º x (mod n) da cui s=x (perché sono numeri congrui modulo n, e compresi fra 1 e n-1).

Il vantaggio del sistema di ElGamal rispetto al sistema RSA è che basta la scelta di un solo primo come base del sistema, ma lo svantaggio è che il messaggio cifrato ha mediamente lunghezza doppia del messaggio in chiaro.

Esempio.

Sia n=997 (primo). Con l’algoritmo di Gauss si trova una radice primitiva modulo n, per esempio a=7.

Supponiamo che la chiave di decifratura (segreta) scelta da B sia h=105.

Il destinatario B calcola b=7105mod997=989, e rende pubblica la chiave di cifratura (n=997,a=7,b=989).

Supponiamo che il messaggio in chiaro che il mittente A deve spedire sia x=813.

Supponiamo anche che il valore k fissato da A sia k=87.

Per cifrare il messaggio x, il mittente A calcola g=787mod997=849, d=(813×98987)mod997=19, e spedisce come messaggio cifrato la coppia (g,d)=(849,19).

Il destinatario B, per decifrare il messaggio, calcola l’inverso [b] di [g] in Z997*, ottenendo b=869, e calcola anche s=(19×869105)modn=813, riottenendo il messaggio in chiaro.

(2)

Il problema della firma digitale nei sistemi a chiave pubblica.

In un sistema crittografico a chiave pubblica, la chiave di cifratura è pubblica, dunque un intruso C potrebbe spedire al destinatario B un messaggio cifrato firmandolo come se il mittente fosse A, ossia “fingendo” che A sia l’autore del messaggio.

Per ovviare a questo problema, vi sono varie soluzioni, relative al singolo sistema crittografico.

Firma digitale nel sistema RSA.

E’ necessario che sia A che B implementino un proprio sistema RSA.

Il soggetto A sceglierà un intero nA=pAqA prodotto di 2 primi distinti, una chiave di cifratura cA e una di decifratura dA, con funzione di cifratura definita da:

fA(x)=xcAmodn (per ogni xÎ{0,1,……,nA-1}

e funzione di decifratura gA definita da:

gA(y)=ydAmodn (per ogni yÎ{0,1,……,nA-1}

Analoghe scelte da parte del soggetto B: nB=pBqB , cA, dA

fB(x)=x modn (per ogni xÎ{0,1,……,ncB B-1}

gB(y)=ydBmodn (per ogni yÎ{0,1,……,nB-1}

Supponiamo che sia per esempio nA<nB.

Insieme con il messaggio cifrato, il mittente A manda una sua “firma digitale” (per esempio una frase del tipo “Firmato: Mario Rossi”) ma affinché B sia certo che la firma è proprio quella del soggetto A, il mittente A suddivide la “firma digitale” in blocchi codificati con numeri <nA; se x è uno di tali blocchi, A applica ad x l’algoritmo di decifratura gA (come se x fosse un messaggio cifrato da decifrare) ottenendo y=gA(x)Î{0,1,……,nA-1}Í{0,1,……,nB-1}, e poi applica l’algoritmo di cifratura fB ottenendo z=fB(y)=fB(gA(x)) Î{0,1,……,nB-1}, spedendo z al destinatario B.

Notiamo che il valore y=gA(x) può essere calcolato solo da A, in quanto la chiave di decifratura dA è conosciuta solo da A; il valore z=fB(y) può essere calcolato da chiunque perché la chiave di cifratura cB è pubblica.

Il destinatario B, ricevendo z, applica la decifratura gB (ricordiamo che B è in possesso della chiave segreta dB di decifratura) ottenendo gB(z)=gB(fB(y))=y, poi applica la cifratura fA (B è in possesso come tutti della chiave pubblica cA di cifratura) ottenendo fA(y)=fA(gA(x))=gA(fA(x))=x (si è sfruttata la proprietà fA·gA=gA·fA, in quanto xcAdAmodn=xdAcAmodn).

Alla fine B legge la “firma digitale”in chiaro (dopo avere riunito i blocchi x), e può essere certo dell’identità del mittente A.

Se invece è nB<nA allora {0,1,……,nB-1}Í{0,1,……,nA-1}:il mittente A suddivide la “firma digitale” in blocchi x<nB, e spedisce z=gA(fB(x)); il destinatario B calcolando gB(fA(x))=x riottiene la firma digitale in chiaro (dopo avere riunito i blocchi x), e può essere certo dell’identità del mittente A.

Firma digitale nel sistema di ElGamal.

Il destinatario B ha scelto il numero primo n, la radice primitiva a modulo n, l’esponente h con 1£h£n-1, ha calcolato b=ahmodn, e reso pubblica la chiave di cifratura b, tenendo segreto il logaritmo discreto h di b in base a, come chiave di decifratura.

Ricordiamo che [a] nel gruppo Zn* ha periodo n-1, dunque se rºs (mod n-1) allora [a]r=[a]s, ossia arºas (mod n) .

Per “firmare”, il mittente A sceglie un wÎ{1,……,n-1}, calcola z=awmodn, e rende pubblico z (il logaritmo discreto w di z in base a è tenuto segreto da A); poi A sceglie un naturale y coprimo con

(3)

n-1, e calcola l’inverso [t] di [y]nel gruppo Zn-1*, spedendo poi, insieme con il messaggio cifrato (g,d)=(akmodn, (xbk)modn), anche la coppia (a,b) dove a=aymodn, b=t(x-wa)mod(n-1), dove x è il messaggio in chiaro.

Essendo bºt(x-wa) (mod n-1), per quanto premesso si ha:

abºat(x-wa) (mod n)

ed elevando ambo i membri all’esponente y (osservando che come sopra da tyº1 (mod n-1) segue atyºa (mod n)) :

abyºaty(x-wa)ºa(x-wa) (mod n) da cui:

abyawa º ax (mod n)

Tale congruenza modulo n si può riscrivere nel modo seguente:

(ay)b(aw)a º ax (mod n) da cui deriva la congruenza:

abzaº ax (mod n) (*) .

Il destinatario B ha tutti gli elementi per verificare se tale congruenza è vera: infatti B conosce a,b,z,n,x (x è il messaggio in chiaro che ha decifrato dopo averlo ricevuto cifrato).

Se la congruenza (*) è verificata, B può essere certo dell’identità del mittente A (solo A, conoscendo w, può avere spedito la coppia “corretta” (a,b) che “firma” il messaggio): ovviamente potrebbe casualmente avvenire che la “firma” (a,b) sia spedita da un intruso C, e che casualmente la congruenza (*) sia verificata: ma la probabilità che 2 interi siano congrui modulo n è 1/n, quindi trascurabile, se n è grande (come avviene nei casi reali, per rendere più sicuro il sistema).

Esempio.

Sia n=11, a=2 (è radice primitiva modulo 11), messaggio in chiaro x=5.

Per firmare il messaggio, il mittente A sceglie wÎ{1,……10}, per esempio w=8, calcola z=28mod11=3 e rende pubblico z; poi sceglie un naturale y coprimo con 10, per esempio y=7, calcola l’inverso [t] di [9] in Z10* (ottenendo t=3), e spedisce come firma la coppia:

(a=aymodn, b=t(x-wa)mod(n-1)) = (7,7).

Per verificare la firma, il destinatario verifica se è vera la congruenza:

7737º25 (mod 11)

e poiché la risposta è affermativa, B è certo (con alta probabilità) dell’identità di A.

Riferimenti

Documenti correlati

Quantitative analysis of the NeuN-immunoreactive BrdU + cells within the SGZ-GCL (Fig. 2 J) demonstrated that more than 95% of the newborn cells were mature neurons and that new

b) il valore della carica Q tale che l’estensione della molla sia pari ad x = 1 cm. SOSTITUIRE I VALORI NUMERICI SOLO ALLA FINE. NON SCORDARE LE UNITA` DI MISURA.. b) Quando la fune

Parte positiva, parte negativa e loro rapporto con la funzione e il valore assoluto della stessa.. Funzione periodica; Definizione di arcocoseno e arcotangente e disegno del

(a) Cifrare il messaggio “24”, cio` e calcolare il resto della divisione per 143 del numero 24 53 (suggerimento: calcolare il resto delle divisioni per 11 e per 13 del numero 24 53

L'istruzione POPTWO non fa altro che rimuovere la parola che si trova in seconda posizione, in cima allo stack (e che quindi, ha indirizzo immediatamente inferiore a quello della

Le partizioni della categoria 2) si ottengono scegliendo una partizione di B in m sottoinsiemi (tale scelta si può effettuare in S(n,m) modi diversi) e poi inserendo l’elemento a n+1

Dato un algoritmo A potremmo allora definire il valore Time A (n) come il numero di operazioni elementari eseguite nell’algoritmo quando l’input ha dimensione n: tale definizione