Cifrari a Blocchi

Un cifrario a blocchi è un sistema crittografico che suddivide il testo in blocchi di lunghezza fissa e applica la funzione di cifratura o decifratura attraverso una chiave. Quindi, dato un messaggio M
M = M1, M2, M3, … Mn,
e una chiave k, viene generato un messaggio cifrato C
C = C1, C2, C3, … Cn,
nel modo seguente:
C1 = E(M1, k)
C2 = E(M2, k)

Cn = E(Mn, k)

Il primo cifrario a blocchi fu LUCIFER, ed era una implementazione del cifrario di Feistel.

Cifrario a blocchi ideale

Idealmente, un cifrario a blocchi trasforma un blocco di testo in chiaro lungo N bit in un blocco di testo cifrato da N bit in modo che la relazione tra i due blocchi di dati sia completamente casuale. Ma, per poter essere invertibile, ovvero decifrabile, ogni blocco in ingresso deve poter essere mappato in un blocco in uscita. Questa mappatura, ovvero la corrispondenza tra un i-esimo blocco di input e un j-esimo blocco in output, è la chiave.

Esistono 2N blocchi possibili in input e 2N blocchi possibili in output. Una mappatura può essere rappresentata come una sequenza di blocchi cifrati che corrispondono ai blocchi in input (ordinati). Ad esempio, se si impiega N=3 si ha:

Blocco di input Blocco di output
000 100
001 010
010 110
011 000
100 001
101 111
110 101
111 011

La chiave di cifratura è quindi 100 010 110 000 001 111 101 011. Ricevendo un testo cifrato seguente: 011 001 100 110, si può utilizzare la chiave di cifratura per ricostruire il testo in chiaro. Controllando nella chiave, il primo blocco 011 si trova nell'ultima posizione, quindi corrisponde a 111, il secondo blocco 001 è nella quinta posizione e corrisponde a 100, e così via.

Per evitare gli attacchi a forza bruta, il numero di bit di ogni blocco deve essere elevato. Il numero di possibili mappature, ovvero di chiavi, è 2n!, poiché corrisponde al numero di permutazioni possibili dei blocchi di input, che sono in totale 2n.

Il problema consiste nella lunghezza della chiave, che è data da N x 2N bit. Nel caso di N=16 si ha: 16 x 216 = 1048576 bit = 128 Kbyte. Con N=32 si sale a: 32 x 232 = 137438953472 bit = 17179869184 byte = 16 Gbyte.

Cifrario a blocchi non ideale

Un cifrario a blocchi non ideale approssima un cifrario ideale. Mentre in quest'ultimo sono possibili 2n! chiavi diverse, nel cifrario non ideale si utilizza una chiave di lunghezza k, che determina la mappatura tra i blocchi di input e i blocchi di output. Il numero di chiavi possibili è 2k, e la mappatura non è completamente casuale. Un cifrario a blocchi non ideale di tipo cifrario di Feistel, implementato nel DES e nelle sue varianti. Un cifrario a blocchi non derivante dal cifrario di Feistel è l'algoritmo AES.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License