Per il paradosso del compleanno, la probabilità di trovare una ripetizione in un insieme di
Supponiamo di avere valori di hash su 128 bit. Intuitivamente, un generico attaccante, se volesse generare una collisione avrebbe bisogno di testare almeno
Un attaccante, potrebbe voler generare una collisione specifica per un certo messaggio. In tal caso entra in gioco il problema dell'intersezione tra due insiemi. Avendo due insiemi
Trovata la collisione, l'attaccante conosce i due messaggi che generano la collisione e può falsificare messaggi nella funzioni di hash.
Quando l'autenticazione è simmetrica, la generazione del codice avviene attraverso algoritmi come AES.
Immaginiamo che vi siano due utenti A e B, che condividono una chiave simmetrica per la cifratura dei messaggi che si scambiano.
Se nessun'altro conosce la chiave il messaggio non è visibile da terzi.
Dato che A è l'unico ad avere la chiave, B è sicuro che il messaggio è stato generato da A. Inoltre se il messaggio viene correttamente recuperato da B, vuol dire che non è stato manomesso, ancora, per essere manomesso un attaccante dovrebbe conoscere la chiave di cifratura condivisa tra i due.
La simmetria può fornire autenticazione.
Il messaggio è una combinazione di bit. I bit formano un messaggio che per B ha senso. Un sistema per il controllo dell'autenticità non è in grado di stabilire se una sequenza di bit è sensata.
Per ovviare questo problema si può:
Una funzione di hash trasforma un messaggio m (di lunghezza variabile) in un codice di hash di lunghezza fissa. Se
I codici di hash sono utilizzati per verificare l'integrità dei dati.
Due messaggi distinti possono avere lo stesso codice hash:
L'idea alla base è la generazione di un codice per garantire l'autenticazione.
Una tecnica alternativa coinvolge l'uso di una chiave segreta per generare un piccolo blocco di dati di dimensione fissa, noto come MAC, o cryptographic checksum, tale codice viene aggiungo al messaggio. Le parti comunicanti condividono la stessa chiave per cifrare/decifrare tale MAC.
Il messaggio viene inviato insieme al MAC.
Il MAC può essere ottenuto usando DES e CBC oppure una funzione di hash.
I dati da autenticare sono raggruppati in blocchi di 64 bit contigui:
DAC = MAC.
HMAC sfrutta una funzione di hash resistente alle collisioni, viene generato un codice passando chiave e messaggio alla funzione.
Il messaggio viene divisono in
Vengono generate due chiavi:
Vengono utilizzate delle costanti che si ripetono per
HMAC con 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.
La firma elettronica è una forma di autenticazione asimmetrica. Il codice utilizzato per l'autenticazione è generato attraverso algoritmi come RSA
Se A cifra il suo messaggio con la chiave pubblica di B, solo B può decifrare il messaggio. Tuttavia, a conoscere la chiave pubblica di B, non è solo A. Quindi niente autenticazione.
Per fornire autenticazione, A dovrebbe cifrare il messaggio con la sua chiave privata, chiunque sia in possesso della sua chiave pubblica può decifrare il messaggio e può essere certo che è stato A a cifrarlo.
Notiamo che questo schema non fornisce confidenzialità.
Per ottenere confidenzialità, autenticazione e firma, A potrebbe:
Una possibile disputa che potrebbe nascere: A invia un messaggio autenticato a B usando uno degli schemi sotto:
A potrebbe creare un messaggio diverso e affermare che provenga da B, A non dovrebbe fare altro che autenticare il messaggio utilizzando la chiave che sia A che B condividono.
B potrebbe negare l'invio di tale messaggio, perché è possibile che A abbia potuto farlo come descritto prima.
Stessa operazione potrebbe essere effettuata da B stesso.
Non essendoci piena fiducia tra chi invia e chi riceve, deve essere possibile risolvere dispute come quelle descritte sopra. Questo è possibile grazie alla firma elettronica, che consente di:
La firma elettronica è ottenibile in due modi:
Il messaggio passa attraverso una funzione di hash generando il digest del messaggio. Solo il digest viene cifrato con la chiave privata (e non usando una chiave simmetrica condivisa da entrambi) del mittente. Il digest viene aggiunto al messaggio in plaintext e viene trasmesso.
Il destinatario, prende il messaggio lo passa ad una funzione di hash ottenendo un digest. Poi prende il digest fornito dal mittente stesso, lo decifra usando la chiave pubblica del mittente e ottiene il digest originale. A questo punto confronta i digest ottenuti e se corrispondono il messaggio è autentico.
Il destinatario deve essere sicuro di possedere la chiave pubblica del mittente corretta e aggiornata, altrimenti rischia di accettare un firma falsa.
Essendo il plaintext non cifrato l'attacco del compleanno è possibile. Utilizzando un MAC (chiave condivisa) si riesce ad evitarlo, poiché l'attaccante dovrebbe conoscere la chiave che i due utenti condividono.
Un terzo utente, potrebbe intercettare il messaggio inviato da A e firmarlo con la sua chiave, con l'inganno potrebbe poi fornire la sua chiave pubblica al destinatario B che riconoscerebbe come autentico il mittente (C, non A, ma lui non lo sa), allora firma il messaggio. Per questo B deve essere certo della chiave che possiede.
Nella pratica si usano delle Public Key Infrastrucure, delle autorità che gestiscono la sicurezza delle chiavi fornite dagli utenti attraverso dei CA (certificati autorizzati).