Capitolo 1:Introduzione
In molte circostanze che si presentano quotidianamente, come prelievo di soldi, firme di contratti, firme di documenti legali, etc. una firma convenzionale scritta a mano viene apposta su un documento. Tale firma, come di consueto, serve per specificare la persona responsabile del documento che è stato firmato. Ciò che si tratterà in questa sezione sono gli schemi di firme, anche noti come firme digitali, i quali consentono di poter firmare documenti o messaggi memorizzati in forma elettronica. Nel prosieguo della trattazione si indicherà con 'Alice' e 'Bob' due utenti che vogliono scambiarsi dei messaggi firmati, e con 'Oscar' un utente (nemico) che cerca di falsificare una firma.
Alice vuole mandare un messaggio M a Bob e in qualche modo
insieme a questo messaggio M vuole produrre una certa firma
elettronica per indicare che quel messaggio è proprio il suo.
Ciò si sa facilmente farlo se la cosa funziona su supporto
cartaceo, infatti se si ha un certo documento allora alla fine si
appone la firma, quello che vorremmo fare è la stessa cosa se
anzichè avere un supporto cartaceo si avesse un file, cioè una
sequenza di bit.
La prima idea che viene in mente è che si potrebbe digitalizzare
la firma di Alice e appenderla alla fine di ogni messaggio M da
firmare.
Questo metodo non funziona perchè essendo la firma una sequenza
di bit, chiunque può tagliare quest'ultima parte e appenderla a
qualunque altro file, firmando il documento illegalmente. Questo
dipende essenzialmente perchè la firma così prodotta è
indipendente dal messaggio.
Le proprietà che si vorrebbe da una firma elettronica sono :
1. La firma digitale deve poter essere prodotta solo da Alice.
2. Nessun altro utente deve poter riprodurre la firma di Alice.
3. Chiunque deve poter essere in grado di verificare che la firma
sia di Alice.
Quindi nasce l'esigenza di individuare schemi di firma che
siano sicuri da possibili attacchi, i quali, se efficaci,
potrebbero dare adito, ad un nemico, di falsificare delle firme.
Si analizzeranno due schemi di firme(DSS e RSA), ma è opportuno
dapprima discutere alcune fondamentali differenze tra firme
convenzionali e firme digitali.
La prima differenza concerne le modalità con cui un messaggio
viene firmato: nella firma convenzionale, la firma è parte
integrante del messaggio, mentre con la firma digitale essa non
è attaccata fisicamente al messaggio da firmare, così
l'algoritmo, che viene usato per firmare, la deve in qualche modo
"legare" al messaggio. In quest'ultimo caso il
messaggio firmato è costituito dalla coppia (Messaggio,Firma).
La seconda differenza riguarda la verifica della firma. Una firma
convenzionale è verificata confrontandola con un'altra firma
autenticata. Certamente questo non è un metodo sicuro poichè
qualcuno potrebbe facilmente falsificare la firma. Le firme
digitali possono essere verificate usando un algoritmo di
verifica pubblicamente noto, così "ognuno" può
verificare una firma digitale.
Un'altra differenza fondamentale è che una copia di un messaggio
digitale firmato è identica all'originale, mentre una copia di
un documento firmato può di solito essere distinta
dall'originale.
Questo fa capire che uno schema di firme digitali, deve essere
tale da prevenire il possibile riutilizzo di un dato documento.
Per esempio, se Alice firma un messaggio digitale col quale
autorizza Bob a prelevare $ 1000 dal suo conto bancario, allora
desidera che tale operazione venga eseguita una sola volta, così
il messaggio dovrebbe contenere delle informazioni, come la data,
che ne impedirebbe il suo riutilizzo.
Dalle considerazioni fatte emerge che i due elementi fondamentali
in uno schema di firma sono: un algoritmo di firma e un algoritmo
di verifica. Alice può firmare un messaggio M usando un
algoritmo di firma sigk che usa alcune informazioni
segrete che sono note solo a Alice. La firma risultante y = sigk(M)
può successivamente essere verificata usando l'algoritmo di
verifica pubblico verk, il quale data una coppia (M,
F) dove M è il messaggio ed F è la firma, ritorna una risposta
"vero" o "falso" rispettivamente, a secondo
che la firma sia autentica oppure no. Tale verifica viene
realizzata grazie a delle informazioni che Alice ha memorizzato
in un apposito file pubblico e, condizione fondamentale è che da
queste informazioni non deve essere possibile, ovviamente, poter
ricavare le informazioni segrete di Alice.
Una definizione formale di uno schema di firme è la seguente:
Uno schema di firme digitale è una quintupla (P,A,K,S,V), dove le seguenti condizioni sono soddisfatte:
Per ogni k Î K le
funzioni sigk e verk devono essere funzioni
facili da calcolare per una maggiore efficienza dello
schema, mentre dovrebbe essere computazionalmente difficile per
Oscar "falsificare" la firma di Alice su di un
messaggio M. Cioè, dato M, solo Alice deve essere in grado di
calcolare una firma F tale che verk(M,F)=vero.
Una schema di firme è detto incondizionatamente sicuro se,
qualunque siano le risorse (tempo e hardware) di Oscar, è
impossibile falsicare le firme. Uno schema di firme non può
essere incondizionatamente sicuro, poichè Oscar potrebbe testare
tutte le possibili firme y per un messaggio M usando l'algoritmo
pubblico verk, fino a quando egli trova una giusta
firma. Naturalmente questo tipo di attacco risulta essere
computazionalmente oneroso soprattutto se l'insieme delle firme
è molto grande. Ma, dato sufficiente tempo, Oscar può sempre
riuscire a falsificare la firma di Alice, così il nostro scopo
è di individuare schemi che siano computazionalmente sicuri.
Nelle successive sezioni si tratteranno diversi schemi di firme
quali RSA e DSS.