# SNOW

Con il termine SNOW si indicano due cifrari a flusso sviluppati da Thomas Johansson e Patrik Ekdahl dell'università svedese di Lund denominati SNOW 1.0 e SNOW 2.0. La prima versione dell'algoritmo, originariamente solo SNOW, fu presentata nel 2000 come candidata per il NESSIE (New European Schemes for Signatures, Integrity and Encryption), un progetto europeo per la selezione di primitive crittografiche in essere dal 2000 al 2003. L'algoritmo fu scartato perché non ritenuto sicuro e gli autori rilasciarono una seconda versione nel 2002 riveduta e corretta delle debolezze riscontrate.

## SNOW 1.0

L'algoritmo originale utilizza chiavi lunghe 128 o 256 bit ed un vettore di inizializzazione (VI) opzionale di 64 bit. La procedura inizia con la gestione della chiave: questa viene utilizzata per inizializzare un registro di traslazione LFSR, che rappresenta lo stato interno dell'algoritmo. Il passo successivo è rappresentato dall'azzeramento di 2 registri a 32 bit della Finite State Machine (FSM), una sorta di funzione S-box, e dall'esecuzione di alcuni cicli a vuoto.
A questo punto si può iniziare la cifratura vera e propria: viene generata una chiave di esecuzione a 32 bit che viene combinata tramite XOR con il testo in chiaro per produrre il messaggio cifrato. La generazione avviene combinando l'output della FSM con l'ultimo blocco da 32 bit dell'LFSR. Terminata la cifratura, lo stato interno dell'algoritmo viene aggiornato, così che l'LFSR produca una rotazione e reimposti tutta la catena.
L'operazione di decifratura avviene nella stessa maniera dato che l'algoritmo usato è lo stesso di quello per la cifratura.
L'algoritmo opera in 2 modalità: modalità standard, descritta qui sopra, e modalità VI. Quest'ultima differisce dalla modalità standard per il fatto che il VI passato all'algoritmo viene combinato con la chiave per inizializzare l'LFSR.

## SNOW 2.0

Le debolezze scovate nella struttura dello SNOW originale (vedi sotto) suggerirono agli autori di rivedere il codice dell'algoritmo. Fu così che Johansson e Ekdahl rilasciarono alla fine del 2002 lo SNOW 2.0. Le differenze sono minime: l'FSM adesso prende in input 2 dati a 32 bit invece di uno; il VI è di 128 bit; l'S-box integrata nella FSM è adesso basata su un passaggio dell'algoritmo Rijndael (AES).
Rispetto all'originale, la nuova versione è anche più veloce: 5/6 cicli per byte.

## Sicurezza

Lo SNOW 1.0 fu crittanalizzato da P. Hawkes e G. Rose che dimostrarono come l'analisi di 2$^{95}$ caratteri generati dall'algoritmo permettono di recuperare la chiave con un calcolo complessivo di 2$^{224}$ operazioni. Altri autori riportarono la possibilità di effettuare un attacco discriminante (distinguere cioè l'output del cifrario dall'output di un vero generatore hardware di numeri casuali) della stessa complessità analizzando 2$^{95}$ caratteri generati dallo SNOW. Anche se gli attacchi non erano praticamente applicabili per la complessità richiesta, mostravano comunque una struttura interna dello SNOW affetta da debolezze, cosa che portò gli analisti del NESSIE a scartare l'algoritmo.
Lo SNOW 2.0 risulta invece molto più sicuro e ad oggi non si conosce nessun attacco noto più efficace della semplice forza bruta.