Block ciphers

Famiglia di permutazioni pseudo random. I block ciphers sono una costruzione matematica, quindi sono una primitiva sulla quale si crea uno schema di crittografia. Criptano i dati blocco a blocco. La dimensione di ogni blocco è la principale caratteristica di un algoritmo di questo tipo.

Uno standard di tipo block cipher è la famiglia AES, che supporta vari livelli di sicurezza.

Block cipher ideale

Dal momento che i block cipher lavorano a livello di bit, si crea una tabella di tutte le possibili permutazioni di due bit. Il numero 1, 2, 3, … rappresenta la chiave.

Più bit in un blocco, più alta è la sicurezza, e più dati si possono criptare. Questo approccio però è troppo dispendioso. La tabella cresce di dimensione troppo rapidamente, e non è fattibile gestirla. Se la tabella è pubblica si ha una dimensione di:

Block cipher reale

Deve essere ovviamente molto simile all’idea di un block cipher ideale, e quindi al posto di utilizzare permutazioni random, si utilizzano permutazioni pseudo random. Lo standard di block cipher è AES, con un minimo di 128 bit, e un massimo di 192 bit. Già a 128 bit è sicuro (con 64bit si possono cifrare dai 2 ai 4GB prima di poter subire attacchi di frequenza). Nelle CPU moderne, c’è un’accelerazione hardware per AES.

Essendo pseudo random, è anche deterministico. Quindi è vulnerabile ad attacchi di frequenza se non utilizzanto in maniera giusta.

I block cipher si utilizzano per costruire schemi di crittografia simmetrica, come ad esempio:

ECB - Electronic Codebook

Insicuro. In questo caso il cifrario a blocchi è utilizzato così com’è. Il che è sbagliato dal momento che è incline ad attacchi di frequenza. Se due blocchi del messaggio sono uguali è facile colpire. NON DEVE ESSERE USATO PER CRIPTARE DATI!

CBC - Cipher Block Chaining

Come per lo stream cipher si utilizzava il nonce, qui si utilizza si utilizza un Initialization Vector.. L’inizialization vector è un componente lungo tanto quanto il blocco, utilizzato per rendere diverso il messaggio cifrato finale, anche se si ha stessa chiave e stesso plaintext. Si effettua un’operazione di XOR con il plaintext.

Dagli stessi blocchi di input del plaintext, si ottengono sempre blocchi differenti in output, perchè dal primo, l’output che verrà utilizzato come vector per il secondo blocco sarà già differente.

CTR - Counter mode

Stream cipher basato su un block cipher. Usa un approccio differente, dal momento che il plaintext non viene fornito all’algoritmo di crittografia. Si può cifrare un dato di qualsiasi dimensione. ↑ nonce, ↓ counter tanti dati piccoli ↓ nonce, ↑ counter pochi dati grandi

Solitamente si usano un nonce di 96 bit e un counter di 32 bit.

Block encryption e Padding

Crittografare un blocco di dimensione diversa (minore) dal blocco dell’algoritmo non è possibile. Bisogna quindi utilizzare il padding, che è una tecnica per inserire dati finti per allungare l’ultimo blocco del plaintext. La più famosa è PKCS7, che inserisce N volte il valore N, che è il numero mancante di byte. Se il plaintext è un multiplo del blocco, si inserisce un ulteriore blocco pieno di N.