La questione se i cifrari a flusso pratici distribuiscano una chiave realmente casuale coinvolge i principi fondamentali della crittografia, in particolare per quanto riguarda la distinzione tra costrutti teorici come il one-time pad e algoritmi reali progettati per un'implementazione fattibile. Affrontare questa questione richiede chiarimenti su diversi termini: cosa si intende per "chiave realmente casuale", come i cifrari a flusso generano i loro flussi di chiavi e come questi si confrontano con le proprietà e le garanzie di sicurezza del one-time pad.
Una chiave realmente casuale, in termini di teoria dell'informazione, si riferisce a una stringa di bit in cui ogni bit viene scelto in modo indipendente e uniforme in modo casuale. Una chiave di questo tipo è imprevedibile e non riproducibile da alcun avversario. Il one-time pad, archetipo della segretezza perfetta, utilizza una chiave lunga quanto il messaggio, scelta in modo realmente casuale e utilizzata una sola volta. Ogni bit del testo in chiaro viene combinato (solitamente tramite XOR) con il bit corrispondente della chiave, producendo un testo cifrato che è dimostrabilmente sicuro dal punto di vista teorico dell'informazione, ovvero impossibile da violare anche con risorse computazionali infinite.
I cifrari a flusso pratici, come RC4, Salsa20 e la famiglia di cifrari standardizzati in eSTREAM e dal NIST, sono progettati per essere computazionalmente sicuri ed efficienti per l'uso in sistemi reali. La loro struttura prevede in genere una chiave segreta breve e di lunghezza fissa – comunemente 128 o 256 bit – utilizzata come input per un algoritmo che espande questa chiave in un lungo flusso di chiavi pseudocasuale, che viene poi sottoposto a XOR con il testo in chiaro per produrre il testo cifrato.
Il flusso di chiavi nei cifrari a flusso pratici non è realmente casuale. È invece pseudo-casuale: generato deterministicamente dalla chiave segreta dal meccanismo interno di aggiornamento dello stato del cifrario. Questo processo è riproducibile e, soprattutto, deterministico; la stessa chiave e lo stesso vettore di inizializzazione (se utilizzati) producono sempre lo stesso flusso di chiavi. La qualità della pseudo-casualità è misurata dall'incapacità di avversari efficienti di distinguere il flusso di chiavi da una sequenza realmente casuale, data l'assenza di conoscenza della chiave.
Questa differenza ha profonde implicazioni per la sicurezza. La perfetta segretezza del one-time pad deriva dal fatto che la chiave è lunga quanto il messaggio ed è completamente casuale, rendendo ogni possibile testo in chiaro ugualmente probabile per un dato testo cifrato. Al contrario, i cifrari a flusso pratici offrono sicurezza computazionale, il che significa che la loro sicurezza si basa sull'impossibilità computazionale di recuperare la chiave o di distinguere il flusso di chiavi da quello casuale senza la chiave. Se un avversario ha una potenza di calcolo illimitata o se il cifrario viene violato a causa di un difetto o di una debolezza, la sicurezza del sistema crolla.
Per illustrare meglio il concetto, si consideri un esempio pratico che utilizza RC4, un classico cifrario a flusso. RC4 accetta una chiave a 128 bit e ne inizializza lo stato di permutazione interno. Il flusso di chiavi viene generato aggiornando ripetutamente questo stato e producendo in output i byte derivati da esso. Sebbene l'output appaia casuale agli osservatori privi della chiave, in definitiva è determinato interamente dalla chiave iniziale e dall'algoritmo. Se la chiave dovesse ripetersi (come nel famigerato difetto del protocollo WEP), o se si osserva un output sufficiente, diventano possibili attacchi che sfruttano distorsioni statistiche o il ripristino dello stato interno.
Un altro esempio moderno è il cifrario a flusso ChaCha20, che accetta una chiave a 256 bit e un nonce per produrre un flusso di chiavi. Il design di ChaCha20 mira a resistere agli attacchi crittoanalitici noti e l'output supera rigorosi test statistici di casualità. Tuttavia, il flusso di chiavi è ancora pseudo-casuale: se la stessa chiave e lo stesso nonce vengono riutilizzati, viene generato lo stesso flusso di chiavi; se l'algoritmo viene compromesso, gli output potrebbero essere distinti da casuali o, peggio, la chiave potrebbe essere recuperata.
L'impossibilità pratica di distribuire e gestire in modo sicuro chiavi realmente casuali, della lunghezza di un messaggio, rende il one-time pad impraticabile al di fuori di scenari di nicchia. Al contrario, i cifrari a flusso sono progettati per consentire il riutilizzo sicuro delle chiavi in molti messaggi, basandosi sul presupposto che nessun avversario possa recuperare in modo efficiente la chiave o distinguere il flusso di chiavi pseudo-casuali dai dati realmente casuali. Il compromesso è affidarsi alla robustezza computazionale, piuttosto che a garanzie basate sulla teoria dell'informazione.
In termini crittografici, la sicurezza dei cifrari a flusso pratici è formalizzata dal concetto di indistinguibilità. Supponiamo che a un avversario venga concesso l'accesso tramite oracolo a (a) l'output del cifrario a flusso con una chiave segreta o a (b) una stringa realmente casuale della stessa lunghezza. Il cifrario è considerato sicuro se l'avversario non riesce, in tempo polinomiale, a distinguere tra questi due con una probabilità significativamente migliore rispetto a quella di una stima casuale. Questa è una garanzia molto più debole rispetto alla perfetta segretezza del one-time pad.
Per riassumere le principali differenze attraverso degli esempi:
1. Blocco una tantumAlice e Bob condividono una chiave realmente casuale di 1 gigabyte, che usano per crittografare un messaggio di 1 gigabyte. Il testo cifrato non rivela assolutamente alcuna informazione sul testo in chiaro, indipendentemente dalle risorse avversarie. La distribuzione delle chiavi è il collo di bottiglia, poiché la chiave deve essere lunga almeno quanto il messaggio e non deve mai essere riutilizzata.
2. Cifrario a flusso pratico (ad esempio, ChaCha20)Alice e Bob condividono una chiave segreta a 256 bit. Per ogni messaggio, Alice seleziona un nonce univoco e utilizza ChaCha20 per generare un flusso di chiavi, crittografando il messaggio tramite XOR. Il flusso di chiavi è indistinguibile da un avversario casuale o da uno in tempo polinomiale, supponendo che ChaCha20 rimanga intatto. Se la stessa chiave e lo stesso nonce vengono riutilizzati, la sicurezza è compromessa.
Vale la pena notare che alcuni sistemi tentano di colmare il divario tra casualità e praticità utilizzando generatori di numeri pseudo-casuali crittograficamente sicuri (CSPRNG) generati da rumore ambientale o da fonti casuali hardware. Tuttavia, una volta che l'entropia del mondo fisico è stata estratta in un seed, l'output del generatore è ancora pseudo-casuale, non veramente casuale nel senso della teoria dell'informazione.
I cifrari a flusso pratici non distribuiscono una chiave o un flusso di chiavi realmente casuale. Espandono una chiave breve e gestibile in una lunga sequenza pseudocasuale computazionalmente indistinguibile da una casuale, a condizione che il cifrario rimanga sicuro e la chiave sia segreta. Il one-time pad, da solo, raggiunge la segretezza perfetta distribuendo una chiave realmente casuale, della lunghezza di un messaggio, ma a costo di requisiti di gestione e distribuzione delle chiavi poco pratici. Nei sistemi crittografici reali, la sicurezza è in definitiva limitata dai presupposti di robustezza computazionale e dall'assenza di innovazioni crittoanalitiche, non dalla perfetta casualità.
Altre domande e risposte recenti riguardanti Fondamenti di crittografia classica EITC/IS/CCF:
- La crittografia a chiave pubblica è stata introdotta per essere utilizzata nella crittografia?
- In crittografia, l'insieme di tutte le possibili chiavi di un particolare protocollo crittografico viene definito spazio delle chiavi?
- In un cifrario a scorrimento, le lettere alla fine dell'alfabeto vengono sostituite con le lettere all'inizio dell'alfabeto secondo l'aritmetica modulare?
- Cosa dovrebbe includere un cifrario a blocchi secondo Shannon?
- Il protocollo DES è stato introdotto per migliorare la sicurezza dei sistemi crittografici AES?
- La sicurezza dei cifrari a blocchi dipende dalla combinazione ripetuta di operazioni di confusione e diffusione?
- Le funzioni di crittografia e decrittografia devono essere tenute segrete affinché il protocollo crittografico rimanga sicuro?
- La crittoanalisi può essere utilizzata per comunicare in modo sicuro su un canale di comunicazione non sicuro?
- Internet, GSM e le reti wireless appartengono ai canali di comunicazione non sicuri?
- Una ricerca esaustiva delle chiavi è efficace contro i cifrari a sostituzione?
Visualizza altre domande e risposte in EITC/IS/CCF Classical Cryptography Fundamentals