SOSEMANUK
# SOSEMANUK

SOSEMANUK è un cifrario a flusso realizzato da Come Berbain, Olivier Billet, Anne Canteaut, Nicolas Courtois, Henri Gilbert, Louis Goubin, Aline Gouget, Louis Granboulan, Cédric Lauradoux, Marine Minier, Thomas Pornin e Hervé Sibert nel 2003 e che ha partecipato come candidato al eSTREAM, dove è stato selezionato per l'inserimento nel portafoglio del progetto sezione Profilo 1 (implementazione software). La struttura dell'algoritmo è stata influenzata da due cifrari antecedenti il SOSEMANUK: gli autori hanno utilizzato una versione ridotta del cifrario a blocchi Serpent come funzione di inizializzazione del VI ed il registro LFSR del cifrario a flusso SNOW.

## L'algoritmo

SOSEMANUK lavora con chiavi di lunghezza variabile da 128 a 256 bit, anche se la sicurezza è garantita essere sempre di 128 bit, e con un vettore di inizializzazione di 128 bit. L'algoritmo esegue prima la gestione della chiave (key-scheduling) creando 25 sotto-chiavi da 128 bit ciascuna divise in 100 word da 32 bit, dopodiché si passa alla fase definita IV injection, iniezione del VI, durante la quale le sottochiavi sono combinate con il VI. Entrambe le fasi sono realizzate utilizzando la funzione derivata dal Serpent. Lo stato dell'algoritmo è contenuto nell'LFSR, un registro a scorrimento la cui struttura è ripresa direttamente dallo SNOW.

Il cuore centrale del SOSEMANUK è la Finite State Machine (FSM) (altro elemento ripreso dallo SNOW), un componente con due registri da 32 bit: l'input dell'FSM è costituito dall'output del registro LFSR mentre l'output è costituito da word a 32 bit. Quattro di queste word sono raggruppate insieme ed a questo blocco di 128 bit è applicato un passaggio del Serpent: il risultato è combinato mediante XOR con i valori scartati dall'LFSR a formare l'output dell'algoritmo.

## Sicurezza

Nel 2005 Hadi Ahmadi, Taraneh Eghlidos e Shahram Khazaei hanno crittoanalizzato l'algoritmo scovando una debolezza che permetterebbe di recuperare la chiave di cifratura con una complessità di $O(2^{226}),$ che è inferiore al tempo necessario al recupero con forza bruta di una chiave lunga non meno di 226 bit. Questo studio conferma che l'algoritmo può offrire la sicurezza di 128 bit dichiarata dai suoi autori: nonostante ciò è consigliato utilizzare sempre chiavi con lunghezze superiori ai 226 bit.

## Curiosità

SOSEMANUK è una parola del dialetto Cree, parlato da numerose popolazioni di nativi nordamericani, che significa serpente della neve ed indica un tipico gioco praticato nei mesi invernali da dette popolazioni: si tratta di far scivolare un bastone in legno su un banco di neve compatta il più velocemente possibile. Il bastone, scagliato dal giocatore, ricorda lo strisciare di un serpente sul terreno, da cui il nome del gioco. Tradotto in inglese si ha il termine snowsnake, parola composta da snow, neve, e snake, serpente, a richiamare gli algoritmi che hanno influenzato la struttura del SOSEMANUK.

