Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
DES un cifrario a blocchi - il che significa che opera su blocchi di testo in chiaro di una certa
dimensione ( 64 - bit) e restituisce i blocchi di testo cifrato della stessa dimensione . Cos DES
risulta in una permutazione tra il 2 ^ 64 possibili disposizioni di 64 bit , ciascuno dei quali pu
essere 0 o 1 . Ogni blocco di 64 bit diviso in due blocchi di 32 bit ciascuno , la met sinistra L e la
met destra R.
Esempio : Sia M il messaggio di testo in chiaro M = 0123456789ABCDEF , dove M in formato
( base 16 ) esadecimale . Riscrittura M in formato binario , si ottiene il blocco di 64 bit di testo :
M = 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
L = 0000 0001 0010 0011 0100 0101 0110 0111
R = 1000 1001 1010 1011 1100 1101 1110 1111
DES opera su blocchi di 64 bit che utilizzando chiavi di 56 - bit . Le chiavi sono in realt
memorizzate come se fossero di 64 bit , ma ogni ottavo bit della chiave non viene utilizzato (ad
esempio bit numerati 8 , 16 , 24 , 32 , 40 , 48 , 56 , e 64) . Tuttavia , numereremo i bit da 1 a 64 , da
sinistra a destra , con i seguenti calcoli . Ma , come si vedr , gli otto bit appena citati vengono
eliminati quando creiamo le sotto-chiavi .
Esempio : Sia K la chiave esadecimale K = 133457799BBCDFF1 . In binario ( posizione 1 =
0001 , 3 = 0011 , ecc, e vengono raggruppati ogni 8 bit , di cui l' ultimo in ogni gruppo sar
inutilizzato) :
K = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001
L'algoritmo DES utilizza i seguenti passi :
Passo 1: Creare 16 sotto-chiavi , ognuna dei quali lunga 48 bit .
La chiave a 64 bit viene permutata secondo la seguente tabella , PC - 1 . Poich il primo elemento
nella tabella " 57" , ci significa che il bit 57 della chiave originale K diventa il primo bit della
chiave permutata K + . Il bit 49 della chiave originale diventa il secondo bit della chiave
permutato . Il 4 bit della chiave originale l'ultimo bit della chiave permutato . Nota solo il 56 bit
della chiave originale appare nella chiave permutato .
C4 = 0011001100101010101111111100
D4 = 0101100110011110001111010101
C5 = 1100110010101010111111110000
D5 = 0110011001111000111101010101
C6 = 0011001010101011111111000011
D6 = 1001100111100011110101010101
C7 = 1100101010101111111100001100
D7 = 0110011110001111010101010110
C8 = 0010101010111111110000110011
D8 = 1001111000111101010101011001
C9 = 0101010101111111100001100110
D9 = 0011110001111010101010110011
C10 = 0101010111111110000110011001
D10 = 1111000111101010101011001100
C11 = 0101011111111000011001100101
D11 = 1100011110101010101100110011
C12 = 0101111111100001100110010101
D12 = 0001111010101010110011001111
C13 = 0111111110000110011001010101
D13 = 0111101010101011001100111100
C14 = 1111111000011001100101010101
D14 = 1110101010101100110011110001
C15 = 1111100001100110010101010111
D15 = 1010101010110011001111000111
C16 = 1111000011001100101010101111
D16 = 0101010101100110011110001111
Ora formiamo le chiavi Kn , per 1 < = n < = 16 , applicando la seguente tabella di permutazione per
ciascuna delle coppie concatenati con CnDn . Ogni coppia ha 56 bit , ma PC - 2 utilizza solo 48 di
questi.
Pertanto , il primo bit di Kn il bit 14 di CnDn , il secondo bit il17 , e cos via , e termina con il
48 bit di Kn uguale al bit 32 di CnDn .
Cos i primi tre bit di E ( Rn - 1) sono i bit nelle posizioni 32 , 1 e 2 di Rn - 1, mentre gli ultimi 2 bit
di E ( Rn - 1) sono i bit nelle posizioni 32 e 1 .
Esempio : Calcoliamo E ( R0 ) da R0 come segue :
R0 = 1111 0000 1010 1010 1111 0000 1010 1010
E ( R0 ) = 011110 100001 010101 010101 011110 100001 010101 010101
( Si noti che ogni blocco originale di 4 bit stato espanso a un blocco di 6 bit in uscita . )
Avanti nel calcolo f , facciamo lo XOR tra l'uscita E ( Rn - 1 ) con la chiave Kn :
Kn + E ( Rn - 1) .
Esempio : Per K1 , E ( R0 ) , abbiamo
K1 = 000110 110000 001011 101111 111111 000111 000001 110010
E ( R0 ) = 011110 100001 010101 010101 011110 100001 010101 010101
K1 + E ( R0 ) = 011000 010001 011110 111010 100001 100110 010100 100111 .
Non abbiamo ancora finito di calcolare la funzione f . A questo punto abbiamo ampliato Rn - 1 da
32 bit a 48 bit , utilizzando la tabella di selezione , e il risultato XORato con la chiave Kn . Ora
abbiamo 48 bit (otto gruppi di sei bit) . Ora facciamo qualcosa con ogni gruppo di sei bit : li usiamo
come indirizzi nelle tabelle chiamate "S-box" . Ogni gruppo di sei bit ci dar un indirizzo in una
casella diversa S . A tale indirizzo sar un numero a 4 bit . Questo numero 4 bit sostituir i 6 bit
originali. Il risultato che gli otto gruppi di 6 bit vengono trasformati in otto gruppi di 4 bit (le
uscite di 4 - bit dalle S-box) per un totale di 32 bit .
Scrivere il risultato precedente , che di 48 bit , nella forma :
Kn + E ( Rn - 1 ) = B1B2B3B4B5B6B7B8 , dove ogni Bi un gruppo di sei bit . Calcoliamo ora
S1 ( B1 ) S2 ( B2 ) S3 ( B3 ) S4 ( B4 ) S5 ( B5 ) S6 ( B6 ) S7 ( B7 ) S8 ( B8 )
dove Si (Bi) sono ottenute da l'uscita del S-box i- esimo.
In breve, ciascuna delle funzioni S1 , S2 , ... , S8 , prende un blocco di 6 -bit come input e produce
un blocco di 4 bit come output . La tabella per determinare S1 mostrata e spiegata di seguito :
Esempio : Per il primo turno , si ottiene come output delle otto caselle S :
K1 + E ( R0 ) = 011000 010001 011110 111010 100001 100110 010100 100111 .
S1 ( B1 ) S2 ( B2 ) S3 ( B3 ) S4 ( B4 ) S5 ( B5 ) S6 ( B6 ) S7 ( B7 ) S8 ( B8 ) = 0101 1100 1000
0010 1011 0101 1001 0111
La fase finale nel calcolo di f di fare una permutazione P dell'uscita S -box per ottenere il valore
finale di f :
f = P ( S1 ( B1 ) S2 ( B2 ) ... S8 ( B8 ) )
La permutazione P viene definite nella seguente tabella. P produce in uscita 32 bit da un ingresso di
32 bit permutando i bit del blocco di input.
Cio , l'uscita dell'algoritmo ha il bit 40 del pre-output blocco come primo bit, il bit 8 come secondo
bit , e cos via , fino a 25 bit del blocco pre-output che l'ultimo bit dell'uscita .
Esempio : Se noi trattiamo tutti i 16 blocchi utilizzando il metodo definito in precedenza , si
ottiene , al 16 turno:
L16 = 0100 0011 0100 0010 0011 0010 0011 0100
R16 = 0000 1010 0100 1100 1101 1001 1001 0101
Invertiamo l'ordine di questi due blocchi e applichiamo la permutazione finale
R16L16 = 00001010 01001100 11011001 10010101 01000011 01000010 00110010 00110100
IP -1 = 10000101 11101000 00010011 01010100 00001111 00001010 10110100 00000101
che in formato esadecimale
85E813540F0AB405 .
Questa la forma cifrata di M = 0123456789ABCDEF : vale a dire , C = 85E813540F0AB405 .
La decriptazione semplicemente l'inverso di crittografia , seguendo la stessa procedura come
sopra , ma invertendo l'ordine in cui vengono applicate le sotto-chiavi.