Lezione del 16 gennaio 2012 Il problema della firma digitale nei

Transcript

Lezione del 16 gennaio 2012 Il problema della firma digitale nei
Lezione del 16 gennaio 2012
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 non vi è una soluzione “universale” ma 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)= x cA modn
(per ogni x∈{0,1,……,nA-1}
e funzione di decifratura gA definita da:
(per ogni y∈{0,1,……,nA-1}
gA(y)= y d A modn
Analoghe scelte da parte del soggetto B: nB=pBqB , cA, dA
fB(x)= x cB modn
(per ogni x∈{0,1,……,nB-1}
dB
gB(y)= y modn
(per ogni y∈{0,1,……,nB-1}
Primo caso: supponiamo che sia 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 valore numerico <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}, e infine spedisce 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, ovviamente valida in quanto x cAd A modn= x dAcA modn).
Alla fine B legge la “firma digitale”in chiaro (dopo avere riunito i blocchi x), e può essere certo
dell’identità del mittente A.
Secondo caso: sia invece nB<nA.
In questo caso {0,1,……,nB-1}⊆{0,1,……,nA-1}: il mittente A suddivide la sua “firma digitale” in
blocchi codificati con valore numerico <nB, e (se x è uno di tali blocchi) spedisce z=gA(fB(x)) al
destinatario B, il quale 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.
Sappiamo che, per costruire il suo sistema crittografico, il destinatario B ha scelto il numero primo
n, la radice primitiva a modulo n (ambedue resi pubblici), l’intero h (tenuto segreto) con 1≤h≤n-1,
ha calcolato b=ahmodn, e reso pubblica la chiave di cifratura b.
Ricordiamo anche 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 intero w∈{1,……,n-1}, calcola z=awmodn, e rende pubblico
z (tenendo segreto w, che rappresenta il logaritmo discreto di z in base a modulo n); poi A sceglie a
piacere un naturale y coprimo con n-1, e calcola l’inverso [t] di [y] nel gruppo Zn-1*, inviando infine
al destinatario B, insieme con il messaggio cifrato (γ,δ)=(akmodn, (xbk)modn), anche la coppia
(α,β) dove α=aymodn, β=t(x-wα)mod(n-1), e dove x è il messaggio in chiaro.
Essendo β≡t(x-wα) (mod n-1), per quanto premesso sopra sul periodo di [a] si ha:
aβ≡at(x-wα) (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)) ottiene :
aβy≡aty(x-wα)≡a(x-wα) (mod n)
da cui:
aβyawα ≡ ax (mod n)
Tale congruenza modulo n si può riscrivere nel modo seguente:
(ay)β(aw)α ≡ ax (mod n)
ossia:
αβzα≡ ax (mod n) (*) .
Il destinatario B ha tutti gli elementi per verificare se tale congruenza è vera: infatti B conosce
α,β,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” (α,β) che “firma” il messaggio): ovviamente potrebbe
casualmente avvenire che la “firma” (α,β) 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 (visto che
sono n le diverse classi di congruenza), quindi trascurabile, se n è grande (come avviene nei casi
reali).
Esempio.
Sia n=11, a=2 (è radice primitiva modulo 11 come si verifica facilmente), 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:
(α=aymodn, β=t(x-wα)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 (come si verifica facilmente), B è certo (con alta probabilità)
dell’identità di A.