Dane tabelaryczne algorytmu DES

 Główny artykuł: Data Encryption Standard.

W poniższym artykule znajdują się dane tabelaryczne niezbędne do implementacji algorytmu DES a także pomocne podczas jego kryptoanalizy.

Permutacja początkowa (IP)

Permutacja początkowa
Permutacja początkowa

Permutacja początkowa przeprowadzana jest na wszystkich blokach danych przed pierwszym cyklem szyfrowania. Jej celem nie jest zwiększenie bezpieczeństwa szyfru lecz ułatwienie wprowadzania danych i szyfrogramu do układu.

Permutacja początkowa
58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7

Powyższą tabelę odczytujemy od lewej do prawej, z góry na dół. Permutowanie bitów wygląda następująco: na miejsce bitu pierwszego wstawiamy bit 58, na miejsce bitu drugiego wstawiamy bit 50. Analogicznie postępujemy z pozostałymi bitami.

Permutacja końcowa (IP-1)

Permutacja końcowa
Permutacja końcowa

Permutacja końcowa wykonywana jest po ostatnim cyklu szyfrowania. Jest odwrotnością permutacji początkowej.

Permutacja końcowa
40 8 48 16 56 24 64 32 39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25

Permutacja rozszerzająca (E)

Permutacja rozszerzona
Permutacja rozszerzona

Permutacja rozszerzająca stosowana jest podczas rozszerzania prawej połowy danych z 32 bitów do 48 bitów.

Permutacja rozszerzona
32 1 2 3 4 5 4 5 6 7 8 9
8 9 10 11 12 13 12 13 14 15 16 17
16 17 18 19 20 21 20 21 22 23 24 25
24 25 26 27 28 29 28 29 30 31 32 1

Permutacja klucza 1 (PC-1)

Permutacja PC-1 jest stosowana do wybrania 56 z 64 bitów klucza, który jest później dzielony na dwie części w celu dokonania niezależnych cyklicznych przesunięć bitów.

PC-1
Lewa część
57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36
Prawa część
63 55 47 39 31 23 15
7 62 54 46 38 30 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4

Permutacja klucza 2 (PC-2)

Permutacja PC-2 wybiera do szyfrowania 48 z 56 bitów klucza wygenerowanego dla danej rundy.

PC-2
14 17 11 24 1 5
3 28 15 6 21 10
23 19 12 4 26 8
16 7 27 20 13 2
41 52 31 37 47 55
30 40 51 45 33 48
44 49 39 56 34 53
46 42 50 36 29 32

Permutacja P-bloku

Permutacja P-bloku
Permutacja P-bloku

Permutacja w P-blokach wykonywana jest po przejściu danych przez S-bloki.

P
16 7 20 21 29 12 28 17
1 15 23 26 5 18 31 10
2 8 24 14 32 27 3 9
19 13 30 6 22 11 4 25

Struktura S-boksów

Podczas szyfrowania w S-boksach ma miejsce operacja podstawiania: za każde sześć bitów wejściowych podstawiamy cztery bity wyjściowe. Jeżeli bity wejściowe oznaczymy kolejno a1, a2, a3, a4, a5, a6 to bity a1 oraz a6 tworzą 2-bitową liczbę określającą wiersz, natomiast bity a2, a3, a4 oraz a5 tworzą liczbę 4-bitową określającą kolumnę (zarówno kolumny jak i wiersze numerujemy od zera). Na przecięciu określonego w ten sposób wiersza i kolumny znajduje się liczba wyjściowa bloku. Przykładowo, jeżeli na wejście pierwszego S-boksa podamy następujący ciąg bitów: 101010 to liczbą wyjściową będzie 0110.

S-boksy
S1
x0000x x0001x x0010x x0011x x0100x x0101x x0110x x0111x x1000x x1001x x1010x x1011x x1100x x1101x x1110x x1111x
0yyyy0 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
0yyyy1 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
1yyyy0 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
1yyyy1 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
S2
x0000x x0001x x0010x x0011x x0100x x0101x x0110x x0111x x1000x x1001x x1010x x1011x x1100x x1101x x1110x x1111x
0yyyy0 15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
0yyyy1 3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
1yyyy0 0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15
1yyyy1 13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
S3
x0000x x0001x x0010x x0011x x0100x x0101x x0110x x0111x x1000x x1001x x1010x x1011x x1100x x1101x x1110x x1111x
0yyyy0 10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
0yyyy1 13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1
1yyyy0 13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
1yyyy1 1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
S4
x0000x x0001x x0010x x0011x x0100x x0101x x0110x x0111x x1000x x1001x x1010x x1011x x1100x x1101x x1110x x1111x
0yyyy0 7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
0yyyy1 13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
1yyyy0 10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
1yyyy1 3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
S5
x0000x x0001x x0010x x0011x x0100x x0101x x0110x x0111x x1000x x1001x x1010x x1011x x1100x x1101x x1110x x1111x
0yyyy0 2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
0yyyy1 14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6
1yyyy0 4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14
1yyyy1 11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3
S6
x0000x x0001x x0010x x0011x x0100x x0101x x0110x x0111x x1000x x1001x x1010x x1011x x1100x x1101x x1110x x1111x
0yyyy0 12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
0yyyy1 10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
1yyyy0 9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
1yyyy1 4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
S7
x0000x x0001x x0010x x0011x x0100x x0101x x0110x x0111x x1000x x1001x x1010x x1011x x1100x x1101x x1110x x1111x
0yyyy0 4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
0yyyy1 13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
1yyyy0 1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2
1yyyy1 6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12
S8
x0000x x0001x x0010x x0011x x0100x x0101x x0110x x0111x x1000x x1001x x1010x x1011x x1100x x1101x x1110x x1111x
0yyyy0 13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
0yyyy1 1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
1yyyy0 7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
1yyyy1 2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11

Przesunięcia klucza

W każdej rundzie dokonywane jest cykliczne przesunięcie każdej połówki klucza o określoną liczbę bitów w lewo.

Przesunięcia klucza
Numer rundy Liczba bitów
1 1
2 1
3 2
4 2
5 2
6 2
7 2
8 2
9 1
10 2
11 2
12 2
13 2
14 2
15 2
16 1

Bibliografia