Vai al contenuto principale

Crittografia a chiave simmetrica

In questa lezione esamineremo la crittografia a chiave simmetrica, che protegge gran parte dei dati a riposo e in transito grazie alla sua efficienza.

Al termine della lezione avremo trattato:

  • Cosa si intende per crittografia a chiave simmetrica
  • Esempi di codice Python che illustrano l'uso della crittografia a chiave simmetrica
  • Applicazioni della crittografia a chiave simmetrica
  • La sicurezza della crittografia a chiave simmetrica
  • Le minacce a questi algoritmi da parte sia dei computer classici sia dei computer quantistici

Introduzione alla crittografia a chiave simmetrica​

La crittografia a chiave simmetrica (SKC) è la forma di crittografia più antica e intuitiva. Con la SKC, le informazioni riservate vengono protette tramite la cifratura a chiave simmetrica (SKE), ossia utilizzando una singola chiave segreta sia per la cifratura che per la decifratura.

La SKC prevede:

  • Una funzione di cifratura che converte un dato testo in chiaro in ciphertext utilizzando una chiave segreta
  • Una funzione di decifratura che inverte l'operazione, riconvertendo il ciphertext nel testo in chiaro originale usando la stessa chiave segreta

Il testo in chiaro può indicare qualsiasi tipo di dato non cifrato, come testo in linguaggio naturale o codice binario il cui contenuto informativo è in linea di principio direttamente accessibile, mentre il ciphertext si riferisce a dati cifrati il cui contenuto informativo è inteso come inaccessibile prima della decifratura.

Un algoritmo che descrive le operazioni di cifratura e decifratura tramite una chiave segreta condivisa è detto anche cifrario simmetrico.

Fig 1: Symmetric key encryption of a given plaintext to ciphertext and decryption back to plaintext using the same key.

Figura 1. Cifratura a chiave simmetrica di un dato testo in chiaro in ciphertext e decifratura di ritorno al testo in chiaro usando la stessa chiave.

Proprietà dei criptosistemi a chiave simmetrica​

Un criptosistema a chiave simmetrica deve garantire le seguenti proprietà per proteggere i messaggi — sia dati memorizzati staticamente sia comunicazioni attraverso un canale di trasmissione:

  • Riservatezza: Si riferisce alla proprietà per cui il contenuto informativo dei messaggi cifrati è protetto dall'accesso non autorizzato.
  • Integrità: Si riferisce alla proprietà per cui qualsiasi manomissione dei messaggi cifrati durante la memorizzazione o la trasmissione può essere rilevata.
  • Autenticità: Si riferisce alla proprietà per cui il destinatario di un messaggio può verificare l'identità del mittente e rilevare l'impersonificazione da parte di soggetti non autorizzati.

Inoltre, queste proprietà devono essere realizzate in un contesto in cui gli algoritmi o i cifrari utilizzati per la cifratura e la decifratura possono essere pubblici e in cui l'accesso al contenuto informativo dei messaggi cifrati è controllato esclusivamente attraverso l'accesso alla chiave segreta.

L'implementazione di un criptosistema a chiave simmetrica sicuro comporta quindi due compiti principali:

  1. Impiegare un robusto algoritmo di cifratura a chiave simmetrica resistente agli attacchi crittografici.
  2. Garantire la riservatezza nella distribuzione e nella gestione delle chiavi segrete.

In questa lezione discuteremo gli aspetti relativi al primo compito, che costituisce la preoccupazione principale della tecnologia SKC. Il secondo compito, invece, richiede soluzioni che esulano dalla SKC stessa e che verranno introdotte in seguito.

Illustrazione della cifratura a chiave simmetrica con Python​

Mostriamo un semplice esempio delle operazioni di cifratura e decifratura utilizzando il classico cifrario di Cesare a scorrimento e il moderno Advanced Encryption System (AES), che è lo standard per la cifratura a chiave simmetrica dal 2001. Per prima cosa configuriamo alcune librerie Python che forniscono i cifrari a chiave simmetrica necessari, quindi definiamo il testo in chiaro che vogliamo cifrare.

# Added by doQumentation — required packages for this notebook
!pip install -q cryptography numpy secretpy
# Install the library if needed
# %pip install secretpy

# import the required crypto functions which will be demonstrated later
from secretpy import Caesar
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from functools import reduce
import numpy as np

# Set the plaintext we want to encrypt
plaintext = "this is a strict top secret message for intended recipients only"
print(f"\nGiven plaintext: {plaintext}")

Vedremo come cifrarlo e decifrarlo usando due diversi metodi di cifratura a chiave simmetrica:

  1. Il classico cifrario di Cesare a scorrimento
  2. Il moderno protocollo Advanced Encryption Standard AES-256

Cifrario di Cesare a scorrimento:​

La cifratura con il cifrario di Cesare a scorrimento prevede di definire:

  • Un alfabeto di caratteri possibili da codificare
  • Un valore di scorrimento compreso tra 0 (non cifrato) e la lunghezza dell'alfabeto. Questo è considerato la chiave.

È noto come cifrario a sostituzione monoalfabetica poiché ogni lettera del testo in chiaro viene sostituita con un'altra nel ciphertext.

In questo esempio utilizzeremo le lettere minuscole dell'alfabeto.

Iniziamo con la configurazione.

# initialize the required python object for doing Caesar shift encryption
caesar_cipher = Caesar()

# Define the shift, ie the key
caesar_key = 5
print(f"Caesar shift secret key: {caesar_key}")

# Define the alphabet
alphabet = (
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i",
"j",
"k",
"l",
"m",
"n",
"o",
"p",
"q",
"r",
"s",
"t",
"u",
"v",
"w",
"x",
"y",
"z",
" ",
)
print(f"alphabet: {alphabet}")

Cifriamo il testo in chiaro per ottenere il ciphertext con il cifrario di Cesare.

caeser_ciphertext = caesar_cipher.encrypt(plaintext, caesar_key, alphabet)
print(f"Encrypted caeser shift ciphertext: {caeser_ciphertext}")

Decifriamo il ciphertext per tornare al testo in chiaro originale usando la stessa chiave usata per la cifratura.

caeser_plaintext = caesar_cipher.decrypt(caeser_ciphertext, caesar_key, alphabet)
print(f"Decrypted caeser shift plaintext: {caeser_plaintext}\n")

Cifrario Advanced Encryption Standard (AES)​

Ora cifriamo il testo in chiaro usando AES, un popolare algoritmo di cifratura a chiave simmetrica.

Iniziamo creando la chiave, in questo caso una stringa casuale di 16 caratteri.

# lambda defines an inline function in this case that takes two values a,b with the resulting expression of a+b
# reduce uses a two-argument function(above), and applies this to all the entries in the list (random alphabet characters) cumulatively
aes_key = reduce(lambda a, b: a + b, [np.random.choice(alphabet) for i in range(16)])

print(f"AES secret key: {aes_key}")

AES supporta più modalità operative e richiede di specificare quale usare.

Scegliamo la modalità Cipher Block Chaining (CBC) fornita dalla classe modes.CBC della libreria cryptography. La modalità CBC di AES utilizza la casualità per una sicurezza aggiuntiva. Ciò richiede di specificare un Vettore di Inizializzazione (IV) casuale, detto anche nonce. Utilizzeremo una stringa casuale anche per questo, proprio come abbiamo fatto per la chiave.

aes_initialization_vector = reduce(
lambda a, b: a + b, [np.random.choice(alphabet) for i in range(16)]
)
print(f"AES initialization vector: {aes_initialization_vector}")

Possiamo ora istanziare un cifrario AES per conto del mittente del messaggio segreto. Nota che il vettore di inizializzazione viene passato alla classe modes.CBC per configurare la modalità di funzionamento CBC.

Cifreremo quindi il testo in chiaro da inviare.

# The encryptor is setup using the key and CBC. In both cases we need to convert the string (utf-8) into bytes
sender_aes_cipher = Cipher(
algorithms.AES(bytes(aes_key, "utf-8")),
modes.CBC(bytes(aes_initialization_vector, "utf-8")),
)
aes_encryptor = sender_aes_cipher.encryptor()

# update can add text to encypt in chunks, and then finalize is needed to complete the encryption process
aes_ciphertext = (
aes_encryptor.update(bytes(plaintext, "utf-8")) + aes_encryptor.finalize()
)

# Note the output is a string of bytes
print(f"Encrypted AES ciphertext: {aes_ciphertext}")

Per decifrarlo, istanziamo un cifrario AES per conto del destinatario. Nota che il destinatario ha accesso sia alla chiave segreta sia al vettore di inizializzazione, ma quest'ultimo non deve necessariamente essere segreto.

# Similar setup of AES to what we did for encryption, but this time, for decryption
receiver_aes_cipher = Cipher(
algorithms.AES(bytes(aes_key, "utf-8")),
modes.CBC(bytes(aes_initialization_vector, "utf-8")),
)
aes_decryptor = receiver_aes_cipher.decryptor()

# Do the decryption
aes_plaintext_bytes = aes_decryptor.update(aes_ciphertext) + aes_decryptor.finalize()

# convert back to a character string (we assume utf-8)
aes_plaintext = aes_plaintext_bytes.decode("utf-8")

print(f"Decrypted AES plaintext: {aes_plaintext}")

Applicazioni della crittografia a chiave simmetrica​

Sebbene i cifrari classici come il cifrario di Cesare siano caduti in disuso molto tempo fa, i moderni criptosistemi simmetrici come AES sono impiegati in un'ampia gamma di applicazioni, tra cui:

  1. Cifratura e decifratura dei dati: La SKC è ampiamente utilizzata per proteggere dati sensibili, sia memorizzati staticamente su un dispositivo sia trasmessi su una rete. Esempi includono la protezione delle credenziali degli utenti, la cifratura dei messaggi email e la sicurezza delle transazioni finanziarie, tra gli altri.

  2. Comunicazione sicura: I comuni protocolli di comunicazione come SSL/TLS utilizzano una combinazione di cifratura a chiave simmetrica e asimmetrica per garantire la riservatezza e l'integrità dei dati scambiati tra due parti. Questi messaggi vengono cifrati e decifrati tramite cifratura a chiave simmetrica, che usa una chiave condivisa. La chiave usata nella cifratura a chiave simmetrica viene scambiata in modo sicuro tramite la cifratura a chiave asimmetrica, che utilizza una coppia di chiavi pubblica-privata. La cifratura a chiave simmetrica è molto più veloce e può quindi essere utilizzata per cifrare messaggi di grandi dimensioni.

  3. Verifica dell'autenticità: In alcuni contesti, la SKC viene impiegata tramite tecniche come i codici di autenticazione del messaggio (MAC) e i MAC con hash con chiave (HMAC) per verificare l'autenticità e l'integrità dei messaggi, garantendo comunicazioni resistenti alle manomissioni.

  4. Cifratura di file e dischi: I software di cifratura dell'intero disco e gli strumenti di cifratura dei file impiegano la SKC per proteggere i dati sensibili memorizzati su dischi rigidi o dispositivi di archiviazione portatili.

  5. Reti private virtuali: Le tecnologie VPN, che mirano a fornire canali di comunicazione riservati e privi di intercettazioni, possono utilizzare la cifratura a chiave simmetrica o asimmetrica per connettere utenti remoti e reti aziendali.

Il variegato insieme di applicazioni in cui la SKC è impiegata richiede a sua volta che i criptosistemi simmetrici soddisfino un determinato insieme di criteri.

Principi della cifratura a chiave simmetrica​

In questa sezione discuteremo alcuni dei principi di base che sottendono la sicurezza degli algoritmi di cifratura a chiave simmetrica.

Resistenza agli attacchi di forza bruta: Il requisito più fondamentale per la sicurezza di un cifrario è che la dimensione dello spazio delle chiavi — in altre parole, il numero di chiavi distinte possibili tra cui chi usa l'algoritmo potrebbe aver scelto — sia molto grande.

Resistenza agli attacchi crittoanalitici: Il secondo requisito di base per un cifrario, simmetrico o meno, è che possa generare ciphertext informativamente insondabili. A tal fine, una condizione necessaria ma non sufficiente dal punto di vista della teoria dell'informazione è che i ciphertext debbano essere caratterizzati da un'elevata entropia, rendendoli indistinguibili da testo casuale privo di pattern o correlazioni rilevabili. In questo modo, un attaccante non può ricavare alcuna informazione sul testo in chiaro o sulla chiave segreta tentando di analizzare il ciphertext tramite analisi delle frequenze o altre tecniche statistiche.

La resistenza alle forme generali di attacchi crittoanalitici sufficiente a garantire la sicurezza semantica è formalizzata tramite la nozione di indistinguibilità. Sebbene esistano diverse varianti di indistinguibilità con requisiti distinti, un criptosistema simmetrico è considerato semanticamente sicuro se soddisfa il criterio di Indistinguibilità sotto Attacco con Testo in Chiaro Scelto (IND-CPA). Ciò significa che un attaccante non riesce a distinguere tra le cifrature di due messaggi diversi, anche se gli viene consentito di inviare all'algoritmo più testi in chiaro di sua scelta e di visualizzare i ciphertext corrispondenti.

Come vedremo in seguito, IND-CPA richiede tipicamente l'uso della casualità per garantire che ogni volta che un dato testo in chiaro viene cifrato con una data chiave segreta, il ciphertext risultante sia imprevedibilmente diverso per ogni cifratura.

Modalità di fallimento dei cifrari classici: Prima dell'avvento della crittografia moderna negli anni Settanta, la maggior parte dei cifrari classici in uso pratico non soddisfaceva uno o entrambi i requisiti di cui sopra. Ad esempio, i primi cifrari a sostituzione come il monoalfabetico cifrario di Cesare a scorrimento erano caratterizzati sia da una piccola dimensione dello spazio delle chiavi (vedi Tabella 1) sia da un ciphertext a bassa entropia, rendendoli insicuri contro vari attacchi crittoanalitici come gli attacchi di forza bruta, l'analisi delle frequenze e gli attacchi con testo in chiaro noto (KPT).

I successivi cifrari a sostituzione polialfabetica come il cifrario di Vigenère e il cifrario della macchina Enigma presentavano spazi delle chiavi effettivamente grandi, rendendoli resistenti agli attacchi di forza bruta, ma erano rispettivamente vulnerabili all'analisi delle frequenze e agli attacchi KPT. Analogamente ai cifrari a sostituzione, i cifrari a trasposizione classici, che riorganizzano le lettere di un messaggio invece di sostituirle, sono anch'essi compromessi da vari attacchi come l'anagrammazione, l'analisi statistica, la forza bruta e gli attacchi KPT, tra gli altri.

Teoricamente, un cifrario a sostituzione polialfabetica noto come one-time pad (OTP) è considerato crittograficamente sicuro. Un OTP prevede una chiave segreta che deve essere (1) composta da lettere o bit scelti casualmente, (2) lunga almeno quanto il testo in chiaro originale, e (3) usata una sola volta. Un OTP è impraticabile per le applicazioni reali perché se la chiave segreta — che deve essere lunga quanto il testo in chiaro e può essere usata una sola volta — potesse essere condivisa in modo sicuro, lo stesso potrebbe essere fatto con il testo in chiaro originale. L'OTP illustra invece l'utilità della casualità nella generazione di ciphertext sicuri.

Un attaccante che tenta di eseguire una ricerca di forza bruta nello spazio delle chiavi per trovare una chiave che decifri il messaggio deve eseguire un numero di operazioni proporzionale alla dimensione dello spazio delle chiavi.

Pertanto, una grande dimensione dello spazio delle chiavi fornisce resistenza agli attacchi di forza bruta rendendoli computazionalmente non fattibili. La Tabella 1 elenca le dimensioni degli spazi delle chiavi di alcuni cifrari ben noti.

Tabella 1: Dimensioni dello spazio delle chiavi di alcuni cifrari simmetrici​

CifrarioLunghezza della chiaveDimensione dello spazio delle chiavi
Caeser shift1alphabet-size
Vigenerenalphabet-sizen^\mathrm{n}
One-time-padplaintext-lengthalphabet-sizeplaintext−length^\mathrm{plaintext-length}
DES56256^\mathrm{56}
AES-1281282128^\mathrm{128}
AES-1921922192^\mathrm{192}
AES-2562562256^\mathrm{256}
ChaCha202562256^\mathrm{256}
I moderni schemi di cifratura a chiave simmetrica superano in larga misura le limitazioni dei cifrari classici. Producono ciphertext resistenti alla crittoanalisi e presentano grandi spazi delle chiavi, pur essendo molto più efficienti dal punto di vista pratico rispetto a un OTP.

Cifrari a blocchi: Una classe di cifrari moderni — come DES e AES — raggiunge la sicurezza combinando i principi di confusione e diffusione originariamente introdotti da Claude Shannon. Discutiamo questi concetti in un contesto in cui gli schemi di cifratura lavorano con rappresentazioni binarie dei messaggi:

  • Confusione: La confusione è la caratteristica per cui ogni bit del ciphertext dipende da più bit della chiave segreta. Garantisce che una piccola modifica nella chiave segreta modifichi quasi tutti i bit del ciphertext, oscurando la relazione tra il ciphertext e la chiave segreta.

  • Diffusione: La diffusione è la caratteristica per cui invertire un singolo bit nel testo in chiaro dovrebbe modificare circa la metà dei bit nel ciphertext e viceversa. La diffusione nasconde le relazioni statistiche tra il testo in chiaro e il ciphertext. I cifrari con adeguata diffusione soddisfano il cosiddetto criterio a valanga della crittografia.

I cifrari a blocchi implementano confusione e diffusione usando strutture crittografiche note come reti di sostituzione-permutazione (SPN) che operano su blocchi discreti di dati. Una SPN accetta come input un blocco di testo in chiaro e la chiave segreta ed esegue un numero specificato di round di trasformazioni per produrre un blocco di ciphertext. Ogni round è composto da strutture matematiche alternate note come scatole di sostituzione (S-box) e scatole di permutazione (P-box) o operazioni equivalenti.

Queste implementano rispettivamente trasformazioni non lineari complesse e lineari sui blocchi di input, portando a effetti valanga nel ciphertext.

Le SPN sono progettate in modo che l'aumento del numero di round aumenti tipicamente la sicurezza del cifrario. Questo porta alla nozione di margine di sicurezza. Margine di sicurezza: Il margine di sicurezza di un dato cifrario crittografico basato su SPN è la differenza tra il numero di round nell'implementazione completa del cifrario e il numero massimo di round che sono noti come violabili usando il migliore attacco reale conosciuto.

Ad esempio, attualmente i migliori attacchi noti più veloci della forza bruta contro AES-256 possono violare fino a 9 round su un totale di 14 round nel cifrario completo quando usato nella modalità standard nota come modalità Electronic Codebook (ECB). Pertanto, attualmente il margine di sicurezza di AES-256 è di 5 round.

Cifrari a flusso: Come alternativa ai cifrari a blocchi, i moderni crittologi hanno anche progettato cifrari a flusso praticamente sicuri come Chacha20. Questi cifrari utilizzano la casualità come parte fondamentale del loro design e operano su keystream pseudocasuali di bit invece di blocchi discreti di dati.

Di conseguenza, i cifrari a flusso combinano una chiave segreta e un vettore di inizializzazione (IV) per inizializzare un generatore di numeri pseudocasuali (PRNG) al fine di produrre un keystream di bit casuali che vengono poi combinati con il testo in chiaro per produrre il ciphertext. In questo senso, i cifrari a flusso sono simili a un one-time pad (OTP) ma presentano lunghezze di chiave segreta più brevi e chiavi riutilizzabili, il che li rende più pratici. Tuttavia, per la stessa ragione, non garantiscono la segretezza perfetta, a differenza di un OTP.

Sicurezza semantica: Concludiamo questa sottosezione tornando alla nozione di sicurezza semantica o sicurezza a livello IND-CPA introdotta in precedenza. Le operazioni di base implementate dai cifrari a blocchi come S-box e P-box sono deterministiche. Ciò significa che nelle modalità operative standard come ECB, una data coppia testo in chiaro-chiave produce sempre lo stesso ciphertext, una situazione che è vulnerabile agli attacchi con testo in chiaro scelto.

Per raggiungere la sicurezza a livello IND-CPA, i cifrari a blocchi devono operare in una modalità che utilizzi la casualità introdotta tramite un vettore di inizializzazione (IV) pseudocasuale, con il requisito aggiuntivo che nessuna due operazioni di cifratura usino la stessa coppia chiave-IV. AES supporta diverse modalità operative, come il cipher block chaining (CBC), che sono sicure a livello IND-CPA. Un requisito simile vale anche per i cifrari a flusso, per cui la stessa coppia chiave-IV non deve essere usata per inizializzare il PRNG più di una volta se si desidera IND-CPA.

Dopo aver introdotto alcuni principi di base della SKC, elenchiamo ora alcuni algoritmi a chiave simmetrica diffusi per illustrare la varietà degli approcci perseguiti nei moderni criptosistemi. I moderni cifrari a blocchi e a flusso sono entrambi impiegati in contesti diversi come illustrato di seguito.

  1. Advanced Encryption Standard: AES, già introdotto in precedenza, è attualmente lo standard de facto per la SKC grazie alle sue caratteristiche di sicurezza, efficienza e prestazioni. AES prevede dimensioni di chiave fisse di 128, 192 e 256 bit e utilizza una rete di sostituzione-permutazione (SPN) a più round. AES è noto per essere resistente a un'ampia gamma di attacchi crittoanalitici. AES è stato annunciato come Federal Information Processing Standard (FIPS) per la cifratura a chiave simmetrica negli Stati Uniti nel 2001.

  2. Data Encryption Standard (DES) e Triple Data Encryption Standard (3DES): DES era un cifrario a blocchi originariamente inventato da Horst Feistel e collaboratori presso IBM® negli anni Settanta, che impiegava una SPN con una chiave relativamente corta di 56 bit. DES fu adottato come FIPS per la cifratura a chiave simmetrica negli Stati Uniti fino alla fine degli anni Novanta, quando si dimostrò che poteva essere violato tramite attacchi di forza bruta con hardware specializzato a causa della piccola dimensione del suo spazio delle chiavi. Successivamente, 3DES fu introdotto come sostituto e applica l'algoritmo DES tre volte con chiavi diverse, aumentando la lunghezza della chiave a 168 bit. Tuttavia, 3DES è in gran parte superato da AES.

  3. Blowfish e Twofish: Blowfish e il suo successore, Twofish, sono cifrari a blocchi proposti dal crittografo Bruce Schneier negli anni Novanta. Blowfish e Twofish consentono lunghezze di chiave variabili fino a 448 bit e 256 bit rispettivamente, offrendo una certa flessibilità nel bilanciamento tra sicurezza e prestazioni. A differenza di AES, presentano anche S-box dipendenti dalla chiave. Twofish fu uno dei finalisti nella competizione NIST per la selezione dell'Advanced Encryption Standard, ma alla fine non fu scelto. Entrambi gli algoritmi sono attualmente considerati sicuri.

  4. Cifrari Rivest (RC2, RC4, RC5 e RC6): La famiglia di algoritmi a chiave simmetrica Rivest Cipher (RC) fu progettata da Ron Rivest a partire dagli anni Ottanta. RC2 era un primo cifrario a blocchi a 64 bit, mentre RC4 era un cifrario a flusso ampiamente utilizzato nei protocolli di sicurezza relativi al traffico web per la sua semplicità e velocità. Nessuno dei due è attualmente considerato sicuro. RC5 e RC6 sono cifrari a blocchi basati su SPN progettati con dimensioni di blocco, dimensioni di chiave e numero di round personalizzabili. Come Twofish, RC6 fu un finalista nella competizione NIST AES ed è considerato sicuro.

  5. Salsa20 e ChaCha20: Salsa20 e ChaCha20 si riferiscono a una famiglia correlata di cifrari a flusso progettati dal crittografo Daniel Bernstein negli anni Duemila. Salsa20 fa parte del portfolio profile-1 del progetto europeo di validazione crittografica eSTREAM. ChaCha20, una modifica di Salsa20, fu progettato per aumentare le caratteristiche di diffusione e le prestazioni. Attualmente, ChaCha20 è considerato sicuro e offre prestazioni migliori in assenza di accelerazione hardware AES dedicata. Pertanto, ChaCha20 trova impiego in determinati contesti come i protocolli di rete quali QUIC e i dispositivi mobili con CPU basate su ARM.

Vantaggi della crittografia a chiave simmetrica​

Dopo aver delineato le proprietà dei criptosistemi a chiave simmetrica e alcuni dei principi che ne sottendono lo sviluppo, elenchiamo ora alcuni dei principali vantaggi della SKC rispetto alla crittografia a chiave asimmetrica. Quest'ultima verrà discussa nelle lezioni successive.

  1. Velocità ed efficienza: Gli algoritmi a chiave simmetrica sono più adatti per cifrare grandi volumi di dati o per l'uso in scenari di comunicazione in tempo reale, poiché sono generalmente più veloci e meno intensivi in termini di risorse rispetto alle loro controparti asimmetriche. Gli algoritmi SKC come AES scalano linearmente con la dimensione del testo in chiaro e non richiedono operazioni matematiche algebricamente intensive. Vedi Tomoiaga et al. per una revisione dettagliata delle caratteristiche prestazionali di AES.

  2. Scalabilità: Grazie al loro relativamente basso overhead computazionale, gli algoritmi a chiave simmetrica scalano bene con il numero di utenti e la quantità di dati da cifrare.

  3. Semplicità: I protocolli di cifratura simmetrica sono spesso più facili da implementare e comprendere rispetto agli approcci a chiave asimmetrica, il che li rende attraenti per sviluppatori e utenti.

Sfide e limitazioni della crittografia a chiave simmetrica​

Nonostante i vantaggi, la crittografia a chiave simmetrica presenta anche alcune sfide e limitazioni:

  1. Distribuzione e gestione delle chiavi: Nella SKC, sia il mittente sia il destinatario di un messaggio devono avere accesso alla stessa chiave, che deve essere tenuta riservata da soggetti non autorizzati. Se la chiave viene in qualche modo intercettata o compromessa da una terza parte, viene persa anche la sicurezza dei dati cifrati. La distribuzione e la gestione sicura della chiave segreta sono quindi una sfida importante. Tuttavia, la soluzione a questa sfida esula dalla SKC stessa.

  2. Mancanza di non ripudio: Il non ripudio si riferisce alla capacità di dimostrare che una specifica parte ha inviato un messaggio. Nella SKC, poiché la stessa chiave è usata sia per la cifratura sia per la decifratura, non è possibile determinare quale parte abbia creato un particolare ciphertext. Al contrario, la crittografia a chiave asimmetrica fornisce il non ripudio attraverso l'uso della firma digitale.

Per affrontare queste sfide, la crittografia a chiave simmetrica viene spesso utilizzata in combinazione con la crittografia a chiave asimmetrica. Ad esempio, si usa spesso la cifratura a chiave asimmetrica per trasmettere in modo sicuro una chiave segreta condivisa relativamente breve tra mittente e destinatario. Questo consente il successivo utilizzo della cifratura a chiave simmetrica per trasmettere in modo efficiente dati e messaggi molto più grandi.

Informatica quantistica e cifratura a chiave simmetrica: rischi e mitigazione​

La crittografia quantistica offre una promettente via per la mitigazione dei rischi nell'era digitale, con l'adozione di prodotti quantum-safe pronti a proteggere le nostre informazioni dalla minaccia incombente dei progressi nell'informatica quantistica.

Di seguito discutiamo i rischi posti dai computer quantistici agli schemi di cifratura a chiave simmetrica introdotti nella sezione precedente e delineiamo alcuni potenziali percorsi per mitigare tali rischi.

Attacchi crittografici quantistici​

Esistono due distinte classi di minacce quantistiche agli algoritmi crittografici tradizionali:

  1. Attacchi quantistici di forza bruta: Si riferiscono a situazioni in cui l'attaccante usa un computer quantistico per eseguire un algoritmo quantistico specializzato al fine di condurre una ricerca di forza bruta nello spazio delle chiavi di un cifrario simmetrico. La primitiva quantistica più rilevante per consentire questo tipo di attacco è l'algoritmo di Grover.

  2. Attacchi crittoanalitici quantistici: Si riferiscono a situazioni in cui i computer quantistici vengono impiegati per eseguire attacchi crittoanalitici che mirano a recuperare la chiave segreta o il testo in chiaro in modo più efficiente di una ricerca di forza bruta. La possibilità di eseguire con successo attacchi crittoanalitici quantistici dipende da molti fattori legati alla struttura matematica del cifrario analizzato nonché a potenziali debolezze in implementazioni specifiche.

Strategie di mitigazione dei rischi per gli attacchi quantistici​

Prima di discutere le strategie di mitigazione dei rischi per gli attacchi quantistici, introduciamo la nozione di livello di sicurezza di un cifrario crittografico:

Il livello di sicurezza è una misura della difficoltà di violare un cifrario, espressa in termini di numero di operazioni computazionali che una violazione riuscita del cifrario richiederebbe.

Tipicamente, il livello di sicurezza è espresso in bit; in generale, un cifrario offre sicurezza a N bit se richiede O(2N)\mathcal{O}(2^{N}) operazioni per violarlo. Sui computer classici, assumendo che un cifrario simmetrico sia altrimenti crittograficamente sicuro, il livello di sicurezza è pressappoco sinonimo della lunghezza della chiave.

Ad esempio, il livello di sicurezza di AES-128, che presenta una chiave a 128 bit, è generalmente considerato pari a 128 bit perché richiederebbe all'incirca 2128^{128} operazioni per un attaccante che impiega un computer classico per provare tutte le possibili chiavi a 128 bit nello spazio delle chiavi.

Attacchi di forza bruta e mitigazione​

Rischio di attacco quantistico di forza bruta: Un attacco quantistico di forza bruta cambia la valutazione di cui sopra perché l'algoritmo di Grover consente a un attaccante dotato di un adeguato computer quantistico di cercare nello spazio delle chiavi di un cifrario in modo quadraticamente più veloce di qualsiasi computer classico.

Ad esempio, lo stesso attacco di forza bruta su AES-128 con l'algoritmo di Grover potrebbe potenzialmente essere realizzato con sole 264^{64} operazioni. Pertanto il livello di sicurezza di AES-128 si riduce da 128 bit a 64 bit di fronte a un avversario quantistico che esegue la ricerca di Grover. Poiché la potenza computazionale è cresciuta tradizionalmente in modo esponenziale nel tempo, attualmente un livello di sicurezza di 64 bit è considerato insicuro, il che significa che una volta realizzati computer quantistici sufficientemente capaci, AES-128 dovrà essere abbandonato.

Lo stesso tipo di calcolo si applica ad altri cifrari simmetrici a blocchi o a flusso, per cui il livello di sicurezza per una data lunghezza di chiave viene effettivamente dimezzato dall'algoritmo di Grover.

Mitigazione del rischio di attacco quantistico di forza bruta: Le considerazioni di cui sopra implicano che un modo ovvio per resistere agli attacchi quantistici di forza bruta è almeno raddoppiare le lunghezze minime delle chiavi usate per la cifratura a chiave simmetrica.

Pertanto, per garantire una sicurezza a 128 bit rispetto agli attacchi quantistici di forza bruta, si utilizzerebbero semplicemente cifrari come AES-256 o ChaCha20 che impiegano chiavi a 256 bit. Questo è considerato sicuro perché anche con i computer quantistici, eseguire 2128^{128} operazioni per violare i cifrari è impraticabile nel prossimo futuro.

Sebbene teoricamente semplice, questa soluzione proposta di raddoppiare le dimensioni delle chiavi non è priva di costi, poiché chiavi più lunghe implicano un costo computazionale aggiuntivo per le operazioni di cifratura-decifratura di routine, insieme a prestazioni più lente, maggiori requisiti di memoria e un maggiore consumo energetico.

Attacchi crittoanalitici e mitigazione​

Rischio di attacchi crittoanalitici quantistici: Il rischio per i criptosistemi a chiave simmetrica posto dagli attacchi crittoanalitici quantistici è attualmente oggetto di ricerca attiva da parte dei crittografi. La combinazione di informatica classica e quantistica potenzialmente amplia l'insieme di strumenti a disposizione degli attaccanti per sondare le debolezze nella struttura matematica dei cifrari, e una vasta gamma di nuovi attacchi crittoanalitici quantistici sono attualmente proposti. Questi includono le quantizzazioni di tecniche classiche note come la crittoanalisi lineare e differenziale nonché nuove modalità di attacco prive di controparti classiche.

Un recente studio crittpanalitico quantistico dell'Advanced Encryption Standard (AES) ha rilevato che il cifrario rimaneva resistente a vari attacchi crittoanalitici quantistici noti e continuava a mostrare un adeguato margine di sicurezza post-quantistico. Tuttavia, alcuni studi hanno rilevato che vari cifrari simmetrici considerati classicamente sicuri vengono facilmente compromessi dal cosiddetto attacco con testo in chiaro scelto quantistico. Pertanto, sono state proposte anche nuove primitive per la cifratura a chiave simmetrica progettate specificamente per l'era post-quantistica.

Mitigazione del rischio di attacchi crittoanalitici quantistici: Dato che la crittoanalisi quantistica come disciplina è ancora agli inizi, potrebbe accadere che la crittografia simmetrica post-quantistica subisca una rapida evoluzione man mano che emergono nuovi attacchi crittoanalitici quantistici e vengono proposti e valutati nuovi cifrari resistenti ad essi. Pertanto, la migliore strategia per mitigare il rischio di attacchi crittoanalitici quantistici nel prossimo futuro è la agilità crittografica (o crypto-agility). L'agilità crittografica si riferisce alla capacità di un sistema informatico di adottare rapidamente e facilmente primitive crittografiche alternative senza cambiamenti dirompenti all'infrastruttura del sistema.

L'agilità crittografica richiede la capacità di sostituire algoritmi obsoleti usati per la cifratura, la decifratura, le firme digitali o altre funzioni crittografiche con il minimo sforzo e la minima interruzione. I sistemi crypto-agili saranno ben posizionati per gestire la transizione alla crittografia a chiave simmetrica post-quantistica.

Riepilogo​

La crittografia a chiave simmetrica fornisce soluzioni robuste ed efficienti per la protezione delle informazioni digitali. La semplicità di usare la stessa chiave sia per la cifratura sia per la decifratura consente elevate prestazioni e scalabilità, rendendo la SKC adatta a un'ampia gamma di applicazioni.

La sicurezza della SKC si basa sulla resistenza algoritmica agli attacchi crittografici e sulla corretta gestione delle chiavi segrete. I moderni criptosistemi a chiave simmetrica combinano i principi di confusione, diffusione e casualità, unitamente a dimensioni di chiave adeguate, per raggiungere la sicurezza semantica. La gestione delle chiavi segrete, pur essendo cruciale, non può essere realizzata con la sola SKC.

Comprendere le proprietà e le limitazioni della SKC consentirà agli sviluppatori di progettare, implementare e distribuire soluzioni informatiche sicure, adottando approcci che includano chiavi più lunghe ove necessario e l'uso di nuovi algoritmi.

Il progresso dell'informatica quantistica e dell'apprendimento quantistico introduce una nuova dimensione nella crittografia a chiave simmetrica. I computer quantistici hanno il potenziale di svelare la sicurezza fornita dai classici algoritmi a chiave simmetrica, rendendo necessari approcci crittografici resistenti ai quanti per garantire la privacy e la protezione dei dati di fronte all'evoluzione del panorama tecnologico.