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 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ątkowa58504234261810260524436282012462544638302214664564840322416857494133251791595143352719113615345372921135635547393123157
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 wykonywana jest po ostatnim cyklu szyfrowania. Jest odwrotnością permutacji początkowej. Permutacja końcowa40848165624643239747155523633138646145422623037545135321612936444125220602835343115119592734242105018582633141949175725
Permutacja rozszerzająca (E)
Permutacja rozszerzająca stosowana jest podczas rozszerzania prawej połowy danych z 32 bitów do 48 bitów. Permutacja rozszerzona3212345456789891011121312131415161716171819202120212223242524252627282928293031321
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-1Lewa część5749413325179158504234261810259514335271911360524436Prawa część6355473931231576254463830221466153453729211352820124
Permutacja klucza 2 (PC-2) Permutacja PC-2 wybiera do szyfrowania 48 z 56 bitów klucza wygenerowanego dla danej rundy.
PC-21417112415328156211023191242681672720132415231374755304051453348444939563453464250362932
Permutacja P-bloku
Permutacja w P-blokach wykonywana jest po przejściu danych przez S-bloki. P1672021291228171152326518311028241432273919133062211425
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-boksyS1 x0000x x0001x x0010x x0011x x0100x x0101x x0110x x0111x x1000x x1001x x1010x x1011x x1100x x1101x x1110x x1111x 0yyyy0 1441312151183106125907 0yyyy1 0157414213110612119538 1yyyy0 4114813621115129731050 1yyyy1 1512824917511314100613S2 x0000x x0001x x0010x x0011x x0100x x0101x x0110x x0111x x1000x x1001x x1010x x1011x x1100x x1101x x1110x x1111x 0yyyy01518146113497213120510 0yyyy13134715281412011069115 1yyyy00147111041315812693215 1yyyy11381013154211671205149S3 x0000x x0001x x0010x x0011x x0100x x0101x x0110x x0111x x1000x x1001x x1010x x1011x x1100x x1101x x1110x x1111x 0yyyy01009146315511312711428 0yyyy11370934610285141211151 1yyyy01364981530111212510147 1yyyy11101306987415143115212S4 x0000x x0001x x0010x x0011x x0100x x0101x x0110x x0111x x1000x x1001x x1010x x1011x x1100x x1101x x1110x x1111x 0yyyy07131430691012851112415 0yyyy11381156150347212110149 1yyyy01069012117131513145284 1yyyy13150610113894511127214S5 x0000x x0001x x0010x x0011x x0100x x0101x x0110x x0111x x1000x x1001x x1010x x1011x x1100x x1101x x1110x x1111x 0yyyy02124171011685315130149 0yyyy11411212471315015103986 1yyyy04211110137815912563014 1yyyy11181271142136150910453S6 x0000x x0001x x0010x x0011x x0100x x0101x x0110x x0111x x1000x x1001x x1010x x1011x x1100x x1101x x1110x x1111x 0yyyy01211015926801334147511 0yyyy11015427129561131401138 1yyyy09141552812370410113116 1yyyy14321295151011141760813S7 x0000x x0001x x0010x x0011x x0100x x0101x x0110x x0111x x1000x x1001x x1010x x1011x x1100x x1101x x1110x x1111x 0yyyy04112141508133129751061 0yyyy11301174911014351221586 1yyyy01411131237141015680592 1yyyy16111381410795015142312S8 x0000x x0001x x0010x x0011x x0100x x0101x x0110x x0111x x1000x x1001x x1010x x1011x x1100x x1101x x1110x x1111x 0yyyy01328461511110931450127 0yyyy11151381037412561101492 1yyyy07114191214206101315358 1yyyy12114741081315129035611
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 11 21 32 42 52 62 72 82 91102112122132142152161
Bibliografia
Kategoria:Szyfry blokowe Kategoria:Listy związane z informatyką