# Cifratura a blocchi

* Schema di cifrazione a blocchi
* Schema di decifrazione a blocchi
In crittologia un algoritmo di cifratura a blocchi (dall'inglese: block cipher) è un algoritmo a chiave simmetrica operante su un gruppo di bit di lunghezza finita organizzati in un blocco. A differenza degli algoritmi a flusso che cifrano un singolo elemento alla volta, gli algoritmi a blocco cifrano un blocco di elementi contemporaneamente.

## In generale

Un algoritmo di cifratura a blocchi è composto da due parti, una che cifra, E e un'altra che decifra E$^{-1}$. Molti algoritmi accettano due ingressi, N$_b$ bit per il blocco da cifrare e N$_k$ bit per la chiave da utilizzare durante la cifratura. Ovviamente restituiscono N$_b$ bit di uscita. Per alcuni casi particolari a decifrare il blocco è la funzione inversa della cifratura
    $E_{k}^{-1}(E_{k}(m))=m$
per ogni blocco m e chiave k.
Per ogni chiave di ingresso k, E$_k$ è una delle possibili permutazioni sull'insieme di input del blocco, tra le $(2^{N_{b}})!$ possibili. Il numero di possibili chiavi usualmente è un numero inferiore al numero di possibili ingressi.
    $2^{N_{k}}<{(2^{N_{b}})!}$.
La dimensione del blocco, N$_b$, è tipicamente di 64 o 128 bit sebbene alcuni algoritmi accettino blocchi di dimensione variabile. Usualmente l'algoritmo in caso di testo di dimensione inferiore al blocco provvede a riempire il blocco con dei dati inutili per poter trattare testi di qualsiasi lunghezza. La scelta dei dati inutili da utilizzare per riempire il blocco può influenzare la sicurezza dell'algoritmo e quindi va fatta con attenzione. La lunghezza della chiave (N$_k$) può essere 40, 56, 64, 80, 128, 192 e 256 bit. Nel 2005 si considera come lunghezza minima accettabile 80 bit dato che lunghezze inferiori di chiave potrebbero essere forzate con un attacco a forza bruta.

### Cifratura iterata dei blocchi

Molti algoritmi sono basati su semplici funzioni che vengono combinate e iterate più volte (vedi cifrario del prodotto). Ogni iterazione viene chiamata round e normalmente gli algoritmi utilizzano più di 4 round ma meno di 64 per singolo blocco da cifrare. Molti algoritmi sono basati sulla rete di Feistel o più in generale sulla rete a sostituzione e permutazione. Operazioni aritmetiche, operazioni logiche (specialmente XOR) S-box e varie tecniche di permutazione sono tra i componenti più comuni di queste reti.

## Storia

Lucifer è ritenuto generalmente il primo algoritmo moderno a blocchi. Sviluppato dall'IBM negli anni settanta era basato sul lavoro di Horst Feistel. Una versione migliorata venne utilizzata dal governo degli Stati Uniti d'America per realizzare lo standard FIPS Data Encryption Standard (DES). Venne scelto dall'US National Bureau of Standards (NBS) dopo la pubblicazione del bando che invita a sottoporre all'attenzione del NSA i propri algoritmi di cifratura. Lo standard del DES venne pubblicato nel 1976 e da allora venne utilizzato fino alla fine del 2000.
DES era progettato per resistere a una categoria di attacchi conosciuti dalla NSA e in seguito scoperti anche dall'IBM. La famiglia di attacchi basati sulla crittanalisi differenziale divennero noti quando vennero pubblicati da Eli Biham e Adi Shamir verso la fine degli anni ottanta. Questa tecnica è una delle poche a essere in grado di forzare molti cifrari a blocchi. La seconda tecnica utilizzabile era la crittanalisi lineare che forse non era nota alla NSA finché non venne pubblicato l'articolo di Mitsuru Matsui. DES ha prodotto un prolifico settore di ricerca che ha sviluppato molte innovazioni nel settore degli algoritmi crittografici.
Il principale limite del DES è la sua chiave di soli 56 bit. Alcuni commentatori già negli anni '70 segnalarono che la chiave era troppo piccola e che un attacco a forza bruta era possibile. La dimostrazione definitiva dell'inadeguatezza del DES la si ebbe nel 1998 quando la Electronic Frontier Foundation riuscì a forzare la codifica DES con una macchina specializzata nel giro di tre giorni. Vennero sviluppate delle varianti del DES come il Triple DES, che offre una maggiore sicurezza ma risulta più lento per via della triplice esecuzione della cifratura DES.
Il DES è stato sostituito dal nuovo standard federale, Advanced Encryption Standard (AES), scelto dal National Institute of Standards and Technology (NIST) nel 2001 dopo 5 anni di standardizzazione. Il nuovo standard deriva da un algoritmo sviluppato da Joan Daemen e Vincent Rijmen e il suo nome è Rijndael. AES gestisce blocchi di 128 bit e chiavi di lunghezza 128, 192, 256 bit. Il governo Statunitense permette l'utilizzo dell'AES per la cifratura di documenti classificati con apparecchiature approvate dalla NSA.

## Crittanalisi

Oltre all'analisi differenziale e lineare esistono altre tecniche di attacco. La crittanalisi troncata e parziale, l'attacco slide, l'attacco boomerang, l'attacco square, l'attacco integrale, l'attacco XSL e l'attacco algebrico. Per dimostrare la sua validità un nuovo algoritmo deve essere in grado di superare tutti questi tipi di attacco.

## Lista di algoritmi di cifratura a blocchi

* 3-Way
* AES
* Blowfish
* Camellia
* CAST-128
* CAST-256
* CMEA
* CS-Cipher
* DEAL
* DES
* DES-X
* FEAL
* GDES
* GOST
* IDEA
* Iraqi block cipher
* KASUMI
* Khafre
* KHAZAD
* Khufu
* LOKI89/91
* LOKI97
* Lucifer
* MAGENTA
* MARS
* MISTY1
* MMB
* RC2
* Red Pike
* S-1
* SAFER
* Serpent
* SHARK
* Skipjack
* Square
* TEA
* Triple DES
* Twofish
* RC5
* RC6
* XTEA