vuoi
o PayPal
tutte le volte che vuoi
FIRMA
DIGITALE
lo schema della firma digitale è il seguente:
Il mittente fa passare il messaggio attraverso una funzione hash crittografica, ottiene un codice
hash e poi la sua chiave privata la usa per cifrare il codice hahs ottenendo un blocco S che è il
codice hash cifrato con la sua chiave privata. A questo punto appende il blocco S al messaggio e
lo spedisce sul canale.
In questo schema il messaggio viene mandato in chiaro.
Il ricevente fa passare il messaggio cosi come gli è arrivato in una funzione hash crittografica (la
stessa) e ottiene il codice hash; il codice hash lo va a confrontare con quello che ottiene decifrando
S (ossia facendo il percorso inverso di quello fatto in partenza); si tratta di un meccanismo a chiave
asimmetrica quindi la decifratura la farà con la chiave pubblica del mittente. Quindi con la
decifratura riottiene l’h originale e lo va a confrontare con l’h ottenuto dall’hash sul messaggio. Se il
messaggio non è stato modificato i due hash saranno uguali.
Le proprietà che deve avere un meccanismo di firma digitale sono:
- Deve permettere di verificare l’autore, e per evitare un attacco basato sul time deve avere
giorno ed ora in cui è stata effettuata la firma. Per evitare questo ci si protegge affidandosi
ad un registro pubblico di una terza parte che certifica il possesso di una chiave privata da
parte di qualcuno.
- Deve permettere di autenticare i contenuti del messaggio nell’ora in cui è stata fatta la
firma.
- Deve permettere di avere un meccanismo che può essere verificato da terze parti.
Ci sono una serie di attacchi contro un meccanismo a firma digitale. Li possiamo classificare sulla
base di quello che l’attaccante conosce:
- Attacco basato solo sulla chiave: dove l’attaccante C conosce la chiave pubblica di A.
- Attacco che utilizza la conoscenza del messaggio: l’attaccante conosce sia alcuni
messaggi spediti che le corrispondenti firme digitali;
- Attacco con messaggio scelto ma generico: in questo caso l’attaccante prima di cercare di
violare il meccanismo di firma digitale di A, sceglie una lista di messaggi che vengono scelti
senza che in questa lista entri la chiave pubblica di A; per questi messaggi si suppone che
C possa ottenere da A delle firme digitali valide.
- Attacco basato sulla scelta di messaggi basandosi anche sulla chiave pubblica di A: siamo
sempre nel caso in cui C sceglie una lista di messaggi da far firmare ad A, però li sceglie
basandosi anche sulla chiave pubblica di A; questo perché conoscendo la chiave pubblica
di A, lui può operare una decifratura e quindi questo attacco gli torna utile se ha modo di
scegliere i messaggi in modo tale che una volta che siano decifrati rivelano certe
caratteristiche di irregolarità.
- Scelta adattiva: i messaggi per cui C richiede la firma di A dipendono dalla storia delle
precedenti coppie messaggi/firme.
L’utilizzo che l’attaccante può fare tramite questi attacchi sono:
- C determina la chiave privata di A. a questo punto C può generare tutti i messaggi che
vuole e firmarli con la firma privata di A.
- C può trovare qualcosa che non è la chiave privata ma trova un meccanismo di firma che
ricalca il meccanismo di firma con la chiave privata.
- C riesce a copiare la firma digitale solo per un particolare messaggio.
- C sa che esiste almeno un messaggio per cui può generare la firma digitale corretta.
I requisiti che deve avere la firma digitale per poter essere correttamente adottata sono:
- Deve avere una configurazione della firma che dipende dal messaggio;
- Deve utilizzare informazioni che solo il mittente conosce (in questo modo non c’è ripudio).
- Deve essere facile altrimenti se la computazione è complessa ci rallenta ed è scomoda da
utilizzare.
- Deve essere non fattibile dal punto di vista computazionale sia creare una nuova firma
digitale corretta per un certo messaggio, ma anche creare un nuovo messaggio che
contenga quella stessa firma digitale.
- Deve essere un oggetto digitale che si può tenere in memoria facilmente.
La maniera più semplice per fare la firma digitale è attraverso la firma digitale diretta. Diretta
significa che due entità possono mettere in piedi la firma digitale senza ricorrere ad una terza parte
ossia al certificatore.
Si suppone che il destinatario sappia la chiave pubblica del mittente; si può ottenere riservatezza
se si usa cifratura del messaggio e della firma con una chiave segreta e condivisa quindi cifratura
a chiave simmetrica (però in questo caso se ci sono dispute bisogna pensare ad una terza parte);
inoltre la validità dipende dalla garanzia di sicurezza della chiave privata del mittente che deve
essere sufficientemente lunga.
Algoritmi basati su logaritmi discreti
vediamo ora degli schemi di firma digitale che hanno la caratteristica comune di essere basati sulla
non fattibilità dell’operazione del logaritmo discreto. Questo significa che nelle loro operazioni di
firma questi algoritmi impiegano un’elevazione a potenza.
Ci sono 3 algoritmi che impiegano lo stesso schema generale ma con delle variabili. Tutte e 3
usano una chiave privata, una base ausiliaria q che in genere è uguale a p-1 oppure ad un fattore
molto grande di p-1, una base p che è un numero primo molto grande, un generatore g che è
primo rispetto a p, un numero k aleatorio che è primo rispetto a q che viene spesso chiamato
chiave di messaggio (si chiama cosi perché cambia ad ogni messaggio).
In questi schemi si generano sia la chiave pubblica che r (dove r è un valore ausiliario) mediante
un’operazione a elevazione a potenza:
x
y = g mod p
k
r = g mod p
tutti questi schemi si possono ricondurre in:
- Equazione per la firma: ak + bx = c mod q viene gestita dal mittente
a b c
- Equazione per la verifica: r y = g mod p viene gestita dal destinatario
il primo algoritmo è ElGamal dove si fa una cosa inversa rispetto a quello che si fa nell’algoritmo di
ElGamal per la cifratura. In quest’ultimo avevamo una chiave pubblica per mandare e una chiave
privata per decifrare, mentre in questo caso il mittente genera la firma con la sua chiave privata e il
destinatario va a verificare la firma utilizzando la chiave pubblica del mittente.
In questo algoritmo ci sono degli elementi globali (sono un numero primo q ed un valore a che è
una radice primitiva di q); per firmare si usa la chiave privata del mittente e per verificare si usa la
chiave pubblica sempre del mittente. Il mittente genera un valore intero X e calcola la chiave
A
X
pubblica con un’operazione di elevazione a potenza: y = a mod q
A
A
il secondo è Schnorr che si basa sempre su logaritmi discreti. Si cerca di minimizzare il lavoro che
si fa quando si deve mandare un messaggio; questo significa che si cerca di massimizzare il
numero di operazioni della firma che non dipendono dal messaggio ossia quelle operazioni che si
possono fare prima di inviare un messaggio. Quindi le operazioni si riducono alla moltiplicazione di
due interi uno di 2n bit e l’altro di n bit.
Il terzo algoritmo è DSA che utilizza come funzione di hash l’SHA.
L’approccio di DSA nella sua versione base lo si può confrontare con un approccio di firma digitale
RSA (qui si chiama RSA semplicemente perché l’operazione di cifratura dell’hash è fatta con
l’RSA).
Nel DSA si ha sempre una generazione di un hash dove c’è un meccanismo di firma che coinvolge
non solo la chiave privata del mittente ma anche un numero k aleatorio segreto e un insieme di