Protocollo di Criptazione SHADO


Il protocollo di criptazione SHADO è stato sviluppato da Keganzo allo scopo di avere un protocollo sicuro, semplice e veloce per proteggere le comunicazioni su un canale insicuro, come internet.

Il protocollo di criptazione SHADO è un nuovissimo tipo di cifrario a flusso sincrono1.

Un cifrario a flusso sincrono può essere usato per generare in modo seriale molte keystream2 a partire dallo stesso vettore di inizializzazione casuale (IV)3.

Ogni keystream può essere usato per criptare un messaggio facendone lo XOR4 con i caratteri del testo in chiaro per produrre il testo cifrato.

Il cifrario a flusso è un'approssimazione di un cifrario teoricamente inviolabile, il cifrario di Vernam5, la cui sicurezza è stata dimostrata matematicamente nel 1949 da Shannon ma che rimane piuttosto complicato da implementare praticamente.

La principale differenza con il cifrario a flusso sta nel fatto che un cifrario di Vernam usa un keystream composto di caratteri realmente casuali di lunghezza almeno pari al testo in chiaro, che non viene più riutilizzato.

Perché un cifrario a flusso sia sicuro, il generatore di numeri pseudo-casuali (PRNG) deve avere sia un periodo molto elevato sia un IV di lunghezza almeno pari a 256 bit, affinché sia impossibile ricavarne lo stato interno dai keystream. Inoltre, i keystream non devono presentare distorsioni statistiche che potrebbero portare a distinguere un flusso deterministico dal rumore casuale.

Una caratteristica notevole di un cifrario a flusso sincrono è che mittente e destinatario devono essere perfettamente sincronizzati perché la decriptazione abbia successo. Se i caratteri del messaggio vengono aggiunti, modificati o rimossi durante la trasmissione, si perde sincronizzazione e viene subito rilevato il tentativo di manomissione.

Il PRNG di Mersenne-Twister (MT) è un ottimo candidato per essere il fulcro di un cifrario a flusso in quanto genera velocemente interi pseudo-casuali di elevata qualità, ha un periodo incredibilmente vasto (219937 - 1) e un IV che può arrivare a 2048 bit di lunghezza. Inoltre, passa numerosi test di casualità statistica come il gruppo di test Diehard6,7.

Tuttavia, poiché MT è basato su una ricorsione lineare e dunque l'intera, enorme sequenza di numeri pseudo-casuali può essere predetta a partire da una sotto-sequenza di appena 624 numeri8, deve essere realizzato un hashing dell'output per rendere MT crittograficamente sicuro9,10.

Come Funziona la Criptazione


Scambio di Chiavi di Sessione Uniche con Diffie-Hellman + ElGamal

All'inizio di ogni sessione di comunicazione le due parti interagenti generano al volo IV casuali a 1600 bit crittograficamente sicuri (realizzando la segretezza perfetta11). Negoziano questi IV tramite il protocollo di Diffie-Hellman (DH)12 con Autenticazione di ElGamal (EA)13, i cui parametri sono scelti in accordo con la letteratura scientifica (e.g. numeri primi casuali di ordine 10100). La componente ElGamal assicura che le parti possano autenticarsi e fidarsi l'una dell'altra evitando cosí possibili attacchi di manomissione o Man-in-the-Middle (MitM), il quale rappresenterebbe l'unica vulnerabilità del protocollo DH.


Il Cifrario a Flusso di SHADO

Ciascuna delle parti interagenti implementa un cifrario a flusso come quello schematizzato di seguito, composto da due PRNG di Mersenne-Twister la cui interazione produce un testo cifrato con keystream pseudo-casuali crittograficamente sicuri.


Il Generatore Mersenne-Twister di Keystream

La prima metà dell'IV scambiato viene utilizzato da ciascuna parte per inizializzare con una chiave a 800 bit un PRNG di Mersenne-Twister (che abbiamo denominato MT di Keystream o MTK). Il compito dell'MTK è quello di generare a runtime i keystream monouso per criptare ogni messaggio scambiato tra le parti (e.g., crittografia simmetrica), imitando così il comportamento di un cifrario di Vernam. L'output dell'MTK viene immesso in un moltiplicatore, che serve a comprimere iterativamente l'informazione sulla sequenza dell'MT e renderla crittograficamente sicura.


Il Generatore Mersenne-Twister di Avvelenamento

Allo scopo di rendere l'MTK crittograficamente sicuro, un'ulteriore MT (che abbiamo denominato MT di Avvelenamento o MTA) viene inizializzata all'inizio della sessione con la seconda metà dell'IV scambiato da ciascuna parte. L'MTA determina il numero di estrazioni dell'MTK che vengono moltiplicate tra loro iterativamente. A ogni iterazione, solo gli 8 bit più significativi del numero risultante vengono reimmessi nel moltiplicatore. Tuttavia, invece di prendere una sequenza prefissata di 8 estrazioni, come realizzato da Matsumoto et al.14, il nostro MTA moltiplica un numero casuale (compreso tra 8 e 32) di estrazioni dell'MTK. In questo modo, la sotto-sequenza compressa di numeri pseudo-casuali che produce il carattere del keystream finale del PRNG è sufficientemente impredicibile contro l'exploit della sequenza di 624 numeri. Non solo: se anche dovesse esaurirsi la sequenza di numeri pseudo-casuali prodotta dall'MTK, il ciclo successivo produrrebbe numeri avvelenati diversi, ovvero una sequenza pseudo-casuale completamente nuova, e così per ogni ciclo successivo di periodo (219937 - 1).

Protezione Contro Attacchi Noti


Per decriptare un messaggio o un file di SHADO serve conoscere gli IV sia degli MTK sia degli MTA, nonché gli esatti keystream monouso estratti dagli MTK avvelenati dagli MTA. Qualsiasi deviazione dalle corrette sequenze pseudo-casuali, infatti, produce un errore di decriptazione che viene interpretato da entrambe le parti come un tentativo di violare la comunicazione. Inoltre, a causa del principio della segretezza perfetta, azzeccare la giusta sequenza di una sessione non permette di decriptare né le comunicazioni future né quelle passate.


Forza Bruta15

A causa delle proprietà matematiche della criptografia basata su keystream monouso SHADO non può essere violato da un attacco forza bruta.


Collisione16 e altre tecniche di Crittanalisi17

Perché gli attacchi abbiano successo l'attaccante deve avere il controllo dell'input della funzione di hashing. Questo però non è realizzabile in SHADO perché la funzione di hashing viene inizializzata in modo random con uno scambio di chiavi sicuro tramite Diffie-Hellman. Inoltre, SHADO è sicuro contro attacchi con tecniche di crittanalisi (attacco con testo in chiaro noto, attacco con testo in chiaro scelto, attacco con testo cifrato scelto) a causa del periodo incredibilmente vasto degli MTK e dell'avvelenamento casuale prodotto dagli MTA sulle estrazioni dei keystream monouso.


Replay18

SHADO è immune a un attacco replay perché qualsiasi deviazione dalle sequenze sincronizzate delle MTK avvelenate dalle MTA darebbero luogo a un errore di decriptazione. Ripresentare un messaggio criptato, quindi, porterebbe all'individuazione del tentativo di manomissione.


Man-in-the-Middle19

SHADO è immune anche a un attacco man-in-the-middle perché usa un algoritmo di criptazione a chiave asimmetrica di ElGamal per l'autenticazione reciproca delle parti e il riconoscimento di eventuali intrusi malevoli.

Riferimenti