Vogliamo trovare l'algoritmo di decifratura DES con chiave k, che indicheremo con DES-1 per cui valga la seguente proprietà:
DESk-1(DESk(x)) = x = DESk(DESk-1(x))
per ogni messaggio in chiaro x e per ogni chiave k. Sebbene DES possa apparire complicato come metodo per cifrare un messaggio in chiaro, nasconde in sé una caratteristica molto importante. DESk-1 è lo stesso algoritmo DESk eccezion fatta per la schedulazione delle chiavi, che è invertita (figura 2.6.1) (le chiavi vengono prodotte in ordine inverso).
Vediamo perché.
Consideriamo il messaggio cifrato R16L16 a meno della permutazione finale IP-1. Riguardando lo schema della 16-esima iterazione di cifratura (Figura 2.6.2) si ricavano le seguenti relazioni:
L16=R15 e R16=L15Åf(R15, k16)
Da qui riscrivendo le due equazioni possiamo ricavare i valori precedenti:
R15 = L16 e L15 = R16Åf(R15, k16) = R16Åf(L16, k16)
In conclusione: da R16 e L16 abbiamo ricavato R15 ed L15 come si vede in Figura 2.6.3.
Quindi, invertendo il ruolo di R ed L e utilizzando le chiavi in maniera inversa, da k16 a k1, si può ritornare al messaggio in chiaro passando attraverso le seguenti coppie:
(R16, L16) ® (R15, L15) ® (R14, L14) ® ... ® (R0, L0)
Questo è il motivo per cui alla fine dell'algoritmo si effettua lo scambio tra le parti L e R. Le iterazioni della codifica e della decodifica sono le stesse, ma quello che cambia passando dalla cifratura alla decifratura è l'ordine con cui vengono schedulate le chiavi. Alla prima iterazione servirà la chiave k16, alla seconda la chiave k15 e così via. Dal momento che per la fase di decifratura, le chiavi devono essere schedulate in ordine inverso alla cifratura, dobbiamo effettuare delle variazioni al dispositivo di schedulazione definito in precedenza.
In particolare dobbiamo fare in modo che pur prendendo in input la chiave k, tale dispositivo produca le chiavi nell'ordine desiderato. Il passo principale per ottenere ciò è quello di invertire lo shift che veniva applicato alle metà CiDi effettuando uno shift ciclico a destra (anziché a sinistra) di due posizioni eccetto all'iterazione 16 (la prima per la decifratura), all'iterazione 9 (l'ottava per la decifratura), all'iterazione 2 e 1 (quindicesima e sedicesima) in cui lo shift è di una posizione.