DES (ang. Data Encryption Standard)
- Długość bloku = 64 bitów
- Długość klucza = 56 bitów
DES był jednym z najpopularniejszych blokowych szyfrów symetrycznych. Wynaleziony we wczesnych latach '70 w IBM, został uznany przez NBS za standard federalny w USA w 1976 roku.
Zastosowanie
DES został uznany za standard ANSI dla sektora prywatnego w roku 1981. Znany był wtedy pod nazwą Data Encryption Algorithm.
Od pierwszych lat dwudziestego pierwszego wieku uznawany jest za szyfr, który nie jest w stanie zapewnić odpowiedniego zabezpieczenia, głównie ze względu relatywnie krótki sekretny klucz, podatny na ataki siłowe (ang. brute force attacks). W 2001 roku został zastąpiony przez AES, który otrzymał miano standardowego szyfru dla sektora prywatnego. DES jest wciąż jednym z najlepiej zbadanych i najpopularniejszych algorytmów szyfrujących.
Algorytm
W algorytmie DES do szyfrowania i deszyfrowania danych wykorzystywanych jest 56 bitów klucza. Klucz jest zapisywany w postaci 64 bitowego ciągu, w którym co 8 bit jest bitem kontrolnym i może służyć do kontroli parzystości.
W procesie szyfrowania dane wejściowe (tekst jawny) dzielone są na bloki 64-bitowe. Następnie dla każdego bloku wykonywane są następujące operacje:
- Permutacja początkowa bloku przestawiająca bity w pewien z góry określony sposób. Krok ten nie zwiększa bezpieczeństwa algorytmu. Miał za zadanie ułatwić wprowadzanie danych do maszyn szyfrujących używanych w czasach powstania szyfru.
- Podzielenie bloku wejściowego danych na dwie 32-bitowe części: lewą oraz prawą.
- Wybranie 56 bitów z 64-bitowego sekretnego klucza (Permutacja PC-1), a następnie podzielenie tych bitów na dwie 28-bitowe części.
- Powtórzenie 16 razy tych samych operacji, nazywanych funkcjami Feistela, przy użyciu przekazanego klucza:
- Bity klucza są przestawiane w połówkach w lewo o jedną lub dwie pozycje, a następnie w Permutacjach PC-2 wybieranych jest 48 z 56 bitów klucza.
- Prawa część danych rozszerzana jest do 48-bitów za pomocą Permutacji Rozszerzającej.
- Powiększona prawa połowa danych jest łączona za pomocą operacji XOR z wybranymi wcześniej 48 bitami klucza.
- Zsumowane dane dzielone są na osiem 6-bitowych bloków i każdy blok podawany jest na wejście jednego z S-bloków (pierwszy 6-bitowy blok na wejście pierwszego S-bloku, drugi 6-bitowy blok na wejście drugiego S-bloku, itd.). Pierwszy i ostatni bit danych określa wiersz, a pozostałe cztery bity wskazują kolumnę w tabeli S-Bloku. Po wyznaczeniu właściwej pozycji w tabeli, odczytuje się wynikową wartość i zamienia liczbę na zapis dwójkowy. Wynikiem działania każdego S-Bloku są 4 bity wyjściowe. Wszystkie wyjścia z S-Bloków tworzą 32-bitową tablicę. Każdy S-Blok ma inną strukturę.
- Dane wyjściowe z S-Bloków są łączone i poddawane permutacji w P-Blokach.
- Bity tak przekształconej prawej połowy danych dodawane są do bitów lewej połowy danych.
- Zmieniona lewa połowa danych staje się nową prawą połową, natomiast poprzednia prawa połowa staje się nową lewą połową.
- Po wykonaniu wszystkich 16 powtórzeń funkcji Feistela, lewa i prawa połowa danych jest łączona za pomocą sumowania XOR.
- Przeprowadzana jest Permutacja Końcowa.
Deszyfrowanie w DES polega na zastosowaniu tych samych operacji w odwrotnej kolejności. Jedyną różnicą jest to, że podklucze, które teraz należy wybierać od końca.
Klucze słabe w DES
Klucz słaby w algorytmie DES to klucz, który powoduje generowanie takich samych podkluczy w kolejnych cyklach algorytmu szyfrującego. W DES znane są 4 klucze słabe. W zapisie heksadecymalnym klucze słabe są następujące:
- 0x00000000000000 (same zera)
- 0xFFFFFFFFFFFFFF (same jedynki)
- 0x0000000FFFFFFF (połowa zer i połowa jedynek)
- 0xFFFFFFF0000000 (połowa jedynek i połowa zer)
Klucze półsłabe w DES
Klucz półsłaby w algorytmie DES to klucz, dla którego można znaleźć inny klucz, który z danego tekstu jawnego tworzy taki sam tekst zaszyfrowany. W DES znanych jest 12 kluczy półsłabych. Są one przedstawione heksadecymalnie poniżej, zapisane razem z bitami parzystości:
- 0x01E001E001F101F1 i 0xE001E001F101F101
- 0xFE01FE01FE01FE01 i 0x01FE01FE01FE01FE
- 0x1FE01FE00EF10EF1 i 0xE01FE01FF10EF10E
- 0xE0FEE0FEF1FEF1FE i 0xFEE0FEE0FEF1FEF1
- 0x1F011F010E010E01 i 0x011F011F010E010E
- 0xFE1FFE1FFE0EFE0E i 0x1FFE1FFE0EFE0EFE
Permutacje Początkowa i Końcowa w DES
Permutacje Początkowa i Końcowa nie mają wpływu na bezpieczeństwo. Nie bierze w nich udziału sekretny klucz, więc każdy może je przeprowadzić lub cofnąć na własną rękę. Zostały wprowadzone, aby ułatwić sprzętowe przetwarzanie 64 bitów bloków danych. W czasach kiedy powstał standard DES w użyciu były 8-bitowe szyny danych, które przekazywały dane do ośmiu rejestrów przesuwnych co było bardziej wydajne niż jeden rejestr 64-bitowy. Proces obsługi 8 rejestrów 8-bitowych w sposób naturalny odwzorowywał początkową permutację w DES.
Poniżej bardziej szczegółowy opis dla zainteresowanych.
Weźmy układ elektroniczny, którego zadaniem jest zaszyfrowanie za pomocą DES danych otrzymywanych w ośmiobitowych blokach. Oznacza to, że magistrala danych ma szerokość 8 linii (ma 8 równoległych ścieżek, po których przesyłane są dane), z których każda w każdym cyklu zegara dostarcza jeden bit danych. Zazwyczaj do odbierania danych stosuje się rejestry przesuwne: linia wejściowa jest połączona z jednobitowym rejestrem, który jest połączony do kolejnego jednobitowego rejestru i tak dalej. W każdym cyklu zegara każdy jednobitowy rejestr otrzymuje zawartość poprzedniego rejestru, a pierwszy rejestr przyjmuje nowy bit danych. Jak widać, zawartość jest więc przesuwana.
W przypadku 8-bitowej szyny danych, potrzebnych jest 8 rejestrów przesuwnych, z których każdy otrzyma po 8 bitów z bloku DES. Pierwszy rejestr otrzyma bity o numerach 1, 9, 17, 25, 33, 41, 49 i 57, drugi rejestr otrzyma bity o numerach 2, 10, 18, ... i tak dalej. Po ośmiu cyklach zegara, odebrany będzie cały 64 bitowy blok i nastąpi jego przekazanie do układu szyfrującego za pomocą algorytmu DES.
Jeśli nie byłoby Permutacji Początkowej, wtedy pierwszym krokiem pierwszego cyklu szyfrowania byłoby wydzielenie "lewej połowy" danych (32 bity), która składałaby się z 4 najbardziej lewych bitów każdego z ośmiu rejestrów przesuwnych. "Prawa połowa" również otrzymałaby bity ze wszystkich 8 rejestrów przesuwnych. Należałoby poprowadzić ścieżki łączące odpowiednie bity z rejestrów przesuwnych z elementami, które będą ich potem używać. Linie te przecinałyby się w wielu miejscach, co znacznie skomplikowałoby cały układ i podniosło koszty jego wykonania.
Z drugiej strony, jeśli bity wyjściowe z rejestrów przesuwnych podda się Permutacji Początkowej DES, okaże się, że linie łączące je z dalszymi elementami znacznie się uprościły i przestały się przecinać. Innymi słowy, bity przechowywane w wejściowych rejestrach przesuwnych są już wewnętrznie posortowane w ten sposób, że odwzorowują permutację początkową z algorytmu DES. Dzięki zdefiniowaniu permutacji początkowej, bity wejściowe w sprzętowej implementacji DES mogą być brane do szyfrowania w takiej kolejności w jakiej znajdują się już w wejściowych rejestrach przesuwnych.
Analogiczna sytuacja ma miejsce na końcu algorytmu, przy okazji przeprowadzania Permutacji Końcowej.
Trzeba pamiętać, że DES został zaprojektowany w czasach, kiedy nie były używane szyny o szerokości większej niż 8 bitów, a liczba tranzystorów rzędu tysiąca była olbrzymie drogą ilością logiki.
Siła szyfru DES
DES jest dobrze zaprojektowanym i efektywnym algorytmem. Już w momencie jego powstawania, wielu kryptografów twierdziło, że długość jego klucza jest za mała. Obecnie klucz o długości 56 bitów może zostać odkryty za pomocą ataku siłowego (ang. brute force) w ciągu paru dni, relatywnie niskim kosztem.
Atak na szyfr DES bardzo ułatwia znajomość fragmentu tekstu jawnego. Napastnik sprawdza wszystkie 256 kluczy i szuka takiego, dla którego blok znanego tekstu jawnego jest równy tekstowi otrzymanemu w danej próbie. W praktyce wystarczy znajomość zawartości dwóch lub trzech bloków tekstu jawnego, aby po odnalezieniu klucza, który przekształca znane szyfrogramy w takie same bloki tekstu jawnego, mieć pewność, że jest to poprawny sekretny klucz (ponieważ prawdopodobieństwo, że jest to niepoprawny klucz, który akurat dla tych konkretnych bloków zwraca poprawne wartości jest pomijalnie małe).
Najszybsze znane obecnie ataki na DES opierają się na kryptoanalizie liniowej. Wymagają znajomości 243 bloków tekstu jawnego, a ich złożoność obliczeniowa wynosi około 239 do 243.
Schemat Blokowy Algorytmu DES
Schemat Blokowy funkcji Feistela
Schemat Blokowy generowania bitów klucza w DES
Matematyka:
Permutacje są prezentowane za pomocą tabel w celu umożliwienia łatwiejszej prezentacji przekształceń. Należy mieć na uwadze, że dane wejściowe są wektorem, nie macierzą. Kliknij aby dowiedzieć się więcej o czytaniu tabeli permutacji.
Permutacja Początkowa
Permutacja Początkowa przeprowadzana jest na każdym bloku danych wejściowych na początku procesu szyfrowania.
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 |
Permutacja Klucza PC-1
Wybranie 56 z 64 bitów klucza, a następnie podzielenie ich na dwie części w celu dokonania niezależnych cyklicznych przesunięć bitów (co ósmy bit z 64 bitów klucza nie bierze udziału w szyfrowaniu i może być używany do kontroli poprawności klucza).
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 Rozszerzająca
Permutacja Rozszerzająca następuje na początku każdego cyklu funkcji Feistela i polega na rozszerzeniu prawej połowy danych z 32 bitów do 48 bitów.
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 |
Przesunięcie Bitów Klucza
W każdym cyklu funkcji Feistela dokonywane jest przesunięcie każdej 28-bitowej połówki klucza w lewo o jeden lub dwa bity.
Numer cyklu | Ilość 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 |
Permutacja Klucza PC-2
Wybiera 48 z 56 bitów aktualnego klucza, otrzymanego dla każdego cyklu funkcji Feistela.
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 |
S-Bloki
Podczas szyfrowania w S-Blokach ma miejsce operacja podstawiania: za każde sześć bitów wejściowych podstawia się cztery bity wyjściowe.
Jeżeli bity wejściowe oznaczy się kolejno jako a1, a2, a3, a4, a5 i a6, to bity a1 i 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 numeruje się 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-Bloku podamy następujący ciąg bitów: 101010 to liczbą wyjściową będzie 6 (czyli 0110 w zapisie bitowym).
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 |
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 |
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 | 1 | 1 | 2 | 12 | 5 | 10 | 14 | 7 |
1yyyy1 | 1 | 10 | 13 | 0 | 6 | 9 | 8 | 7 | 4 | 15 | 14 | 3 | 11 | 5 | 2 | 12 |
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 |
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 |
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 |
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 |
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 |
Permutacja w P-Bloku
Permutacja w P-Bloku następuje po wyjściu danych (32 bitów) z S-Bloku.
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 |
Permutacja Końcowa
Permutacja Końcowa przeprowadzana jest dla każdego bloku po ostatnim cyklu funkcji Feistela. Jest odwrotnością permutacji początkowej.
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 |