Attacchi temporali: estrarre le chiavi dal tempo di esecuzione
Dimostri un attacco di cache timing su un'implementazione non constant-time.
Attacchi temporali: estrarre le chiavi dal tempo di esecuzione è una lezione Cryptology Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Cryptology Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cryptology Academy include 4 lezioni in totale.
Che cos'è un timing attack?
Un timing attack è un attacco side-channel in cui un avversario misura la durata delle operazioni crittografiche per dedurre dati segreti. Anche differenze di pochi nanosecondi possono rivelare bit della chiave.
Perché il tempo di esecuzione rivela i segreti
I rami condizionali e gli accessi alla memoria all'interno del codice crittografico dipendono spesso da valori segreti. Un ciclo che termina prima quando incontra un bit a zero viene eseguito più rapidamente: l'attaccante misura questa differenza.
Attacchi cache-timing su AES
Le classiche ricerche nelle tabelle di AES accedono a linee della cache della CPU i cui indirizzi dipendono dai byte della chiave. Strumenti come Flush+Reload permettono a un attaccante di osservare quali linee della cache sono state utilizzate.
L'oracolo temporale RSA di Bleichenbacher
L'attacco di Bleichenbacher del 1998 sfruttava le differenze temporali nella validazione del padding PKCS#1 v1.5. Milioni di testi cifrati scelti potevano recuperare una chiave privata RSA da 1024 bit.
Attacchi temporali remoti
Anche attraverso la rete, differenze temporali inferiori al millisecondo sono misurabili con un numero sufficiente di campioni. Lucky13 sfruttava i tempi del MAC in modalità CBC in TLS attraverso Internet.
Misurare il tempo in Python
Usare time.perf_counter_ns() per ottenere una risoluzione al nanosecondo. Per dimostrare un confronto vulnerabile:
import time
def vulnerable_compare(a, b):
for x, y in zip(a, b):
if x != y:
return False
return len(a) == len(b)
start = time.perf_counter_ns()
vulnerable_compare(b"secret_key_here", b"wrong_key_xxxxx")
elapsed = time.perf_counter_ns() - start
print(f"Elapsed: {elapsed} ns")Simulare un oracolo temporale
Un oracolo temporale restituisce se un tentativo è corretto e, contemporaneamente, rivela informazioni attraverso i tempi. È possibile recuperare un segreto un byte alla volta misurando quale tentativo richiede più tempo prima di restituire False.
Analisi statistica dei dati temporali
Le singole misurazioni sono rumorose. Gli attaccanti raccolgono migliaia di campioni per candidato e usano test statistici (test t, test di Welch) per distinguere il segnale dal rumore.
L'attacco di Manger a OAEP
Nel 2001, Manger ha dimostrato che persino RSA con padding OAEP rivela informazioni se l'implementazione distingue l'errore "il primo byte è zero" dagli altri errori mediante tempi diversi.
Esempi nel mondo reale
OpenSSL, GnuTLS e NSS hanno avuto tutti CVE relativi ad attacchi temporali. L'attacco TLS Lucky13 (CVE-2013-0169) ha interessato praticamente tutte le librerie TLS al momento della divulgazione.
Verifica delle conoscenze
Quale tecnica statistica aiuta gli attaccanti a distinguere il segnale temporale dal rumore delle misurazioni?
Riepilogo della lezione
Gli attacchi temporali estraggono segreti crittografici misurando le differenze nel tempo di esecuzione. Funzionano localmente (cache) o da remoto (rete). L'analisi statistica separa il segnale dal rumore. La soluzione è scrivere codice a tempo costante, argomento trattato nella lezione sulle contromisure.
Domande Frequenti
La lezione «Attacchi temporali: estrarre le chiavi dal tempo di esecuzione» è gratuita?
Sì — il testo completo di «Attacchi temporali: estrarre le chiavi dal tempo di esecuzione» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Cryptology Academy, passa a CoddyKit PRO. Il corso Cryptology Academy include 4 lezioni in totale.
Cosa imparerò in «Attacchi temporali: estrarre le chiavi dal tempo di esecuzione»?
Dimostri un attacco di cache timing su un'implementazione non constant-time. Eserciti Cryptology Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Cryptology Academy?
Non è richiesta alcuna esperienza precedente. Cryptology Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Attacchi temporali: estrarre le chiavi dal tempo di esecuzione»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Cryptology Academy?
Sì. Ogni lezione Cryptology Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Attacchi temporali: estrarre le chiavi dal tempo di esecuzione
- Analisi dei consumi: SPA e DPA
- Canali laterali elettromagnetici e acustici
- Contromisure: masking, blinding e codice constant-time