Che cos'è un cifrario stream?
Un codice di flusso è un tipo di algoritmo utilizzato nella crittografia dei dati in cui l'origine che deve essere crittografata viene elaborata in base a una sequenza di chiavi che appare casuale. Questo tipo di cifra è alquanto flessibile, nel senso che può variare la crittografia durante l'elaborazione del testo. A volte vengono anche chiamati cifratura di stato perché la crittografia dipende anche dallo stato corrente dell'operazione. A differenza dei cifrari a blocchi, che funzionano su blocchi di dati a 64 bit alla volta, un cifrario a flusso può operare su un singolo bit. Per questo motivo, un flusso può essere elaborato ad alta velocità con una potenza di elaborazione molto ridotta.
Il primo codice di flusso è stato ideato da Gilbert Vernam nel 1917. In seguito Vernam ha anche contribuito a creare un codice noto come pad una tantum, che è una forma di codice di flusso che utilizza una chiave singola per crittografare i dati. In un pad unico, la chiave generata ha la stessa lunghezza dei dati che devono essere crittografati, è completamente casuale e non viene mai più utilizzata in nessun altro luogo, da cui il nome.
Se elaborato in base ai dati da crittografare, generalmente indicato come testo normale, il testo cifrato risultante è impossibile da decrittografare senza la chiave. Il pad di una volta è difficile da gestire nella maggior parte degli scenari e, pertanto, viene utilizzato solo per situazioni molto esclusive. Tuttavia, un codice di flusso è di solito considerato utile, quindi le chiavi sono state accorciate e rese pseudocasuali, nel senso che sono statisticamente casuali ma in realtà non lo sono.
Lo stream cipher ha la capacità di crittografare al volo. In questo modo, è anche facile eseguire semplici cifrature di flusso da parte di persone su carta e penna, mentre una cifratura a blocchi richiede in genere l'uso di un computer per l'elaborazione. Il testo in chiaro scorre attraverso il processo di crittografia insieme al flusso di chiavi, la sequenza pseudocasuale che costituisce la chiave, dove viene convertita ed esce dall'altra estremità come testo cifrato.
Di solito, questa crittografia avviene tramite un'operazione esclusiva o (XOR) sui singoli bit mentre passano attraverso il codice. Un semplice codice XOR utilizza un tipo di disgiunzione logica come base, che essenzialmente dice che il risultato può essere vero se uno degli operandi è vero, ma non entrambi. Ad esempio, se un bit che si sposta attraverso il processo di crittografia è zero o uno e il bit di flusso di chiavi associato non corrisponde, l'output risultante è uno. Se il bit e il bit keystream associato corrispondono, in cui entrambi sono uno o entrambi sono zero, il risultato è zero. Il flusso crittografato di uno e di zero viene quindi decrittografato sull'altra estremità della trasmissione utilizzando lo stesso flusso di chiavi per riconvertire i bit nel loro testo in chiaro originale.
Esistono due tipi di crittografia stream. Utilizzando un metodo sincrono, il flusso di chiavi viene creato separato dal testo in chiaro o dal testo cifrato e quindi unito per fornire la crittografia o la decrittografia. Con questo metodo, entrambe le estremità di invio e ricezione della trasmissione devono rimanere sincronizzate nel punto in cui operano sulla stessa chiave e sulla stessa posizione nella chiave. In caso di problemi, la decrittografia deve ricominciare da capo oppure potrebbero essere presenti dei flag posizionati in modo intermittente nel testo cifrato che indicano nuovi punti di partenza. Una cifra auto-sincronizzante, d'altra parte, aggiornerà il flusso di chiavi in base a un numero di cifre precedenti nel testo cifrato.
Uno dei codici di flusso più utilizzati, chiamato RC4, è stato creato da RSA Data Security®. È concesso in licenza e utilizzato in numerosi prodotti software, nonché il protocollo SSL (Secure Socket Layer) utilizzato nelle comunicazioni Internet sicure e la crittografia WEP (Wire equivalente Privacy) utilizzata con i dispositivi wireless. Un altro codice spesso utilizzato è noto come ORYX, che ha trovato uso nelle trasmissioni di dati di telefoni cellulari che devono essere crittografate. IBM® ha anche sviluppato un metodo di crittografia stream noto come SEAL, che ha trovato uso nella crittografia del disco rigido.