Paradosso del compleanno
...

Per il paradosso del compleanno, la probabilità di trovare una ripetizione in un insieme di elementi scelti da è:Se vogliamo che tale probabilità si almeno il 50%, allora abbiamo che basta che si avvicina a :
Questo ci fa comprendere che avendo un certo numero di messaggi lunghi bit, e un certo numero di codici hash di bit. Se allora la probabilità di trovare una collisione è del 50%.
Supponiamo di avere valori di hash su 128 bit. Intuitivamente, un generico attaccante, se volesse generare una collisione avrebbe bisogno di testare almeno messaggi, mentre per il paradosso del compleanno ne bastano solo la metà: .

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 e con ognuno elementi, affinché si generino delle collisioni quanto grandi devono essere gli insiemi?
Se deve essere almeno del 50%: Questo pone le basi per l'attacco del compleanno in cui un attaccante, potrebbe utilizzare una certa funzione di hash su un certo numero di elementi per generare un insieme di codici. Dopo utilizza la medesima funzione di hash su un altro numero di elementi per generare un insieme di codici. Se il numero di elementi è grande circa quanto , la probabilità che venga trovata una collisione tra i due insiemi è superiore al 50%.
Trovata la collisione, l'attaccante conosce i due messaggi che generano la collisione e può falsificare messaggi nella funzioni di hash.

Autenticazione simmetrica
...

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.

Problemi
...

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ò:

  • riconoscere un certo numero (alto) di pattern di bit;
  • includere nel messaggio un checksum, calcolato prima della cifratura, e poi sia il messaggio che il checksum vengono cifrati e spediti, quando B riceve il messaggio, lo decifra e calcola il checksum del messaggio ricevuto, se corrisponde con il checksum che era stato inviato (insieme al messaggio) dal mittente, allora il messaggio è autentico.

Caratteristiche che deve avere una funzione di hash
...

  • Non deve essere invertibile: dato deve essere difficile trovare tale che ;
  • Deve essere fortemente non invertibile: dato deve essere difficile trovare in modo che ;
  • Deve essere resistente alle collisioni: deve essere difficile trovare e tali che .

Funzione di hash
...

Una funzione di hash trasforma un messaggio m (di lunghezza variabile) in un codice di hash di lunghezza fissa. Se è la funzione di hash, abbiamo che .

I codici di hash sono utilizzati per verificare l'integrità dei dati.

Problema
...

Due messaggi distinti possono avere lo stesso codice hash: , gli hash code per questi due messaggi collidono. Un attaccante potrebbe modificare un certo messaggio in modo che il codice hash generato sia sempre lo stesso.

Autenticazione
...

L'idea alla base è la generazione di un codice per garantire l'autenticazione.

Message Authentication Code (MAC)
...

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.

  • funzione di cifratura
  • chiave comune
  • messaggio in plaintext
  • codice generato

Il messaggio viene inviato insieme al MAC.
Il MAC può essere ottenuto usando DES e CBC oppure una funzione di hash.

DES-CBC
...

I dati da autenticare sono raggruppati in blocchi di 64 bit contigui: . Se necessario viene applicato del padding al blocco finale.

  1. Il messaggio viene cifrato con DES-CBC
  2. Si utilizza l'ultimo blocco cifrato (o parte di esso) come MAC.

Pasted image 20230904112227.png
DAC = MAC.

Sicurezza
...
  • Se non si conosce la chiave non è possibile generare dei messaggi falsi;
  • La probabilità di trovare collisioni tra due insiemi e è alta, ma essendo la chiave nota solo a chi comunica, l'attacco del compleanno non funziona.

HMAC
...

HMAC sfrutta una funzione di hash resistente alle collisioni, viene generato un codice passando chiave e messaggio alla funzione.

Il messaggio viene divisono in blocchi di bit. L'ultimo blocco viene, eventualmente riempito con degli zeri.
Vengono generate due chiavi:

  • o se
  • con padding di zero

Vengono utilizzate delle costanti che si ripetono per volte:
Le chiavi vengono messe in XOR con tali stringhe di bit:

Sicurezza
...

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.

Firma elettronica
...

La firma elettronica è una forma di autenticazione asimmetrica. Il codice utilizzato per l'autenticazione è generato attraverso algoritmi come RSA

Confidenzialità
...

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.

Autenticazione e firma
...

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à.

Firma elettronica: confidenzialità, autenticazione, firma
...

Per ottenere confidenzialità, autenticazione e firma, A potrebbe:

  • cifrare il messaggio con la chiave pubblica del destinatario;
  • cifrare il risultato con la sua chiave privata.
    Un utente che riceve tale messaggio deve prima usare la chiave pubblica di A per autenticare il messaggio e poi usare la sua chiave privata per decifrarne il contenuto.
Firma elettronica
...

Una possibile disputa che potrebbe nascere: A invia un messaggio autenticato a B usando uno degli schemi sotto:
Pasted image 20230907153920.png
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:

  • verificare autore, data e ora della firma;
  • autenticare i contenuti al momento della firma;
  • essere verificabile da terzi per risolvere le dispute.

La firma elettronica è ottenibile in due modi:

  • RSA con MD5/SHA-1
  • DSA con SHA-1 (non nel programma)
RSA con MD5/SHA-1
...

Pasted image 20230907153615.png
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.

Attacco del compleanno
...

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.

Attacco MITM
...

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).