2. Attacchi alla Crittografia
Gli attacchi alla crittografia possono essere classificati in tre approcci generali, ciascuno con le proprie metodologie e obiettivi. ---
Gli attacchi alla crittografia possono essere classificati in tre approcci generali, ciascuno con le proprie metodologie e obiettivi.
1. Attacchi a Forza Bruta
Questo tipo di attacco consiste nel provare tutte le combinazioni di chiavi possibili fino a trovare quella corretta.
Caratteristiche
È sempre tecnicamente possibile. In media, richiede di provare il 50% di tutte le chiavi possibili. Per avere successo, è essenziale avere la possibilità di rilevare l'identificazione della chiave corretta e, di conseguenza, la generazione del plaintext (testo in chiaro).Mitigazione
L'unico modo per mitigare il rischio di un attacco a forza bruta è renderlo temporalmente o economicamente non conveniente. Questo può essere fatto attraverso: Aumentando la lunghezza della chiave: Chiavi più lunghe aumentano esponenzialmente il numero di combinazioni possibili. Allungando i tempi di esecuzione dell'algoritmo: Rendere il processo di decifratura più lento. Tempi di esecuzione maggiori della "vita utile" delle informazioni cifrate: Ad esempio, per i dati di carte di credito, l'informazione diventa obsoleta prima che l'attacco possa avere successo. Costi di esecuzione maggiori del valore delle informazioni cifrate: Il valore economico per decifrare l'informazione supera il valore dell'informazione stessa.Esempio: Tempo Necessario per Attacchi a Forza Bruta
La tabella seguente mostra il tempo stimato per un attacco a forza bruta in base alla lunghezza della chiave e alla capacità di tentativi al secondo:| Dimensione Chiave (bit) | Numero di Chiavi | Tempo (10^6 tentativi/sec) | Tempo (10^9 tentativi/sec) |
| 32 | $2^{32} = 4.3 \times 10^9$ | 35.8 min | 4.3 sec |
| 56 | $2^{56} = 7.2 \times 10^{16}$ | 1142 anni | 1.14 anni |
| 128 | $2^{128} = 3.4 \times 10^{38}$ | $5.4 \times 10^{24}$ anni | $5.9 \times 10^{21}$ anni |
2. Crittoanalisi
La crittoanalisi implica l'analisi delle caratteristiche dell'algoritmo di cifratura per provare a risalire alla chiave di cifratura o al plaintext. Le tecniche utilizzate dipendono dall'algoritmo e dalle informazioni aggiuntive in possesso dell'attaccante.
Tipi di Attacco basati sulle Informazioni Note
| Tipo di Attacco | Informazioni Note al Criptoanalista |
| Ciphertext Only | - Cifrario - Ciphertext (testo cifrato) |
| Known Plaintext | - Cifrario - Ciphertext - Una o più coppie plaintext-ciphertext create con la chiave segreta che si vuole identificare |
| Chosen Plaintext | - Cifrario - Ciphertext - Una o più coppie plaintext-ciphertext create con la chiave segreta che si vuole identificare, in cui il plaintext è stato scelto dall'analista |
| Chosen Ciphertext | - Cifrario - Ciphertext - Una o più coppie plaintext-ciphertext create con la chiave segreta che si vuole identificare, in cui il ciphertext è stato scelto dall'analista |
| Chosen Text | - Cifrario - Ciphertext - Una o più coppie plaintext-ciphertext create con la chiave segreta che si vuole identificare, in cui il plaintext è stato scelto dall'analista - Una o più coppie plaintext-ciphertext create con la chiave segreta che si vuole identificare, in cui il ciphertext è stato scelto dall'analista |
_Nota: I casi in cui l'analista non conosce il cifrario utilizzato sono rari e non sono qui contemplati._
Sottocategorie di Crittoanalisi
#### a. Ciphertext Only L'analista ha a disposizione solamente il ciphertext. Questa è la situazione più difficile da decifrare a causa della scarsità di informazioni.
Forza Bruta: Come descritto sopra. Analisi Statistica: Se la tipologia di plaintext è nota (es. un testo, un file eseguibile), è possibile effettuare un'analisi statistica assegnando le parti più frequenti nel ciphertext alle parti più frequenti per quel tipo di plaintext. Efficacia: Non efficace con i moderni metodi crittografici (se usati correttamente), ma solo con metodi obsoleti. Esempio:Inrrn vzfsit yz ajwwfn Inrrn vzfsit vzfsit vzfsit (identificazione di pattern ripetuti).
#### b. Known Plaintext, Chosen Plaintext / Ciphertext / Text In questi scenari, l'analista è a conoscenza del ciphertext e di almeno una coppia plaintext-ciphertext creata con la stessa chiave utilizzata per il ciphertext da decifrare.
La conoscenza del plaintext può essere totale o parziale (es. header di un pacchetto di rete, magic number di un file, una parola specifica come "Wetterbericht"). In alcuni casi, l'analista può scegliere arbitrariamente il plaintext, il ciphertext o entrambi. Queste informazioni aggiuntive vengono utilizzate per dedurre la chiave di cifratura, confrontando le coppie plaintext/ciphertext alla ricerca di comportamenti non randomici sfruttabili per ricostruire la chiave.#### c. Analisi Lineare Cerca di approssimare l'algoritmo di cifratura con un'equazione lineare (spesso usando l'operatore XOR) che lega i bit del plaintext, i bit del ciphertext e i bit della chiave. La possibilità di identificare tale equazione indica una mancanza di randomizzazione nel cifrario. Tipicamente segue attacchi di tipo Known Plaintext, dove l'attaccante ha a disposizione coppie plaintext/ciphertext.
#### d. Analisi Differenziale Studia come le differenze nei plaintext si traducono in differenze nei ciphertext, con l'obiettivo di evidenziare comportamenti non randomici che permettano di risalire alla chiave. Tipicamente segue attacchi di tipo Chosen Plaintext, dove l'attaccante può generare coppie plaintext/ciphertext a proprio piacimento. L'approccio più frequente è usare coppie di plaintext con "differenza costante" e valutare la differenza nei rispettivi ciphertext. _Nota: Il concetto di differenza dipende dall'algoritmo; nella crittografia a chiave simmetrica si usa spesso l'operatore XOR._
3. Vulnerabilità nelle Implementazioni
Gli errori o le debolezze nell'implementazione di un algoritmo crittografico possono essere sfruttati per decifrare messaggi o accedere a informazioni riservate, anche se il cifrario in sé è teoricamente sicuro. Non basta che un cifrario sia sicuro, è fondamentale che la sua implementazione sia altrettanto sicura.
Caso Noto: Heartbleed (CVE-2014-0160)
Tipo: Vulnerabilità zero-day scoperta nell'aprile 2014. Posizione: Presente nell'implementazione OpenSSL del protocollo TLS. Impatto: Permette di accedere alla memoria utilizzata dalla libreria, leggendo dati che dovrebbero rimanere riservati. È stata dimostrata la possibilità di leggere chiavi private. Storia: Introdotta nel 2011 e sanata nella versione 1.0.1g del 7 aprile 2014.
Funzionamento di Heartbleed
Il protocollo TLS include un sottosistema chiamato Heartbeat, usato per verificare che la connessione sia attiva (keep-alive). Funziona come un sistema di eco: 1. Il client invia una stringa e la sua lunghezza. 2. Il server risponde inviando la stessa stringa al client. Le richieste Heartbeat possono essere inviate da chiunque, anche da chi non ha stabilito una connessione TLS con il server.
#### La Vulnerabilità L'implementazione vulnerabile di OpenSSL non validava l'input ricevuto. Restituiva al client un numero di byte pari a quello specificato nella richiesta, indipendentemente dalla lunghezza effettiva della stringa inviata.
Esempio: Se il client invia la stringa "ImAlive" (7 byte) ma specifica che la lunghezza è 64 byte, il server vulnerabile restituisce "ImAlive" seguito da altri 57 byte di dati presi dalla sua memoria. Conseguenza: Il server restituiva al client una porzione della sua memoria che poteva contenere dati sensibili legati alla comunicazione, inclusi potenzialmente chiavi private e password.