I protocolli che
riguardano la crittografia a chiave pubblica sono tipicamente descritti
assumendo, a priori, il possesso di chiavi pubbliche (autentiche) delle parti
appropriate.
Esistono metodi alternativi per distribuire chiavi pubbliche con autenticità garantita e verificabile, includendo gli parametri pubblici di Diffie-Hellman per l’accordo su chiave. Nel modello di spedizione point-to-point su un canale fidato, le chiavi pubbliche autentiche di altri utenti sono ottenute direttamente dall’utente associato attraverso scambio personale o con un mezzo diretto (ad esempio un corriere fidato), che garantisce integrità ed autenticità. Questo metodo è auspicabile se non usato frequentemente o in piccoli sistemi chiusi. Un altro metodo possibile è scambiare chiavi pubbliche ed informazioni associate, su di un canale elettronico non fidato e fornire autenticazione di queste informazioni attraverso l’uso di funzioni hash (resistenti a collisioni) su un canale indipendente. Gli svantaggi di questo metodo sono: inconvenienza per motivi di tempo, acquisizione non automatica delle chiavi prima di comunicazioni sicure con una nuova parte (sincronizzazione dei tempi) e il costo del canale fidato.
Nel
modello con accesso diretto a file pubblici fidati (registro a chiave
pubblica), un database pubblico, la cui integrità è fidata,
potrebbe essere abilitato a contenere il nome e la chiave pubblica autentica di
ogni utente del sistema. Questo database potrebbe essere implementato come un
registro a chiave pubblica, gestito da una parte fidata. Gli utenti acquisiscono
le chiavi direttamente da questo registro. Mentre l'accesso remoto al registro
è accettabile su di un canale insicuro contro avversari passivi, in presenza di
avversari attivi c'è la necessità di un canale sicuro. Un metodo per
autenticare un file pubblico consiste nell'utilizzo di alberi di autenticazione.
Un altro modello è quello che usa
un server fidato on-line.
Il server fornisce accesso al file pubblico che contiene le chiavi
pubbliche autentiche, e restituisce le chiavi pubbliche richieste in una
trasmissione firmata; la confidenzialità non è richiesta. La parte richiedente
possiede una copia della chiave pubblica di verifica della firma del server,
permettendo la verifica dell’autenticità di tali trasmissioni. Gli svantaggi
di questo approccio includono: il server fidato deve essere on-line, il server
fidato può diventare un collo di bottiglia e i link di comunicazione devono
essere stabiliti con entrambi i comunicanti ed il server fidato.
Infine abbiamo il modello che usa sistemi che implicitamente
garantiscono l’autenticità di
parametri pubblici. In tali sistemi, che includono i sistemi basati sull’identità e
quelli che usano chiavi certificate implicitamente, attraverso progetti
algoritmici, la modifica di
parametri pubblici conduce a tecniche crittografiche non compromissibili da
fallimenti [3].
Gli alberi di autenticazione forniscono un metodo per rendere disponibili dati pubblici la cui autenticità è verificabile, usando una struttura ad albero e una funzione hash adatta, con valore della radice autenticante. Le possibili applicazioni includono: autenticazione di chiavi pubbliche, servizio di timestamping fidato ed autenticazione di parametri di validazione dell'utente.
Nell'
autenticazione
di chiavi pubbliche
(alternativa ai certificati di chiave pubblica), un albero di autenticazione
creato da una terza parte fidata, che contiene le chiavi pubbliche degli utenti,
permette l’autenticazione di un grande numero di chiavi. Invece nel servizio
di timestamping fidato, una terza parte fidata crea un albero di
autenticazione, in modo da facilitarne il servizio. Nell'autenticazione
di parametri di
validazione dell’utente,
un singolo utente crea
un albero che gli permette di pubblicare, con autenticità verificabile
un grande numero di suoi parametri pubblici di validazione, come richiesto negli
schemi di firma one-time [3].
Consideriamo
un albero binario T con t foglie. Sia h
una funzione hash resistente alle collisioni. T può essere usato per
autenticare t valori pubblici, Y1, Y2, … , Yt,
costruendo un albero di autenticazione T* come segue :
Etichetta ognuna delle t
foglie con un unico valore pubblico Yi.
Etichetta l’arco diretto uscente dalla foglia etichettata Yi con
h(Yi)
Se l’arco sinistro e destro di un nodo interno sono etichettati h1
e h2, rispettivamente, etichetta l’arco uscente dal nodo con h(h1||
h2).
Se gli archi diretti
verso il nodo radice sono etichettati u1 e u2,
etichetta la radice con
Figura 2. Un albero di autenticazione
Una
volta che i valori pubblici sono assegnati alle foglie dell’albero binario,
l’etichettatura di tutti i nodi è ben definita. La
Figura 2 illustra
un tale albero con quattro foglie. Assumendo che vi sia qualche mezzo per
autenticare l'etichetta della radice, un albero di autenticazione fornisce un
metodo per autenticare ognuno dei t valori pubblici Yi delle
foglie, come segue: per ogni valore pubblico, Yi , c'è un'unica path
(path di autenticazione) da Yi alla radice. Ogni arco della
path è un arco sinistro o destro di un nodo interno o della radice. Se e
è un tale arco diretto verso il nodo x, memorizza l'etichetta sull'altro
arco diretto verso x. Questa sequenza di etichette, (valori della path di
autenticazione) usata nell'ordine corretto fornisce l'autenticazione di Yi
, come illustrato nella Figura 2.
Un
esempio di verifica della chiave usando alberi di autenticazione è il seguente:
riferendoci alla Figura 2
si osserva che il valore pubblico Y1 può essere autenticato
fornendo la sequenza di etichette h(Y2), h(Y3), h(Y4).
L'autenticazione procede come segue: computa h(Y1), poi computa h1=h(h(Y1)||h(Y2)),
poi computa h2=h(h1||h(Y3)), infine,
accetta Y1 come autentico se h(h2||h(Y4))
= R, dove il valore della radice R è conosciuto come autentico.
Il
vantaggio degli alberi di autenticazione è evidente considerando la memoria
richiesta per permettere l’autenticazione di t valori pubblici usando il
seguente approccio alternativo: un utente A autentica t valori pubblici
Y1, Y2, … , Yt, registrando ognuno con
una terza parte fidata. Questo approccio richiede la registrazione di t valori
pubblici, quindi il tempo necessario aumenta al crescere di t. Invece, un albero
di autenticazione richiede solo la
registrazione di un singolo valore con la terza parte (la radice). Se una chiave
pubblica Yi di un utente A è il valore corrispondente ad una foglia
nell’albero di autenticazione, e A desidera fornire informazioni a B
permettendogli di verificare autenticità di Yi , allora A deve
fornire a B sia Yi che i
valori hash associati con la path di autenticazione da Yi
alla radice; in più B deve avere conoscenza e fiducia nella autenticità
del valore della radice R. Questi valori collettivamente garantiscono
l’autenticità, analogamente alla
firma su certificati a chiave pubblica. Il
numero di valori che ogni parte deve
memorizzare (e fornire agli altri utenti per permettere la verifica della sua
chiave pubblica) è pari all'altezza dell'albero [3].
I
certificati di chiavi pubbliche sono un veicolo attraverso il quale le chiavi pubbliche possono
essere memorizzate, distribuite o spedite su un mezzo non sicuro senza pericolo
di manipolazioni non individuate. L’obiettivo è di rendere disponibile la
chiave pubblica di un utente agli altri, in modo tale che la sua autenticità e
validità siano verificabili.
Più
precisamente, si definisce un certificato di una chiave pubblica una struttura
dati che consiste di una sezione dati
e una sezione firma [3]. La sezione dati contiene testo in chiaro che include, almeno, una chiave
pubblica ed una stringa che identifica la parte ad essa associata. La
sezione firma
consiste in una firma digitale dell’autorità di certificazione sulla
sezione dati, legando l’identità
dell’utente alla chiave pubblica specificata.
Più
è familiare il mittente al ricevente, più fiducia c’è nel fatto che la
chiave pubblica è realmente quella del mittente e quindi meno bisogno c’è di
verificare i certificati. Se Alice spedisce un messaggio a Bob ogni giorno,
Alice può allegare una catena di certificati il primo giorno, che Bob verifica.
Bob perciò memorizza la chiave pubblica di Alice
e non sono più necessari certificati o certificazione di certificati.
Una
buona regola è di includere quanto basta di una catena di certificati affinché
l’emittente del certificato di più alto livello nella catena è ben
conosciuto al ricevente. Se ci sono multipli riceventi,
I
certificati sono emessi da un’autorità di certificazione (CA), che potrebbe
essere una qualsiasi amministrazione centrale fidata, che garantisce per
l’identità di coloro per cui emette i certificati e a cui associa una data
chiave. La
CA, infatti, è una terza parte fidata la cui firma sul certificato garantisce
l’autenticità della chiave pubblica legata all’utente. Nel certificato, la
stringa che identifica l’utente deve essere un unico nome nel sistema (nome
distinto) che la CA tipicamente associa con l’entità real-world (identità
reale dell’utente). Per esempio una compagnia potrebbe emettere certificati ai
suoi dipendenti, o un’università ai suoi studenti, o una città ai suoi
cittadini. Per prevenire la perdita di certificati, la chiave pubblica della CA
deve essere attendibile, visto che essa permette ad ogni utente nel sistema,
attraverso l’acquisizione e la verifica dei certificati, di trasferire la
fiducia nella autenticità della chiave pubblica in ogni certificato firmato
dalla CA. Quindi
una CA deve pubblicizzare la sua chiave pubblica ed esibire un certificato di
un’altra CA a più alto livello che attesti la validità della propria chiave
pubblica, servendosi, quindi del trasferimento di
fiducia.
Esempi
di informazioni addizionali che la parte dati del certificato potrebbe contenere
sono:
periodo di validità della chiave pubblica;
numero seriale o un identificatore di chiave che identifica
il certificato o la chiave;
informazioni addizionali
sull’entità soggetto;
informazioni addizionali
sulla chiave;
stime di qualità relative all’identificazione dell’entità soggetto,
alla coppia di chiavi e alla politica di emissione;
informazioni che facilitano la verifica della firma (per esempio
l’algoritmo di firma, nome della CA);
lo stato della chiave pubblica (revoca dei certificati).
Prima
di creare un certificato a chiave pubblica per un utente A, la CA potrebbe
prendere appropriate misure (relative al livello di sicurezza richiesto),
tipicamente in natura non crittografica, per verificare l’identità di A ed il
fatto che la chiave pubblica da essere certificata è attualmente quella di A.
Si possono distinguere due casi : il primo è quello in cui la parte fidata crea
la coppia di chiavi pubbliche, e l'assegna ad uno specifico utente, includendo la chiave pubblica e l’identità
dell’utente nel certificato. L’utente ottiene una copia della propria chiave
privata su un canale sicuro (autentico e privato) dopo aver fornito la sua
identità (per esempio mostrando un passaporto o una foto di persona).Tutte le
parti, sottostanti, usando questo certificato essenzialmente delegano la fiducia
a questa prima verifica di identificazione alla parte fidata.
Nel secondo caso è l'utente che
crea la sua coppia di chiavi, e trasferisce in modo sicuro la chiave pubblica
alla parte fidata, preservando l’autenticità (per esempio su un canale fidato
o di persona). Dopo la verifica dell’autenticità della chiave pubblica, la
parte fidata crea il certificato a chiave pubblica come sopra.
Vediamo
un semplice esempio del secondo caso : Alice genera la sua coppia di chiavi e spedisce la chiave pubblica
ad un appropriato CA con la dimostrazione della sua identità. Il CA testa
l’identità e fa ogni passo necessario per assicurarsi che la richiesta
realmente proviene da Alice e che la chiave pubblica non è stata modificata
durante il tragitto. Dopo spedisce un certificato che attesta il legame tra
Alice e la sua chiave pubblica, con una gerarchia di certificati che verifica la
chiave pubblica della CA. Alice può presentare questa catena di certificati
ogni volta che lo desidera per dimostrare la
legittimità della sua chiave
pubblica [3].
Il
processo totale attraverso il quale un utente B usa un certificato di una chiave
pubblica per ottenere la chiave pubblica autentica di un altro utente A potrebbe
essere riassunto nei seguenti passi :
(one-time)
acquisire la chiave pubblica autentica della CA;
ottenere
una stringa che identifica unicamente A;
acquisire su di un canale non sicuro (da un database centrale pubblico di certificati, o direttamente da A), un certificato della chiave pubblica corrispondente ad A ed accordarsi con la precedente stringa identificativa.
confronta
la corrente data con il periodo di validità del certificato,
basandosi su di un
clock locale fidato; verifica la corrente validità
della chiave pubblica della CA; verifica la firma sul certificato di A
usando la chiave pubblica di CA;
verifica che il certificato non è stato revocato;
se tutti i test hanno successo accetta la chiave pubblica nel certificato come chiave pubblica di A.
I
certificati di chiavi pubbliche legano una chiave pubblica e un identificativo,
includono campi di dati addizionali necessari per chiarire questi legami, ma
non sono usati per certificare informazioni addizionali.
3.6
Sistemi basati sull’identità
I
sistemi basati sull’identità somigliano ai sistemi a chiave pubblica
ordinari, coinvolgendo una trasformazione privata ed una pubblica, ma gli utenti
non hanno un’esplicita chiave pubblica.
Un
sistema crittografico basato sull’identità (sistema ID-based) è un sistema
asimmetrico in cui l’informazione di identificazione pubblica di un utente
gioca il ruolo di chiave pubblica, ed è usata come input ad una autorità
fidata T, per computare la chiave privata corrispondente all’utente.
In
alcuni casi dati pubblici addizionali DA definiti dal sistema devono
essere associati ad ogni utente A in aggiunta all’identità IDA;
tali sistemi non sono più sistemi basati puramente sull’identità dato che né
l’autenticità di DA, nè IDA
devono essere esplicitamente verificati.
I
sistemi basati sull’identità differiscono dai sistemi basati sulla chiave
pubblica nel fatto che l’autenticità dei dati pubblici di un utente specifico
non sono esplicitamente verificati, mentre la verifica delle chiavi pubbliche è
necessaria nei sistemi basati sui certificati.
Lo
scopo dei sistemi ID-based è di creare un sistema crittografico modellante un
sistema ideale di posta in cui la sola conoscenza del nome dell’utente è
sufficiente a permettere che la posta sia spedita e letta solo da quella persona
e la verifica delle firme che solo quella persona può aver prodotto.
Un’altra
variante dei sistemi a chiave pubblica sono i sistemi asimmetrici con chiavi
pubbliche implicitamente certificate. Qui chiavi pubbliche esplicite degli
utenti esistono, ma devono essere ricostruite piuttosto che trasportate da
certificati a chiave pubblica come per i sistemi basati sui certificati.
Infine
l’integrità di una chiave pubblica ricostruita non è direttamente
verificabile ma una chiave pubblica corretta può essere ricostruita solo dai
dati pubblici autentici di un utente.
Per
quanto riguarda le chiavi pubbliche ricostruite il sistema deve garantire due
aspetti:
Esistono due classi di chiavi pubbliche implicitamente certificate. La prima è quella delle chiavi pubbliche basate sull’identità, dove la chiave privata di ogni utente A è calcolata da una parte fidata T, usando informazioni di identificazione di A e la chiave privata di T; essa è anche funzione dei dati pubblici di ricostruzione dell’utente specifico A che sono stabiliti a priori da T. La seconda è quella delle chiavi pubbliche auto-certificate, in cui ogni utenteA calcola la sua chiave privata e la corrispondente chiave pubblica. I dati pubblici di ricostruzione sono computati da T come funzione della chiave pubblica e delle informazioni di identificazione di A (inviate da A a T) e della chiave privata di T. La prima classe richiede molta più fiducia nella terza parte, infatti questa ha accesso alle chiavi private degli utenti a differenza della seconda classe [3].
Le
tecniche di distribuzione di chiavi pubbliche differiscono nella
struttura e nella gestione delle chiavi stesse, infatti, i sistemi a chiave
pubblica basati sui certificati hanno chiavi pubbliche esplicite, mentre i
sistemi ID-based no, e nei sistemi implicitamente certificati le chiavi
pubbliche sono ricostruite.
L’autorità
fidata non ha bisogno di conoscere le chiavi private degli utenti nei sistemi a
chiave pubblica basati sui certificati o in quelli implicitamente certificati
con le chiavi pubbliche auto-certificate; ma ne ha bisogno nei sistemi ID-based
e in quelli implicitamente certificati con chiavi ID-based.
Le
due classi di chiavi pubbliche implicitamente certificate differiscono tra loro
nella ricostruzione dei dati pubblici e delle chiavi private degli utenti come
segue:
In
tutti e tre gli approcci, ad una terza parte, che è fidata ad un certo livello,
è richiesto di fornire un link di trasferimento sicuro tra gli utenti che
potrebbero non aver mai incontrato gli altri e mai condiviso niente oltre che i
parametri autentici del sistema.
La revoca delle chiavi pubbliche può essere indirizzata in schemi ID-based e in sistemi che usano chiavi pubbliche implicitamente certificate, incorporando informazioni tali come periodo di validità della chiave o numero seriale in una stringa di identificazione usata per computare la chiave pubblica dell’utente. Il mandato di revoca è quindi analogo a quello dei certificati a chiave pubblica discusso in seguito. Le informazioni addizionali pertinenti l’uso di una chiave o una politiche di sicurezza associate possono essere similmente incorporate [3].