Modalità di funzionamento del cifratore a blocchi

Modalità di crittografia autenticata con dati aggiuntivi (AEAD)Modifica

Articolo principale: Crittografia autenticata

Un certo numero di modi di funzionamento sono stati progettati per combinare segretezza e autenticazione in una singola primitiva crittografica. Esempi di tali modalità sono l’extended cipher block chaining (XCBC), l’integrity-aware cipher block chaining (IACBC), l’integrity-aware parallelizable mode (IAPM), OCB, EAX, CWC, CCM, e GCM. I modi di crittografia autenticata sono classificati come modi a passaggio singolo o modi a doppio passaggio. Alcuni algoritmi di crittografia autenticata a passaggio singolo, come il modo OCB, sono gravati da brevetti, mentre altri sono stati specificamente progettati e rilasciati in modo da evitare tale gravame.

Inoltre, alcuni modi permettono anche l’autenticazione di dati associati non crittografati, e questi sono chiamati schemi AEAD (crittografia autenticata con dati associati). Per esempio, la modalità EAX è uno schema AEAD a doppio passaggio, mentre la modalità OCB è a passaggio singolo.

Galois/counter (GCM)Edit

GCM

Galois/counter

Crittografia parallelizzabile

Decifratura parallelizzabile

Accesso in lettura casuale

Il modo Galois/contatore (GCM) combina il ben noto modonoto modo contatore di crittografia con il nuovo modo Galois di autenticazione. La caratteristica chiave è la facilità di calcolo parallelo della moltiplicazione del campo di Galois usata per l’autenticazione. Questa caratteristica permette un throughput più elevato rispetto agli algoritmi di crittografia.

GCM è definito per i cifrari a blocchi con una dimensione del blocco di 128 bit. Il Galois message authentication code (GMAC) è una variante di solo autenticazione del GCM che può formare un codice incrementale di autenticazione del messaggio. Sia GCM che GMAC possono accettare vettori di inizializzazione di lunghezza arbitraria. Il GCM può trarre pieno vantaggio dall’elaborazione parallela e l’implementazione del GCM può fare un uso efficiente di una pipeline di istruzioni o di una pipeline hardware. Il modo di funzionamento CBC incorre in stalli della pipeline che ostacolano la sua efficienza e le sue prestazioni.

Come in CTR, i blocchi sono numerati in modo sequenziale, e poi questo numero di blocco è combinato con un IV e criptato con un cifratore a blocchi E, solitamente AES. Il risultato di questa crittografia è poi XORed con il testo in chiaro per produrre il testo cifrato. Come tutti i modi di contatore, questo è essenzialmente un cifratore a flusso, e quindi è essenziale che un IV diverso sia usato per ogni flusso che viene criptato.

I blocchi di testo cifrato sono considerati coefficienti di un polinomio che viene poi valutato in un punto H dipendente dalla chiave, usando l’aritmetica a campo finito. Il risultato viene poi criptato, producendo un tag di autenticazione che può essere utilizzato per verificare l’integrità dei dati. Il testo crittografato contiene quindi il IV, il testo cifrato e l’etichetta di autenticazione.

Contatore con codice di autenticazione del messaggio a catena cifrata (CCM)Edit

Il contatore con codice di autenticazione del messaggio a catena cifrata (contatore con CBC-MAC; CCM) è un algoritmo di crittografia autenticata progettato per fornire sia autenticazione che riservatezza. La modalità CCM è definita solo per cifrari a blocchi con una lunghezza di blocco di 128 bit.

Vettore di inizializzazione sintetico (SIV)Edit

Il vettore di inizializzazione sintetico (SIV) è una modalità di cifratura a blocchi resistente al nonce-misuse.

SIV sintetizza un IV interno usando una funzione pseudorandom S2V. S2V è un hash a chiave basato su CMAC, e l’input alla funzione è:

  • Dati autenticati aggiuntivi (zero, uno o molti campi AAD sono supportati)
  • Plaintext
  • Chiave di autenticazione (K1).

SIV cripta l’uscita S2V e il testo in chiaro usando AES-CTR, con la chiave di crittografia (K2).

SIV può supportare la crittografia autenticata esterna basata su nonce, nel qual caso uno dei campi di dati autenticati viene utilizzato per questo scopo. RFC5297 specifica che per scopi di interoperabilità l’ultimo campo di dati autenticati dovrebbe essere usato nonce esterno.

A causa dell’uso di due chiavi, la chiave di autenticazione K1 e la chiave di crittografia K2, gli schemi di denominazione delle varianti SIV AEAD possono portare a qualche confusione; per esempio AEAD_AES_SIV_CMAC_256 si riferisce a AES-SIV con due chiavi AES-128 e non AES-256.

AES-GCM-SIVEdit

AES-GCM-SIV è un modo di funzionamento per l’Advanced Encryption Standard che fornisce prestazioni simili al modo Galois/counter così come la resistenza all’abuso in caso di riutilizzo di un nonce crittografico. La costruzione è definita in RFC 8452.

AES-GCM-SIV sintetizza l’IV interno. Deriva un hash dei dati supplementari autenticati e del testo in chiaro usando la funzione hash POLYVAL Galois. L’hash è poi criptato con una chiave AES, e usato come tag di autenticazione e vettore di inizializzazione AES-CTR.

AES-GCM-SIV è un miglioramento rispetto all’algoritmo GCM-SIV, che ha un nome molto simile, con alcuni piccoli cambiamenti (ad es. come AES-CTR è inizializzato), ma che apporta benefici pratici alla sua sicurezza “Questa aggiunta permette di criptare fino a 250 messaggi con la stessa chiave, rispetto alla significativa limitazione di soli 232 messaggi che erano consentiti con GCM-SIV.”

Modalità di sola riservatezzaModifica

Sono state definite molte modalità di funzionamento. Alcuni di questi sono descritti di seguito. Lo scopo dei modi di cifratura è quello di mascherare gli schemi che esistono nei dati cifrati, come illustrato nella descrizione della debolezza dell’ECB.

I diversi modi di cifratura mascherano gli schemi mettendo in cascata le uscite del blocco di cifratura o altre variabili globalmente deterministiche nel successivo blocco di cifratura. Gli ingressi dei modi elencati sono riassunti nella seguente tabella:

Sommario dei modi
Modo Formule Testo cifrato
Codice elettronico (ECB) Yi = F(PlainTexti, Chiave) Yi
Cifra a blocchi (CBC) Yi = PlainTexti XOR Ciphertexti-1 F(Y, Key); Ciphertext0 = IV
Propagante CBC (PCBC) Yi = PlainTexti XOR (Ciphertexti-1 XOR PlainTexti-1) F(Y, Key); Ciphertext0 = IV
Risultato di cifratura (CFB) Yi = Ciphertexti-1 Plaintext XOR F(Y, Key); Ciphertext0 = IV
Risposta in uscita (OFB) Yi = F(Yi-1, Chiave); Y0 = F(IV, Key) Plaintext XOR Yi
Counter (CTR) Yi = F(IV + g(i), Key); IV = token() Plaintext XOR Yi

Nota: g(i) è una qualsiasi funzione deterministica, spesso la funzione identità.

Codice elettronico (ECB)Edit

ECB

Codice elettronico

Codice parallelizzabile

Decodifica parallelizzabile

Accesso in lettura casuale

Il più semplice dei modi di crittografia è il modo electronic codebook (ECB) (dal nome del codebook fisico convenzionale). Il messaggio è diviso in blocchi, e ogni blocco è criptato separatamente.

Lo svantaggio di questo metodo è la mancanza di diffusione. Poiché ECB cripta blocchi di testo in chiaro identici in blocchi di testo cifrato identici, non nasconde bene gli schemi di dati. ECB non è raccomandato per l’uso nei protocolli crittografici.

Un esempio impressionante del grado in cui ECB può lasciare schemi di dati in chiaro nel testo cifrato può essere visto quando la modalità ECB è usata per criptare un’immagine bitmap che usa grandi aree di colore uniforme. Mentre il colore di ogni singolo pixel è criptato, l’immagine complessiva può ancora essere discernuta, poiché il modello di pixel identicamente colorati nell’originale rimane nella versione criptata.

Immagine originale

Crittografata usando la modalità ECB

Modalità diverse da ECB risultano in pseudo-casualità

La terza immagine è come potrebbe apparire l’immagine crittografata con CBC, CTR o uno qualsiasi degli altri modi più sicuri – indistinguibile dal rumore casuale. Si noti che l’aspetto casuale della terza immagine non assicura che l’immagine sia stata crittografata in modo sicuro; sono stati sviluppati molti tipi di crittografia non sicura che produrrebbero un output altrettanto “casuale”.

La modalità ECB può anche rendere i protocolli senza protezione dell’integrità ancora più suscettibili agli attacchi replay, poiché ogni blocco viene decrittato esattamente nello stesso modo.

Cifra a blocchi (CBC)Edit

CBC

Cifra a blocchi

Cifra parallelizzabile

No

Decifratura parallelizzabile

Accesso casuale in lettura

Ehrsam, Meyer, Smith e Tuchman hanno inventato il modo di funzionamento CBC (cipher block chaining) nel 1976. In modalità CBC, ogni blocco di testo in chiaro è XORed con il precedente blocco di testo cifrato prima di essere criptato. In questo modo, ogni blocco di testo cifrato dipende da tutti i blocchi di testo in chiaro elaborati fino a quel punto. Per rendere unico ogni messaggio, un vettore di inizializzazione deve essere usato nel primo blocco.

Se il primo blocco ha indice 1, la formula matematica per la crittografia CBC è

C i = E K ( P i ⊕ C i – 1 ) , {\displaystyle C_{i}=E_{K}(P_{i}\oplus C_{i-1}),}

C 0 = I V , {

mentre la formula matematica per la decriptazione CBC è

P i = D K ( C i ) ⊕ C i – 1 , {displaystyle P_{i}=D_{K}(C_{i})\oplus C_{i-1},}

C 0 = I V . {C_{0}=IV.}

EsempioModifica

CBC è stato il modo più comunemente usato. I suoi principali svantaggi sono che la crittografia è sequenziale (cioè, non può essere parallelizzata), e che il messaggio deve essere imbottito ad un multiplo della dimensione del blocco cifrante. Un modo per gestire quest’ultimo problema è il metodo noto come ciphertext stealing. Si noti che un cambiamento di un bit in un testo in chiaro o in un vettore di inizializzazione (IV) influisce su tutti i successivi blocchi di testo cifrato.

Decifrare con un IV errato causa la corruzione del primo blocco di testo in chiaro ma i successivi blocchi di testo in chiaro saranno corretti. Questo perché ogni blocco è XORed con il testo cifrato del blocco precedente, non con il testo in chiaro, quindi non è necessario decifrare il blocco precedente prima di usarlo come IV per la decifrazione di quello attuale. Ciò significa che un blocco di testo in chiaro può essere recuperato da due blocchi adiacenti di testo cifrato. Di conseguenza, la decrittazione può essere parallelizzata. Si noti che un cambiamento di un bit nel testo cifrato causa la completa corruzione del blocco di testo in chiaro corrispondente, e inverte il bit corrispondente nel blocco di testo in chiaro seguente, ma il resto dei blocchi rimane intatto. Questa peculiarità è sfruttata in diversi attacchi padding oracle, come POODLE.

I vettori di inizializzazione esplicita sfruttano questa proprietà aggiungendo un singolo blocco casuale al testo in chiaro. La crittografia viene eseguita normalmente, tranne che l’IV non ha bisogno di essere comunicato alla routine di decrittazione. Qualunque sia l’IV utilizzato per la decrittazione, solo il blocco casuale è “corrotto”. Può essere tranquillamente scartato e il resto della decrittazione è il testo in chiaro originale.

Propagazione del blocco cifrante (PCBC)Edit

PCBC

Propagazione del blocco cifrante

Crittografia parallelizzabile

No

Decifratura parallelizzabile

No

Accesso in lettura casuale

No

La modalità di concatenamento a blocchi della cifratura propagante o cifratura del testo in chiaroè stata progettata per far sì che piccoli cambiamenti nel testo cifrato si propaghino indefinitamente durante la decrittazione, così come quando si cripta. In modalità PCBC, ogni blocco di testo in chiaro è XORed sia con il precedente blocco di testo in chiaro che con il precedente blocco di testo cifrato prima di essere criptato. Come nella modalità CBC, un vettore di inizializzazione è usato nel primo blocco.

Gli algoritmi di cifratura e decifratura sono i seguenti:

C i = E K ( P i ⊕ P i – 1 ⊕ C i – 1 ) , P 0 ⊕ C 0 = I V , {\displaystyle C_{i}=E_{K}(P_{i}\plus P_{i-1}\plus C_{i-1}),P_{0}{ C_{0}=IV,}

P i = D K ( C i ) ⊕ P i – 1 ⊕ C i – 1 , P 0 ⊕ C 0 = I V . {\displaystyle P_{i}=D_{K}(C_{i})\plus P_{i-1}{ C_{i-1},P_{0}{ C_{0}=IV.}

PCBC è usato in Kerberos v4 e WASTE, in particolare, ma altrimenti non è comune. Su un messaggio cifrato in modalità PCBC, se due blocchi di testo cifrato adiacenti vengono scambiati, ciò non influisce sulla decifrazione dei blocchi successivi. Per questo motivo, PCBC non è usato in Kerberos v5.

Feedback crittografico (CFB)Edit

Full-blocco CFBEdit

CFB

Cifra di ritorno

Crittografia parallelizzabile

No

Decifratura parallelizzabile

Accesso in lettura casuale

La modalità CFB (cipher feedback), nella sua forma più semplice è utilizzare l’intera uscita del cifratore a blocchi. In questa variante, è molto simile al CBC, rende un cifratore a blocchi in un cifratore a flusso auto-sincronizzante. La decrittazione CFB in questa variante è quasi identica alla crittografia CBC eseguita al contrario:

C i = { IV , i = 0 E K ( C i – 1 ) ⊕ P i , altrimenti P i = E K ( C i – 1 ) ⊕ C i , {\displaystyle {\begin{aligned}C_{i}&={\begin{caso}{{{testo{IV}},&i=0\\E_{K}(C_{i-1})\oplus P_{i},&{\text{otherwise}}\end{cases}}\\P_{i}&=E_{K}(C_{i-1})\oplus C_{i},\end{aligned}}}

CFB-1, CFB-8, CFB-64, CFB-128, ecc.Edit

NIST SP800-38A definisce CFB con un bit-width. Il modo CFB richiede anche un parametro intero, denotato s, tale che 1 ≤ s ≤ b. Nella specifica del modo CFB qui sotto, ogni segmento di testo in chiaro (Pj) e segmento di testo cifrato (Cj) consiste di s bit. Il valore di s è talvolta incorporato nel nome della modalità, ad esempio, la modalità CFB a 1 bit, la modalità CFB a 8 bit, la modalità CFB a 64 bit, o la modalità CFB a 128 bit.

Queste modalità troncheranno l’output del cifratore a blocchi sottostante.

I 0 = IV . {\displaystyle I_{0}={\text{IV}}.}

I i = ( I i – 1 ≪ s ) + C i ) mod 2 b , {\displaystyle I_{i}={\big (}(I_{i-1}\ll s)+C_{i}{\big )}{\bmod {2}^{b},}

C i = MSB s ( E K ( I i – 1 ) ) ⊕ P i , {\displaystyle C_{i}==operatorname {MSB} _{s}{{big (}E_{K}(I_{i-1}){\big ){\oplus P_{i},}

P i = MSB s ( E K ( I i – 1 ) ) ⊕ C i , {\displaystyle P_{i} = nome del funzionario {MSB} _{s}{{big (}E_{K}(I_{i-1}){\big ){\oplus C_{i},}

CFB-1 è considerato autosincronizzante e resiliente alla perdita del testo cifrato; “Quando viene usato il modo CFB a 1 bit, allora la sincronizzazione viene automaticamente ripristinata b+1 posizioni dopo il bit inserito o cancellato. Per altri valori di s nel modo CFB, e per gli altri modi di riservatezza in questa raccomandazione, la sincronizzazione deve essere ripristinata esternamente.” (NIST SP800-38A). Cioè, la perdita di 1 bit in un cifratore a blocchi di 128 bit come AES renderà 129 bit non validi prima di emettere bit validi.

CFB può anche autosincronizzarsi in alcuni casi speciali diversi da quelli specificati. Per esempio, un cambiamento di un bit in CFB-128 con un cifrario a blocchi di 128 bit sottostante, si risincronizzerà dopo due blocchi. (Tuttavia, CFB-128 ecc. non gestirà la perdita di bit con grazia; una perdita di un bit causerà la perdita di allineamento del decrittatore con il crittografo)

CFB rispetto ad altri modiModifica

Come il modo CBC, i cambiamenti nel testo in chiaro si propagano per sempre nel testo cifrato, e la crittografia non può essere parallelizzata.

CFB, OFB e CTR condividono due vantaggi rispetto alla modalità CBC: il cifratore a blocchi è usato solo nella direzione di cifratura e il messaggio non ha bisogno di essere imbottito a un multiplo della dimensione del blocco cifrato (sebbene il furto del cifrario possa essere usato anche per la modalità CBC per rendere inutile l’imbottitura).

Feedback in uscita (OFB)Edit

OFB

Risultato in uscita

Crittografia parallelizzabile

No

Decrittografia parallelizzabile

No

Accesso in lettura casuale

No

La modalità output feedback (OFB) rende un cifratore a blocchi in un cifratore a flusso sincrono. Genera blocchi di keystream, che sono poi XORed con i blocchi di testo in chiaro per ottenere il testo cifrato. Proprio come con altri cifrari a flusso, capovolgere un bit nel testo cifrato produce un bit capovolto nel testo in chiaro nella stessa posizione. Questa proprietà permette a molti codici di correzione degli errori di funzionare normalmente anche quando sono applicati prima della crittografia.

A causa della simmetria dell’operazione XOR, crittografia e decrittografia sono esattamente le stesse:

C j = P j ⊕ O j , {\displaystyle C_{j}=P_{j}\plus O_{j},}

P j = C j ⊕ O j , {displaystyle P_{j}=C_{j}\plus O_{j},

O j = E K ( I j ) , {displaystyle O_{j}=E_{K}(I_{j}),}

I j = O j – 1 , {displaystyle I_{j}=O_{j-1},}

I 0 = IV . {\displaystyle I_{0}={\text{IV}}.}

Ogni operazione di feedback block cipher in uscita dipende da tutte quelle precedenti, e quindi non può essere eseguita in parallelo. Tuttavia, poiché il testo in chiaro o il testo cifrato è usato solo per lo XOR finale, le operazioni di cifratura a blocchi possono essere eseguite in anticipo, permettendo di eseguire il passo finale in parallelo una volta che il testo in chiaro o il testo cifrato sono disponibili.

È possibile ottenere un flusso di chiavi in modalità OFB usando la modalità CBC con una stringa costante di zeri come input. Questo può essere utile, perché permette l’uso di implementazioni hardware veloci della modalità CBC per la crittografia in modalità OFB.

Utilizzando la modalità OFB con un blocco parziale come feedback come la modalità CFB si riduce la lunghezza media del ciclo di un fattore di 232 o più. Un modello matematico proposto da Davies e Parkin e corroborato da risultati sperimentali ha mostrato che solo con un feedback completo si può ottenere una lunghezza media del ciclo vicina al massimo ottenibile. Per questo motivo, il supporto per il feedback troncato è stato rimosso dalla specifica dell’OFB.

Contatore (CTR)Modifica

CTR

Contatore

Crittografia parallelizzabile

Decifratura parallelizzabile

Accesso lettura casuale

Nota: La modalità CTR (CM) è anche conosciuta come modalità contatore intero (ICM) e modalità contatore intero segmentato (SIC).

Come OFB, la modalità contatore trasforma un cifratore a blocchi in un cifratore a flusso. Genera il prossimo blocco del keystream criptando valori successivi di un “contatore”. Il contatore può essere qualsiasi funzione che produce una sequenza che è garantita non ripetersi per un lungo periodo di tempo, anche se un vero contatore a incremento uno è il più semplice e popolare. L’uso di una semplice funzione di input deterministica era in passato controverso; i critici sostenevano che “esporre deliberatamente un sistema crittografico a un input sistematico noto rappresenta un rischio inutile”. Tuttavia, oggi la modalità CTR è ampiamente accettata e qualsiasi problema è considerato una debolezza del cifratore a blocchi sottostante, che ci si aspetta sia sicuro indipendentemente dalla distorsione sistematica nel suo input. Insieme al CBC, la modalità CTR è una delle due modalità di cifratura a blocchi raccomandate da Niels Ferguson e Bruce Schneier.

La modalità CTR è stata introdotta da Whitfield Diffie e Martin Hellman nel 1979.

La modalità CTR ha caratteristiche simili a OFB, ma permette anche una proprietà di accesso casuale durante la decrittazione. Il modo CTR è adatto ad operare su una macchina multi-processore dove i blocchi possono essere criptati in parallelo. Inoltre, non soffre del problema del ciclo breve che può colpire OFB.

Se l’IV/nonce è casuale, allora possono essere combinati insieme al contatore usando qualsiasi operazione invertibile (concatenazione, addizione o XOR) per produrre l’effettivo blocco unico del contatore per la crittografia. Nel caso di un nonce non casuale (come un contatore di pacchetti), il nonce e il contatore dovrebbero essere concatenati (ad esempio, memorizzando il nonce nei 64 bit superiori e il contatore nei 64 bit inferiori di un blocco contatore a 128 bit). Semplicemente aggiungendo o XORando il nonce e il contatore in un singolo valore si romperebbe la sicurezza sotto un attacco di tipo chosen-plaintext in molti casi, poiché l’attaccante potrebbe essere in grado di manipolare l’intera coppia IV-counter per causare una collisione. Una volta che un attaccante controlla la coppia IV-counter e il testo in chiaro, lo XOR del testo cifrato con il testo in chiaro noto produrrebbe un valore che, quando XORato con il testo cifrato dell’altro blocco che condivide la stessa coppia IV-counter, decifrerebbe quel blocco.

Nota che il nonce in questo diagramma è equivalente al vettore di inizializzazione (IV) negli altri diagrammi. Tuttavia, se le informazioni di offset/localizzazione sono corrotte, sarà impossibile recuperare parzialmente tali dati a causa della dipendenza dall’offset del byte.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.