Vediamo ora come applicare concretamente il discorso fatto fino ad ora nell'ipotesi di usare il DES a 3 iterazioni.
Supponendo che e
siano due testi in chiaro, e
il loro or esclusivo; applicando ad entrambe l'algoritmo
DES con chiave K, definito dallo schema in Figura 11,
otteniamo le stringhe cifrate
e
.
Figura 11: Schema del DES a tre iterazioni.
Sfruttando quindi le operazioni definite dal DES a tre iterazioni,
posso esprimere e
come segue:
e analogamente
Da queste otteniamo l'espressione per
Quindi scegliamo i testi in chiaro tali che =
(ad esempio
).
Ed ecco perché questo è definito come un chosen plaintext attack. Allora:
e quindi
o anche
Ricordiamo ora che
e
dove C e rappresentano l'output delle 8 S-box alla terza iterazione
(vedi Figura 5), e P è
la permutazione definita nella funzione f, che è
conosciuta pubblicamente. Quindi
da cui
Ricordiamo ora che per calcolare il valore della stringa E,
all'ultima iterazione del DES, si applicava alla stringa A (
in questo caso) la funzione di espansione E, ottenendo
E = E(A). Si effettuava poi lo xor bit a bit
tra quest'ultimo valore e la stringa J (in questo caso
) ottenendo quindi
l'input delle 8 S-box. Sapendo inoltre che nell'ultima iterazione
il valore di
è definito essere uguale al valore
, cioè
come pure
, e poiché i valori di
e
sono noti, conosciamo di conseguenza anche i valori
di
e
da cui, per quanto detto sopra, anche i valori di
E per la terza iterazione. Infatti:
E= E
E
, E= E
E
(Si ricordi che le permutazioni sono operatori lineari e sono noti).
A questo punto conosciamo E, e
per la terza
iterazione e quindi siamo nelle ipotesi precedenti e possiamo quindi
procedere come visto, costruendo gli insiemi
e calcolando i valori
della chiave
.
Dalla conoscenza di questa chiave possiamo poi ricavare 48 bit
della chiave K. Basta infatti osservare l'algoritmo di schedulazione
alla terza iterazione.
I rimanenti 8 bit della chiave vengono trovati
mediante una ricerca esaustiva delle possibilità
di completare la chiave K.
L'algoritmo che calcola gli insiemi con input
dove è il seguente [27]:
Questo algoritmo puó essere ripetuto per n volte (dove n è scelto opportunamente),
al variare dell'input, ottenendo una sequenza di insiemi
,
,
.
L'intersezione
fornisce
.
Similmente possiamo ottenere . La sottochiave J è uguale a
.
Nella Tabella 13 riportiamo il numero di attacchi necessari per rompere il sistema DES: si noti come per un attacco chosen plaintext il numero di tentativi da effettuare sia sempre minore rispetto a quelli per un attacco known plaintext [11].
num. round | chosen plaintext | known plaintext |
8 | ![]() | ![]() |
9 | ![]() | ![]() |
10 | ![]() | ![]() |
11 | ![]() | ![]() |
12 | ![]() | ![]() |
13 | ![]() | ![]() |
14 | ![]() | ![]() |
15 | ![]() | ![]() |
16 | ![]() | ![]() |