po 48 bitów każdy. Sposób tworzenia podkluczy dla kolejnych rund jest z góry określony i został opublikowany razem z opisem algorytmu.
Na każdą rundę składają się podstawienia:
Li+l — Ri
Ri+1 = Li® f {Ri, Ki+1)
gdzie Li to pierwsze 32 bity wyniku i-tej rundy, Ri - końcowe 32 bity i-tej rundy, a Ki to i-ty podklucz. Pierwszorzędne znaczenie ma tu funkcja /, która obliczana jest w kilku krokach:
- Z 32 bitów Ri tworzona jest liczba 48-bitowa poprzez skopiowanie niektórych
bitów dwukrotnie. Jest to tzw. permutacja z rozszerzeniem.
— Na otrzymanej liczbie dokonywana jest operacja xor z kluczem Ki+
— Otrzymane 48 bitów dzielone jest na 8 ciągów po 6 bitów po czym każdy
z nich poddawany jest działaniu odpowiedniego dla danej rundy S-boksu.
- Na koniec otrzymane 32 bity są permutowane.
DES jest szyfrem symetrycznym co oznacza, że do deszyfrowania używamy tej samej procedury co do kodowania. Wymaga to tylko użycia podkluczy w odwrotnej kolejności.
Jak już zostało zauważone DES szyfruje bloki danych po 64 bity (po usunięciu bitów parzystości tylko 56) i potrzebuje do tego klucza o tej samej długości. Aby zaszyfrować jakiś tekst jawny o sensownej długości wymagany jest ciąg, najlepiej pseudolosowych, kluczy. Oznacza to konieczność zbudowania wydajnego generatora sekwencji pseudolosowych.
Dla implementacji sprzętowych DESa przewidziano generator Linear Feed-back Shift Register (LFSR), który złożony jest z rejestru przesuwnego o danej długości oraz wielowejściowej bramki XOR podłączonej do wybranych bitów rejestru. Generator inicjowany jest przez zapisanie losowych bitów do pól rejestru. W pojedynczym cyklu generowany jest jeden bit. Najpierw w bramce XOR obliczana jest dysjunkcja, a wyliczony bit wpisywany jest na początek rejestru przesuwającego. Aby zrobić dla niego miejsce zawartość rejestru przesuwana jest o jedno pole, a ostatni bit, który „wypadnie” jest właśnie kolejnym bitem pseu-dolosowego ciągu.
LFSR w wersji hardwareowej działa bardzo szybko, niestety generowane przezeń ciągi nie przedstawiają sobą najwyższej jakości. Niech rejestr przesuwny LFSR ma długość k bitów. Wtedy okazuje się, że znajomość sekwencji 2k bitów wygenerowanego ciągu pozwala na przewidywanie dalszego zachowania generatora. Nie jest on więc kryptograficznie bezpieczny, ale szybkość działania pozostaje kuszącą cechą. Aby poprawić własności otrzymywanego ciągu funkcję xor można zastąpić inną, bardziej skomplikowaną. Można również w jednym układzie zastosować kilka LFSRów. Wartości generowne przez poszczególne układy są potem kombinowane w pewien sposób. Jest to prosta i tania metoda, ale w pewnych przypadkach nie daje porządanych efektów.
Przykładem takiej konstrukcji o dobrych rezultatach jest Shrinking LFSR składający się z dwu mdułów LFSR. Powiedzmy, że ciągi ai, a2,... i &i, 62, • • •