Tecniche e algoritmi di cifratura
Dalla rivista:
Elettronica Oggi
Per la realizzazione di algoritmi di cifratura a chiave simmetrica, in generale, si può distinguere fra due diversi approcci, e cioè la cifratura a blocchi e quella di tipo stream (cifratura a flusso). Nella cifratura a blocchi, gli algoritmi elaborano interi blocchi di caratteri alla volta e esempi di questo tipo di cifratura sono DES, AES, IDEA.
Nella cifratura stream, invece, si codificano singoli caratteri, uno alla volta, con una trasformazione time-varying. Esempi di questo tipo di cifratura sono RC4, SNOW, A5, ZUC, Grain.
I cifrari a blocchi sono probabilmente più diffusi negli attuali standard e offrono primitive più versatili, ma quelli stream però hanno diverse caratteristiche interessanti e rappresentano un trend in fase di crescita. Gli algoritmi stream, infatti, sono generalmente più veloci e possono essere efficientemente implementati in hardware. Hanno inoltre una limitata propagazione di errore e sono particolarmente indicati per applicazioni dove i caratteri devono essere gestiti singolarmente (cifratura on the fly con ritardi minimi).
.jpg)
Fig. 1 – Diagramma di funzionamento dell’algoritmo Rabbit
Queste caratteristiche sono molto importanti per determinati settori, come per esempio quelli delle telecomunicazioni. La disponibilità di un hardware adeguato, soprattutto dal punto di vista delle memorie, non è più un problema, visto che i componenti hardware stanno diventano sempre più economici in rapporto alle loro prestazioni/capacità. Fra i progetti più recenti uno probabilmente dei più interessanti è rappresentato da eSTREAM.
Il progetto eSTREAM
eSTREAM è il nome di un progetto europeo pluriennale coordinato dal consorzio ECRYPT (European Network of Excellence for Cryptology) con l’obbiettivo di identificare nuovi cifrari di tipo stream. L’ECRYPT fa parte di un programma costituito dal Settimo Programma Quadro (7PQ) della Commissione europea. L’obbiettivo era quello di focalizzarsi sulla ricerca relativa al tema della sicurezza informatica, con un lavoro concentrato su cinque laboratori virtuali denominati rispettivamente STVL (Symmetric Techniques Virtual Lab), PROVILAB (Protocols Virtual Lab), WAVILA (Watermarking and Perceptual Hashing Virtual Lab)e VAMPIRE (Secure and Efficient Implementations Virtual Lab).
All’interno di ECRYPT, successivamente rinominato ECRYPT I visto che dal 2008 è attivo ECRYPT II, è stato realizzato il progetto eSTREAM.
Iniziato ufficialmente nel novembre del 2004, eSTREAM è durato 4 anni e il lavoro ha permesso di rilasciare un portafoglio di cifrari stream di nuova generazione suddiviso in due famiglie, chiamate Profili, una ottimizzata per essere implementata via software e l’altra destinata invece all’implementazione in hardware.
Il portafoglio eSTREAM nel 2012 (è stato rivisto nel settembre 2008) ospita nel primo Profilo gli algoritmi con chiave a 128 bit HC-128, Rabbit, Salsa20/12 e Sosemanuk. Fanno parte del secondo profilo quelli con chiave a 80 bit gli algoritmi Grain v1, MICKEY 2.0 e Trivium.
La versione del portafoglio eSTREAM che supporta chiavi a lunghezza estesa comprende invece gli algoritmi con chiave a 256 bit HC-256 e Salsa20/12 e, nel secondo profilo con chiavi a 128 bit MICKEY 128 2.0.
Gli algoritmi del Profilo1
Il primo algoritmo del Profilo 1 è l’HC-128, progettato da Hongjun Wu, che si basa su una chiave a 128 bit e un vettore di inizializzazione ugualmente a 128 bit. Il suo funzionamento prevede l’impiego di due tabelle, ciascuna delle quali dotata di 512 elementi a 32 bit. A ogni step, un elemento delle tabelle viene aggiornato usando una funzione non lineare di feedback.
Grazie al fatto che questo algoritmo è tipo table-driven, l’HC-128 offre prestazioni molto elevate con applicazioni software che elaborano elevate quantità di dati.
Lo svantaggio principale, invece, risiede nel tempo per inizializzare il cifrario, cosa che diventa particolarmente evidente quando si devono cifrare piccole quantità di dati.
Per questo algoritmo non sono previste IP e il sistema HC-128 è stato integrato nelle più recenti versioni di CyaSSL, un’implementazione open source del protocollo SSL/TLS.
Il secondo algoritmo si chiama Rabbit e utilizza una chiave a 128 bit, mentre il vettore di inizializzazione è a 64 bit. Vengono utilizzati anche 8 registri di stato a 32 bit e 8 contatori, sempre a 32 bit, in modo da assicurare una cifratura efficace tramite alcune operazioni matematiche di base.
Anche in questo caso ci sono alcune limitazioni marginali legate all’inizializzazione che però hanno un effetto contenuto anche se si elabora un quantitativo limitato di dati. Anche se questo algoritmo è stato brevettato, in base a quanto riportato dai documenti ECRYPT i progettisti hanno dichiarato che il suo uso è gratuito. É descritto inoltre dalla normativa ISO / IEC 18033-4 ed è stato incluso anche nelle recenti versioni di CyaSSL.
Salsa20/12 è un algoritmo software oriented di Bernstein. Per quanto riguarda il suo funzionamento, si utilizzano una chiave, un nonce (un numero del messaggio unico) a 64 bit, un contatore a 64 bit e quattro costanti a 32 bit in modo da realizzare lo stato iniziale a 512 bit della cifratura. Dopo un certo numero di iterazioni di una funzione dell’algoritmo viene prodotto un output a 512 bit che è la combinazione fra i diversi elementi (chiave, nonce e contatore).
Ogni blocco in uscita è una combinazione indipendente dalla chiave, nonce, e contatore e, poiché non c’è concatenamento tra i blocchi, il funzionamento risulta analogo a quello di un codice a blocchi. Esistono tre varianti di Salsa/20, ciascuna caratterizzata da un diverso rapporto fra sicurezza e performance. Anche per questo algoritmo il progettista non richiede la proprietà intellettuale.
L’algoritmo Sosenumak ha invece una chiave di lunghezza variabile, da 128 a 256 bit, con un valore iniziale di 128 bit. Il design è relativamente simile a quello dell’algoritmo stream SNOW 2, e a quello dell’algoritmo a blocchi Serpent, introducendo però dei vantaggi che compensano alcune delle loro limitazioni. Come SNOW 2.0, Sosenumak può contare infatti due componenti principali, un registro di feedback lineare di shift chiamato LSFR e una macchina a stati finiti chiamata FSM.
Il primo opera con word a 32 bit e ha lunghezza 10. Alcuni step del funzionamento prevedono che a ogni ciclo di clock sia elaborata una nuova word a 32 bit. L’FSM , invece, ha due registri di memoria a 32 bit. A ogni step l’FSM prende come input alcune word dall’LFSR, aggiorna il registro della memoria e produce un output a 32 bit. Ogni quattro word consecutive in uscita dall’FSM si utilizza una trasformazione in uscita. Anche l’utilizzo di Sosenumak è gratuito per qualsiasi applicazione.
Gli algoritmi del Profilo 2
Per chi si occupa di hardware, gli algoritmi del Profilo 2 sono quelli più interessanti, poiché sono stati progettati per essere particolarmente efficienti dal punto di vista delle risorse disponibili. Questi algoritmi sono stati concepiti per utilizzare chiavi a 80 bit, anche se alcuni, opzionalmente, supportano chiavi a 128 bit e vettori di inizializzazione a 32 oppure a 64 bit.
Le specifiche di Grain v1 indicano due sistemi di cifratura stream che supportano chiavi a 80 bit con vettore di inizializzazione a 64 bit e chiavi a 128 bit con vettori di inizializzazione a 80 bit.
La caratteristica principale di questa famiglia di algoritmi è costituita dalla disponibilità di due shift register, uno con feedback lineare e l’altro con feedback non lineare. Questi registri e i bit in uscita, sono associati tramite funzioni booleane. Anche per questo algoritmo non c’è IP per il suo utilizzo.
.jpg)
Fig. 2 – Schema dell’algoritmo MICKEY 2.0
MICKEY 2.0 è l’acronimo di Irregular Clocking KEYstream generator, ed è un algoritmo basato su shift register a 100 bit, uno lineare e l’altro non lineare, ciascuno dei quali ha un clock che è regolato irregolarmente dall’altro. Il particolare meccanismo di clocking contribuisce a rendere più sicuro l’algoritmo. I progettisti hanno anche realizzato le specifiche di una versione chiamata MICKEY-128 2.0 che utilizza una chiave a 128 bit e un vettore di inizializzazione sempre a 128 bit.
MICKEY 2.0 può essere implementato utilizzando un hardware ridotto, rendendolo un candidato molto interessate per applicazioni dove sia richiesto un low count gate oppure bassi consumi. Un inconveniente, invece, è che proprio per il meccanismo irregolare di clock non può essere facilmente parallelizzato. Sia MICKEY 2.0 sia MICKEY-128 2.0 sono ad uso gratuito.
Trivium, infine, è un algoritmo stream sincrono, progettato per generare fino a 2 alla 64 bit di keystream da una chiave a 80 bit e un vettore di inizializzazione 80 bit. Questo algoritmo richiede una inizializzazione e lo stato interno del generatori di keystream viene inizializzato utilizzano la chiave segreta e il vettore di inizializzazione. L’inizializzazione richiede 1152 step della procedura di clocking e quindi viene generato il keystream dove in ogni ciclo di clock un bit del keystream viene prodotto in uscita. Anche per Trivium non è stata richiesta alcuna proprietà intellettuale.
Francesco Ferrari


