In questa argomentazione vedremo come è possibile garantire l'autenticità di un messaggio.
Ci sono essenzialmente due modi:
L'idea di base è autenticare un messaggio sfruttando un codice di autenticazione. Nell'autenticazione simmetrica questo avviene attraverso l'uso di cifrari simmetrici come DES
o AES. Mentre nella firma elettronica avviene attraverso cifrari asimmetrici come RSA. Vediamo prima come potrebbero essere sfruttati i cifrari che conosciamo per l'autenticazione.
Consideriamo il caso in cui due utenti condividono una chiave simmetrica che consenta loro di cifrare/decifrare i messaggi scambiati.
Immaginiamo un messaggio
Inoltre,
Tuttavia dobbiamo approfondire un attimo la questione:
Una soluzione potrebbe essere quella di considerare autentico, solo un certo numero di pattern di bit. Se il numero di pattern accettati dal sistema è abbastanza alto, la probabilità di ottenere un messaggio non sensato sarebbe molto bassa.
Un'altra soluzione è quella di forzare il messaggio in chiaro ad avere una certa struttura facilmente riconoscibile, ma che non possa essere replicata senza ricorrere alla funzione di cifratura. Per esempio, si potrebbe aggiungere un error-detecting code, anche noto come frame check sequence (FCS), o ancora checksum, ad ogni messaggio prima che avvenga la cifratura. Ecco un esempio:
Quando
Ricordiamo che la funzione
L'uso della chiave pubblica fornisce confidenzialità, ma non autenticazione.
Infatti, la sorgente
Per fornire autenticazione, il mittente
Assumendo che esiste una struttura tale da poter autenticare correttamente il messaggio, allora la cifratura asimmetrica è in grado di fornire autenticazione. Oltre a questo, però, questo schema fornisce anche un'altra cosa, nota come firma digitale: solo
Notiamo anche che questo schema non fornisce confidenzialità, poiché il messaggio cifrato con
Per ottenere sia confidenzialità, che autenticazione e firma digitale,
Un'alternativa tecnica di autenticazione coinvolge l'uso di una chiave segreta per generare un piccolo blocco di dati di dimensione fissa, tale blocco è noto come
Il messaggio, con l'aggiunta del
La funzione utilizzata per la generazione del
Il
Questa tecnica è stata largamente utilizzata per diversi anni per autenticare, in ambito governativo, i dati scambiati. L'algoritmo utilizza CBC con le operazioni di DES. I dati (da autenticare: qualsiasi tipo) sono raggruppati in blocchi di 64 bit contigui:
L'immagine del libro indica il
Il
Il codice serve per autenticare, se il ricevente ricevesse un messaggio modificato, il
Inoltre, non è possibile generare messaggi falsi, senza conoscere la chiave usata per generare il
Data una funzione di hash resistente alle collisioni, si genera il MAC applicando la funzione al messaggio e alla chiave segreta.
Il messaggio viene suddiviso in blocchi:
l'ultimo blocco potrebbe venire riempito con degli zeri (padding) per raggiungere la dimensione di
Definiamo
Definiamo
Definiamo anche delle costanti chiamate
HMAC on opportune scelte per la funzione H è ritenuto sicuro contro attacchi di tipo chosen message.
La generazione di collisioni è possibile, tuttavia risulta non possibile autenticare il messaggio utilizzando la chiave, che in teoria è segreta solo a chi comunica.
HMAC è efficiente quanto la funzione di hash che viene utilizzata (due volte, dove la seconda viene applicato ad un input più corto, vedi immagine sotto).
Nell'immagine sotto
L'autenticazione dei messaggi protegge le due parti comunicanti da manomissioni per mani di terzi. Tuttavia, essa non protegge le due parti da loro stessi.
Per esempio, supponiamo che John invia un messaggio autenticato a Mary, usando uno degli schemi sopra discussi, di cui mostriamo una panoramica di seguito, combinato con un MAC (DESC-CBC o HMAC):
Consideriamo la seguente disputa, che potrebbe nascere:
In una situazione in cui non vi è piena fiducia tra chi invia i messaggi e chi li riceve è necessario avere qualcosa in più di una semplice autenticazione, ovvero la firma elettronica, le cui caratteristiche sono elencate di seguito:
La firma elettronica è ottenibile in due modi:
Il messaggio
Con questo procedimento si ottengono:
La chiave pubblica del mittente è nota a tutti, in tal caso si dice che la firma è opponibile a terzi: chiunque può svolgere l'operazione di verifica (e questo rispecchia anche la realtà nel mondo reale).
Il mittente cifra il messaggio
Per il paradosso del compleanno, ovvero nel caso in cui
L'attacco è possibile, poiché la firma è pubblica; con l'utilizzo di un
Un utente terzo (
Firma digitale e firma elettronica sono utilizzati in modo intercambiabile.
Esistono diversi tipi di firma, che forniscono livelli di sicurezza differenti.
Ricapitolando, la firma digitale è ottenebile:
Sono state proposte diverse tecniche per la distribuzione delle chiavi pubbliche.
Idealmente tutte le proposte possono essere raggruppate nei seguenti schemi:
A prima vista, può sembrare ovvio, in una cifratura a chiave asimmetrica rendere pubblica la chiave pubblica.
Come abbiamo visto questo risulta essere un problema per l'attacco man in the middle che abbiamo visto sopra.
Un maggior grado di sicurezza può essere raggiunto mantenendo una directory dinamica delle chiavi pubbliche che sia pubblicamente disponibile. La distribuzione e il mantenimento di tale directory dovrebbe essere compito di un'organizzazione fidata.
Un tale schema includerebbe i seguenti elementi:
Questo schema è più sicuro degli annunci pubblici individuali, ma ha ancora delle vulnerabilità. Se l'attaccante riesce a calcolare/ottenere la chiave privata dell'autorità, allora l'attaccante potrebbe distribuire chiavi pubbliche contraffatte, impersonando qualsiasi partecipante e intercettare i messaggi inviati a qualsiasi partecipante.
Una maggiore sicurezza per la distribuzione delle chiavi pubbliche può essere ottenuta fornendo un controllo più stringente sulla distribuzione delle chiavi pubbliche dalla directory.
Uno scenario tipico è illustrato di seguito:
Un'autorità centrale mantiene una directory che contiene le chiavi pubbliche degli utenti.
Inoltre, come prima, si suppone che ogni partecipante conosce una chiave pubblica dell'autorità.
Seguono i passi:
A questo punto entrambi gli utenti hanno le chiavi e possono comunicare.
Si noti che i passi per ricevere la chiave non devono essere effettuati sempre, i comunicanti possono salvare la chiave, tuttavia dovranno comunicare con l'autorità per verificare l'autenticità e la validità della chiave.
Lo scenario descritto prima è interessante, ma ha alcuni svantaggi.
Come prima per la directory pubblica dell'autorità è vulnerabile a manomissione.
Un altro approccio consiste nei certificati che possono essere usati da partecipanti per scambiare chiavi senza contattare l'autorità delle chiavi pubblica, ma come se fossero ottenute da essa. In sostanza un certificato consiste di:
I certificati più recenti, consentono anche di aggiungere i certificati (se il proprietario lo richiede) in una lista di certificati revocati, consentendo agli utenti di verificare che il certificato per quell'utente non sia stato revocato, superando il limite precedentemente descritto.
Di seguito uno scenario che riassume il funzionamento delle PKI:
Consideriamo che Alice abbia bisogno di usare la chiave pubblica di Bob per inviargli un messaggio. Alice deve prima ottenere in modo affidabile e sicuro una copia della chiave pubblica della CA. Questo può essere fatto in diversi modi, dipende dalla politica della CA in questione.
Fatto ciò Alice verifica che la chiave di Bob sia ancora valida e che non sia stata revocata, se è ancora valido, Alice ottiene una copia del certificato di Bob (che contiene la chiave pubblica di Bob). Ora Alice può usare la chiave pubblica di Bob per inviargli un messaggio. Bob può anche utilizzare la sua chiave privata per firmare digitalmente dei documenti, in questo caso Bob può includere, insieme al documento firmato, il suo certificato, o presumere che Alice abbia modo di ottenerlo (come abbiamo descritto poco prima, per esempio).
Per verificare la firma di Bob, Alice utilizza prima la chiave pubblica della CA per garantire che il certificato sia valido, poi utilizza la chiave pubblica di Bob (ottenuta dal certificato) per verificare la firma di Bob, confermando l'autenticità del documento.