Implementacja algorytmu DES

Transkrypt

Implementacja algorytmu DES
Implementacja algorytmu DES
I
T
P
W
Mariusz Rawski
[email protected]
www.zpt.tele.pw.edu.pl/~rawski/
ZPT
Mariusz Rawski
1
Algorytm DES
DES (Data Encryption Standard) - jest szyfrem blokowym, o
I
T
P
W
algorytmie ogólnie znanym.
Dane są szyfrowane blokami o długości 64 bitów (odpowiada to
8 literom ASCII, każda zaopatrzona w bit parzystości). Blok 64
bitów tekstu jawnego podawany jest jako dane wejściowe
algorytmu, wynikiem działania algorytmu jest blok 64 bitów
szyfrogramu.
Zarówno podczas szyfrowania, jak i deszyfrowania wykorzystuje
się ten sam algorytm (za wyjątkiem różnic w operowaniu
kluczem).
Klucz ma długość 56 bitów. Zwykle klucz jest liczbą zapisaną za
pomocą 64 bitów, przy czym każdy co ósmy bit jest bitem
parzystości, który jest pomijany (tak jest, gdy klucz jest ciągiem
ośmiu znaków alfabetu ASCII).
Kluczem może być dowolna liczba o długości 56 bitów, która
może być zmieniona w dowolnej chwili.
ZPT
Mariusz Rawski
2
Algorytm DES
Działanie algorytmu opiera się na kombinacji dwóch
I
T
P
W
podstawowych technik szyfrowania: mieszania i rozpraszania.
Podstawowy blok, z którego jest zbudowany DES stanowi
pojedynczą kombinację tych technik (podstawienie, za którym
następuje permutacja) działającą z udziałem klucza.
Ciąg tych działań nazywany jest rundą. Szyfrowanie i
deszyfrowanie za wykorzystaniem algorytmu DES składa się z
16 rund.
W trakcie każdej rundy dokonywane są te same obliczenia na
wynikach z poprzedniej rundy i specjalnym podkluczu Ki
generowanym z 64-bitowego klucza.
Dodatkowo przed pierwszą i po ostatniej rundzie bity są
permutowane w ustalony sposób.
Algorytm wykorzystuje tylko standardową arytmetykę i operacje
logiczne na liczbach o długości co najwyżej 64 bitów.
ZPT
Mariusz Rawski
3
Algorytm DES
Po permutacji początkowej IP
I
T
P
W
blok wejściowy (64-bitowy blok
tekstu jawnego) jest dzielony na
lewą i prawą połowę, o długości
32 bitów każda.
Następnie wykonywanych jest 16
rund jednakowych operacji,
nazywanych funkcjami f, w czasie
których dane są łączone z
kluczem.
Po szesnastym cyklu lewa i prawa
połowa są łączone i końcowa
permutacja IP-1 będąca
odwrotnością permutacji
początkowej kończy przebieg
algorytmu.
ZPT
Mariusz Rawski
4
Algorytm DES
W każdym cyklu bity
klucza są przesuwane,
a następnie jest
wybieranych 48 bitów z
56 bitów klucza.
Prawa połowa bloku danych jest rozszerzana do 48 bitów za
I
T
P
W
pomocą permutacji z rozszerzeniem, łączona za pomocą bitowej
sumy modulo 2 z 48 bitami przesuniętego i poddanego permutacji
klucza.
ZPT
Mariusz Rawski
5
Algorytm DES
Następnie jest
dokonywane
podstawienie bloku 32
nowych bitów za
pomocą algorytmu
podstawiania, a potem
jeszcze raz jest
dokonywana
permutacja.
Te cztery operacje tworzą funkcję f. Ciąg wyjściowy funkcji f jest
I
T
P
W
dalej łączony z lewą połową za pomocą bitowej sumy modulo 2.
Wynikiem tych operacji jest nowa prawa połowa bloku; stara prawa
połowa staje się nową lewą połową. Operacje te są powtarzane 16
razy, tworząc 16 rund algorytmu DES.
ZPT
Mariusz Rawski
6
Funkcja f
Permutacja z rozszerzeniem
Suma modulo 2 z podkluczem
Skrzynki podstawieniowe z 48
bitów na 32 bity
Permutacja wyjść skrzynek
podstwieniowych
I
T
P
W
ZPT
Mariusz Rawski
7
Schemat blokowy algorytmu
Sterowanie
IP
Runda
I
T
P
W
R
IP-1
Generacja
podkluczy
ZPT
Mariusz Rawski
8
Schemat blokowy rundy algorytmu
Runda
S1
R
K
E
S2
S3
S4
S5
P
S6
S7
S8
L
I
T
P
W
ZPT
Mariusz Rawski
9
Schemat blokowy algorytmu
Sterowanie
IP
Runda
I
T
P
W
R
IP-1
Generacja
podkluczy
ZPT
Mariusz Rawski
10
Permutacja początkowa IP
Dokonuje permutacji początkowej danych wejściowych
składających się z 64 bitów wg podanej tabeli:
58 50 42 34 26 18 10
60 52 44 36 28 20 12
62 54 46 38 30 22 14
64 56 48 40 32 24 16
57 49 41 33 25 17 9
59 51 43 35 27 19 11
61 53 45 37 29 21 13
63 55 47 39 31 23 15
2
4
6
8
1
3
5
7
Oznacza to przestawienie kolejnych bitów danych wejściowych np.
na pozycji pierwszej umieszczamy bit 58, na drugiej bit 50, a na
ostatniej bit 7. Odczytanie tabeli wierszami utworzy 64 bitowy ciąg
poddany operacji transpozycji.
I
T
P
W
ZPT
Mariusz Rawski
11
Permutacja początkowa IP
Zmiana domyślnej kolejności bitów
Wykorzystanie struktur języka AHDL
do warunkowej generacji kodu
ułatwia opis modułu
58 50 42 34 26 18 10
60 52 44 36 28 20 12
62 54 46 38 30 22 14
64 56 48 40 32 24 16
57 49 41 33 25 17 9
59 51 43 35 27 19 11
61 53 45 37 29 21 13
63 55 47 39 31 23 15
I
T
P
W
ZPT
Mariusz Rawski
2
4
6
8
1
3
5
7
12
Permutacja początkowa IP
Permutacja inicjujaca
** DEVICE SUMMARY **
Chip/
Input Output Bidir
POF
Device
Pins Pins
Pins
iniperm
EPF10K10QC208-3 64
64
0
User Pins:
64
64
0
Memory Memory
Bits % Utilized
0
0 %
LCs
64
LCs
% Utilized
11 %
Sporo, ale to tylko
zamiana
bitów.
W
końcowym
układzie
zostanie
zrealizowana
przez
odpowiednie
przestawianie połączeń
między
wejściem
a
następnym blokiem bez
angażowania komórek
I
T
P
W
ZPT
Mariusz Rawski
13
Schemat blokowy algorytmu
Sterowanie
IP
Runda
I
T
P
W
R
IP-1
Generacja
podkluczy
ZPT
Mariusz Rawski
14
Multiplekser wejściowy
Wybiera czy do dalszego
przetwarzania pobierane są dane
wejściowe, czy dane z poprzedniej
rundy
I
T
P
W
ZPT
Mariusz Rawski
15
Multiplekser wejściowy
Multiplekser wejsciowy rundy
** DEVICE SUMMARY **
Chip/
Input Output Bidir
POF
Device
Pins Pins
Pins
inmux
EPF10K30BC356-3 129
64
0
User Pins:
129
64
0
Memory Memory
Bits % Utilized
0
0 %
LCs
64
LCs
% Utilized
3 %
Takiego multipleksera nie
da się zrobić lepiej, być
może ta logika zostanie
zintegrowana z inna nie
wiążąc dodatkowych
komórek.
I
T
P
W
ZPT
Mariusz Rawski
16
Schemat blokowy algorytmu
Sterowanie
IP
Runda
I
T
P
W
R
IP-1
Generacja
podkluczy
ZPT
Mariusz Rawski
17
Rejestr
Zatrzaskuje dane obliczone w
kolejnej rundzie
I
T
P
W
ZPT
Mariusz Rawski
18
Rejestr
Rejestr 64-bitowy
** DEVICE SUMMARY **
Chip/
POF
Device
register64
EPF10K10QC208-3
User Pins:
Input Output Bidir
Pins Pins
Pins
65
65
64
64
0
0
Memory Memory
Bits % Utilized
0
0
%
LCs
LCs
% Utilized
64
11 %
Takiego rejestru także nie
da się zrobić lepiej,
ale z tego
względu, że są to jedynie
przerzutniki jest nadzieja,
że
zostaną
one
połączone z pozostałą
logika bez angażowania
dodatkowych zasobów
I
T
P
W
ZPT
Mariusz Rawski
19
Schemat blokowy algorytmu
Sterowanie
IP
Runda
I
T
P
W
R
IP-1
Generacja
podkluczy
ZPT
Mariusz Rawski
20
Permutacja odwrotna IP-1
Na wejście tego bloku podane są dane otrzymane po zakończeniu
16 rundy kodowania.
40 8 48 16 56 24 64 32
39
38
37
36
35
34
33
7
6
5
4
3
2
1
47
46
45
44
43
42
41
15
14
13
12
11
10
9
55
54
53
52
51
50
49
23
22
21
20
19
18
17
63
62
61
60
59
58
57
31
30
29
28
27
26
25
Otrzymane w ten dane stanowią zaszyfrowany ciągiem danych
wejściowych.
I
T
P
W
ZPT
Mariusz Rawski
21
Permutacja odwrotna
Wykorzystanie struktur języka AHDL do
warunkowej generacji kodu ułatwia opis
modułu
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
I
T
P
W
ZPT
Mariusz Rawski
22
Permutacja odwrotna
Permutacja odwrotna
** DEVICE SUMMARY **
Chip/
Input Output Bidir
POF
Device
Pins Pins
Pins
invperm
EPF10K10QC208-3 64
64
0
User Pins:
64
64
0
Memory Memory
Bits % Utilized
0
0 %
LCs
64
LCs
% Utilized
11 %
Sporo, ale podobnie jak w
przypadku permutacji początkowej
to tylko zamiana bitów. W
końcowym
układzie
zostanie
zrealizowana przez odpowiednie
przestawianie połączeń między
poprzednim blokiem a wyjściem
bez angażowania komórek
I
T
P
W
ZPT
Mariusz Rawski
23
Schemat blokowy rundy algorytmu
Runda
S1
R
K
E
S2
S3
S4
S5
P
S6
S7
S8
L
I
T
P
W
ZPT
Mariusz Rawski
24
Permutacja rozszerzająca
Dokonuje permutacji rozszerzonej 32 bitowej prawej połowy, aby
można było wykonać operację xor z 48 bitowym podkluczem.
Polega to na powieleniu niektórych bitów wejściowych na dwa
wyjścia wg następującej zasady:
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
I
T
P
W
48 bitowe wyjście jest dzielone na 8 ciągów o długości 6 bitów, które
posłużą do adresowania 8 S-boksów.
ZPT
Mariusz Rawski
25
Permutacja rozszerzająca
Permutacja rozszerzająca
Operacja XOR z podkluczem
I
T
P
W
ZPT
Mariusz Rawski
26
Permutacja rozszerzająca
Dane wejściowe do S-boksów
** DEVICE SUMMARY **
Chip/
Input Output Bidir
POF
Device
Pins Pins
Pins
sboxin_m EPF10K10QC208-3 80
48
0
User Pins:
80
48
0
Memory Memory
Bits % Utilized
0
0 %
LCs
48
LCs
% Utilized
8 %
Tu najprawdopodobniej zostanie
zużyte
48
komórek,
gdyż
permutacja to zwykłe przestawienie
bitów, ale operacja xor będzie
musiała
być
zrealizowana
z
wykorzystaniem
komórek
logicznych
I
T
P
W
ZPT
Mariusz Rawski
27
Schemat blokowy rundy algorytmu
Runda
S1
R
K
E
S2
S3
S4
S5
P
S6
S7
S8
L
I
T
P
W
ZPT
Mariusz Rawski
28
Skrzynki podstawieniowe
Każda ze skrzynek S-boks przypisuje jednej z 64 6 bitowych
wartości wejściowych liczbę z zakresu 0..15, a więc 4 bitową. Dla
każdego S-boksu 6 bitów wejściowych określa jednoznacznie 4
bitową wartość. Z ośmiu takich wartości kolejno jest tworzony 32
bitowy ciąg, który jest przesyłany do bloku ‘p’ gdzie odbywa się jego
permutacja.
Z 6 bitowego ciągu, bity 1 i 6 określają numer wiersza, natomiast
bity od 2 do 5 wyznaczają numer kolumny. Binarna reprezentacja
liczby pod wskazanym miejscem jest przekazywana na wyjście
danego S-boksu.
S1
I
T
P
W
14 4 13 1 2 15 11 8 3 10 6 12 5 9
0 15 7 4 14 2 13 1 10 6 12 11 9 5
4 1 14 8 13 6 2 11 15 12 9 7 3 10
15 12 8 2 4 9 1 7 5 11 3 14 10 0
ZPT
Mariusz Rawski
0 7
3 8
5 0
6 13
29
Skrzynki podstawieniowe
Bit 1 i 6 określają wiersz pozostałe
kolumny
S1
14 4 13 1 2 15 11 8 3 10 6 12 5 9
0 15 7 4 14 2 13 1 10 6 12 11 9 5
4 1 14 8 13 6 2 11 15 12 9 7 3 10
15 12 8 2 4 9 1 7 5 11 3 14 10 0
0 7
3 8
5 0
6 13
I
T
P
W
ZPT
Mariusz Rawski
30
Skrzynki podstawieniowe
S-box S1
** DEVICE SUMMARY **
Chip/
POF
Device
s1
EPF10K10LC84-3
User Pins:
Input Output Bidir
Pins Pins
Pins
6
4
0
6
4
0
Memory Memory
Bits % Utilized
0
0 %
Jeden S-box
komórek…
LCs
55
LCs
% Utilized
9 %
zajmuje
wprowadza
aż
też
tyle
duże
opóźnienie.
I
T
P
W
ZPT
Mariusz Rawski
31
Skrzynki podstawieniowe
Liczba
komórek
Max.
opóźnienie
S1
S2
S3
S4
S5
S6
S7
S8
55
74
77
80
68
73
77
81
28,1
31,6
33,5
34,0
28,4
30,4
34,3
31,4
Razem 585 komórek
opóźnieniem 34,3 ns.
I
T
P
W
z
maksymalnym
To wszystko w jednej rundzie algorytmu…
a rund jest 16.
Wybór dotyczący budowy sekwencyjnego
algorytmu DES był słuszny. Przy realizacji
kombinacyjnej same skrzynki zajęły by 16 x
585 = 9360 komórek logicznych
ZPT
Mariusz Rawski
32
Permutacja P
Runda
S1
R
K
E
S2
S3
S4
S5
P
S6
S7
S8
L
I
T
P
W
ZPT
Mariusz Rawski
33
Permutacja P
Dokonuje permutacji na kolejno zestawionych wyjściach z S-boksów
wg następującego schematu:
16
29
1
5
2
32
19
22
7
12
15
18
8
27
13
11
20
28
23
31
24
3
30
4
21
17
26
10
14
9
6
25
Wynik permutacji P jest sumowany bitowo modulo 2 z lewą połową
I
T
P
W
ZPT
początkowego bloku 64-bitowego. Następnie lewa i prawa połowa
są zamieniane miejscami i zaczyna się kolejny cykl.
Po ostatniej iteracji prawa i lewa połowa słowa wynikowego nie są
zamieniane miejscami, lecz zamiast tego na bloku bitów powstałych
z połączenia R16L16 jest wykonywana permutacja końcowa IP-1
(stąd do deszyfrowania stosuje się też ten algorytm).
Mariusz Rawski
34
Permutacja P
16
29
1
5
2
32
19
22
I
T
P
W
ZPT
Mariusz Rawski
7
12
15
18
8
27
13
11
20
28
23
31
24
3
30
4
21
17
26
10
14
9
6
25
35
Permutacja P
Permutacja P
** DEVICE SUMMARY **
Chip/
Input Output Bidir
POF
Device
Pins Pins
Pins
pperm
EPF10K10TC144-3 32
32
0
User Pins:
32
32
0
Memory Memory
Bits % Utilized
0
0 %
LCs
32
LCs
% Utilezed
5 %
Podobna sytuacja jak z innymi
blokami permutującymi…
I
T
P
W
ZPT
Mariusz Rawski
36
Funkcja f
** DEVICE SUMMARY **
I
Chip/
T
POF
Device
P
W ffunction
EPF10K20RC208-3
User Pins:
ZPT
Input Output Bidir
Pins Pins
Pins
80
80
32
32
0
0
Memory Memory
Bits % Utilized
0
Mariusz Rawski
0
%
LCs
668
LCs
% Utilized
57 %
37
Runda
I
T
P
W
** DEVICE SUMMARY **
Chip/
Input Output Bidir
POF
Device
Pins Pins
Pins
desround EPF10K20RC240-3 112
64
0
User Pins:
112
64
0
Memory Memory
Bits % Utilized
0
0 %
ZPT
Mariusz Rawski
LCs
LCs % Utilized
710
61 %
38
Ścieżka przepływu danych
I
T
P
W
ZPT
Mariusz Rawski
39
Ścieżka przepływu danych
** DEVICE SUMMARY **
Chip/
Input Output Bidir
POF
Device
Pins Pins
Pins
datapath EPF10K20RC240-3 114
64
0
User Pins:
114
64
0
Memory Memory
Bits % Utilized
0
0 %
LCs
LCs % Utilized
709
61 %
Runda wymagała 710 komórek…
dodanie permutacji wejściowej,
wyjściowej, multipleksera i rejestru nie
zwiększyło tej liczby.
Jest to zgodne z naszymi przypuszczeniami.
I
T
P
W
Oszacowanie
szybkości
działania
jednej
rundy
jest
obiecujące.
ZPT
Mariusz Rawski
40
Algorytm DES
I
T
P
W
ZPT
Mariusz Rawski
41
Algorytm DES
** DEVICE SUMMARY **
Chip/
Input Output Bidir
POF
Device
Pins Pins
Pins
des
EPF10K20RC240-3 123
65
0
User Pins:
123
65
0
Memory Memory
Bits % Utilized
0
0 %
LCs
LCs % Utilized
1050
91 %
Runda wymagała 710 komórek. Wraz z
generacją klucza i sterowaniem dało to w
sumie 1050 komórek – jest to 91 % zasobów
układu FLEX10K20…
nie ma co nawet myśleć o
realizacji kombinacyjnej bez zmiany układu
programowalnego na znacznie większy
I
T
P
W
Oszacowanie maksymalnej szybkości taktowania
układu dało w rezultacie 15 MHz.
Jeden blok 64 bitowy przetwarzany jest w 17
taktach zegara, wiec przepustowość układu wynosi:
15 * 10 6 /17 * 64 ≅ 56 Mbitów/s
i jest dość imponująca.
ZPT
Mariusz Rawski
42
Sterowanie
I
T
P
W
ZPT
Mariusz Rawski
43
Algorytm DES – jak przyspieszyć
Co zrobić by układ
działał szybciej
Wykorzystać opcje syntezy
logicznej systemu CAD do
optymalizacji szybkości
działania
I
T
P
W
ZPT
Mariusz Rawski
44
Algorytm DES – trochę szybszy
** DEVICE SUMMARY **
Chip/
Input Output Bidir
POF
Device
Pins Pins
Pins
des
EPF10K30RC240-3 123
65
0
User Pins:
123
65
0
Memory Memory
Bits % Utilized
0
0 %
LCs
LCs % Utilized
1456
84 %
Wymaga to wykorzystania 1456 komórek –
co stanowi 84 % zasobów układu
FLEX10K30…
oznacza to zmianę struktury
programowalnej na większą
I
T
P
W
Wykorzystanie opcji syntezy logicznej pozwoliło
zwiększyć maksymalną szybkości taktowania
układu do 16,5 MHz.
Wiec przepustowość układu wynosi:
16,5 * 10 6 /17 * 64 ≅ 62 Mbitów/s
ZPT
Mariusz Rawski
45
Algorytm DES – jak przyspieszyć
Czy to jedyny
sposób?
Można wykorzystać inne
narzędzia do syntezy
logicznej, albo mechanizmy
potokowości
I
T
P
W
ZPT
Mariusz Rawski
46
Dekompozycja S-boxów
Każda ze skrzynek S-boks jest funkcją
kombinacyjną
Można ją więc zdekomponować i
wykorzystać sieć bloków po
dekompozycji do realizacji tych funkcji
I
T
P
W
ZPT
Mariusz Rawski
47
Skrzynki podstawieniowe
Decomposed project: S1
** DEVICE SUMMARY **
Chip/
Input Output Bidir
POF
Device
Pins Pins
Pins
s1dek
EPF10K10LC84-3
6
4
0
User Pins:
6
4
0
Memory Memory
Bits % Utilized
0
0 %
LCs
25
LCs
% Utilized
4 %
Pierwszy S-box zajmuje
teraz 25 zamiast 55
( dwukrotnie mniej !!!)
wprowadza też
mniejsze opóźnienie
Zapowiada się ciekawie…
I
T
P
W
ZPT
Mariusz Rawski
48
Skrzynki podstawieniowe
Liczba komórek
Max.
opóźnienie
S1
S2
S3
S4
S5
S6
S7
S8
55
74
77
80
68
73
77
81
28,1
31,6
33,5
34,0
28,4
30,4
34,3
31,4
Po dekompozycji
Liczba
komórek
Max.
opóźnienie
I
T
P
W
ZPT
25
20
22
24
25
22
23
23
19,5
17,2
16,7
19,0
19,0
19,4
17,7
17,6
Razem 184 komórki w porównaniu do 585 komórek w
realizacji wcześniejszej (ponad trzykrotnie mniej) z
maksymalnym opóźnieniem 19,5 ns w porównaniu do
34,3 ns.
Przy realizacji kombinacyjnej skrzynki zajęłyby teraz 16 x
184 = 2944 komórki logiczne… teraz można o tym
pomyśleć
Mariusz Rawski
49
Funkcja f
** DEVICE SUMMARY **
I
Chip/
T
POF
Device
P
W ffunction
EPF10K10QC208-3
User Pins:
ZPT
Input Output Bidir
Pins Pins
Pins
80
80
32
32
0
0
Memory Memory
Bits % Utilized
0
Mariusz Rawski
0
%
LCs
234
LCs
% Utilized
40 %
50
Algorytm DES – na nowo
** DEVICE SUMMARY **
Chip/
Input Output Bidir
POF
Device
Pins Pins
Pins
des
EPF10K20RC240-3 123
65
0
User Pins:
123
65
0
Memory Memory
Bits % Utilized
0
0 %
LCs
LCs % Utilized
579
50 %
Układ prawie dwukrotnie mniejszy – w sumie
579 komórek – jest to zaledwie 50 %
zasobów układu FLEX10K20…
można więc myśleć o stosowaniu
dodatkowych
metod
przyspieszających
działanie układu np.. potokowość
Oszacowanie maksymalnej szybkości taktowania
układu dało w rezultacie 25,6 MHz.
I
T
P
W
Wiec przepustowość układu wynosi:
25,6 * 10 6 /17 * 64 ≅ 94 Mbitów/s
i jest o wiele większa niż wcześniej
ZPT
Mariusz Rawski
51
Koniec projektu …
I
T
P
W
ZPT
Mariusz Rawski
52