Darmowy fragment publikacji:
Sieci komputerowe. Ujêcie
ca³oœciowe. Wydanie V
Autorzy: James F. Kurose, Keith W. Ross
T³umaczenie: Tomasz Walczak
ISBN: 978-83-246-2632-8
Tytu³ orygina³u: Computer Networking:
A Top-Down Approach (5th Edition)
Format: 172245, stron: 968
Zdob¹dŸ najlepsz¹ aktualn¹ wiedzê na temat sieci komputerowych
• Jak dzia³aj¹ aplikacje sieciowe i protoko³y?
• Na czym polega warstwowoœæ architektury sieciowej?
• W jaki sposób zbudowaæ doskonale funkcjonuj¹c¹ i bezpieczn¹ aplikacjê?
Istnieje wiele ksi¹¿ek na temat sieci komputerowych, jednak podrêcznik, który trzymasz
w rêkach, wyraŸnie wyró¿nia siê na ich tle. Dzieje siê tak z powodu niebanalnej konstrukcji
tej publikacji, opieraj¹cej siê na metodzie omawiania zagadnieñ „od góry do do³u”, od
ogó³u do szczegó³u, a wiêc prezentowania jako pierwszej warstwy aplikacji, a nastêpnie
kolejnych, ni¿szych warstw – a¿ do warstwy fizycznej. W ten sposób zwraca siê
szczególn¹ uwagê na tê warstwê, która rozwija siê najszybciej i jest najbardziej
interesuj¹cym elementem sieci.
Z ksi¹¿ki „Sieci komputerowe. Ujêcie ca³oœciowe. Wydanie V” dowiesz siê wszystkiego
na temat programowania aplikacji, protoko³ów wy¿szych warstw oraz aktualnych
zabezpieczeñ sieciowych. Oprócz rzetelnie przedstawionej podstawowej wiedzy
znajdziesz tu znacznie bardziej szczegó³owe informacje o sieciach P2P opartych na
protokole BitTorrent, dodatkowe materia³y na temat sieci DHT, zaktualizowane omówienie
sieci dostêpowych (miêdzy innymi kablowych, FTTH i DSL), a tak¿e informacje dotycz¹ce
historii sieci komputerowych i Internetu. Korzystaj¹c z tego podrêcznika, z ³atwoœci¹
zaprojektujesz w³asn¹, œwietnie funkcjonuj¹c¹ aplikacjê sieciow¹.
• Sieci dostêpowe i noœniki fizyczne
• Architektura aplikacji sieciowych
• Warstwy: aplikacji, transportowa, sieci, ³¹cza danych i fizyczna
• Przepustowoœæ w sieciach komputerowych
• Programy klienta i serwera
• Technologia WWW i protokó³ http
• Sieci bezprzewodowe i mobilne
• Multimedia
• Aplikacje z obszaru P2P
• Bezpieczeñstwo w sieciach komputerowych
• Zarz¹dzanie sieciami
Wszystko, co chcia³byœ wiedzieæ o aplikacjach sieciowych, protoko³ach i Internecie
Spis treści 5
Spis treści
O autorach
Przedmowa
Rozdział 1. Sieci komputerowe i internet
1.1. Czym jest internet?
1.1.1. Opis podstawowych komponentów
1.1.2. Omówienie usług
1.1.3. Czym jest protokół?
1.2. Obrzeże sieci
1.2.1. Programy klienta i serwera
1.2.2. Sieci dostępowe
1.2.3. Fizyczny nośnik
1.3. Rdzeń sieci
1.3.1. Przełączanie obwodów i pakietów
1.3.2. W jaki sposób poruszają się pakiety
w sieciach z przełączaniem pakietów?
1.3.3. Dostawcy ISP i sieci szkieletowe internetu
1.4. Opóźnienie i utrata pakietów
w sieciach z przełączaniem pakietów
1.4.1. Omówienie opóźnień
w sieciach z przełączaniem pakietów
1.4.2. Opóźnienie kolejkowania i utrata pakietów
1.4.3. Opóźnienie międzywęzłowe
1.4.4. Przepustowość w sieciach komputerowych
1.5. Warstwy protokołów i modele ich usług
1.5.1. Architektura warstwowa
1.5.2. Komunikaty, segmenty, datagramy i ramki
1.6. Sieci pod atakiem
1.7. Historia sieci komputerowych i internetu
1.7.1. Rozwój technologii przełączania pakietów: 1961 – 1972
1.7.2. Sieci zastrzeżone i łączenie sieci: 1972 – 1980
1.7.3. Popularyzacja sieci: 1980 – 1990
1.7.4. Eksplozja internetu: lata 90.
1.7.5. Ostatnie dokonania
1.8. Podsumowanie
Struktura książki
15
17
27
28
28
32
33
36
38
39
49
53
54
61
63
65
66
70
73
75
78
79
85
87
93
93
94
96
98
99
100
101
5
6 Spis treści
Problemy do rozwiązania i pytania
Problemy
Dodatkowe pytania
Ćwiczenie realizowane za pomocą narzędzia Wireshark
WYWIAD Z…: Leonard Kleinrock
Rozdział 2. Warstwa aplikacji
2.1. Podstawy dotyczące aplikacji sieciowych
2.1.1. Architektury aplikacji sieciowych
2.1.2. Komunikacja procesów
2.1.3. Usługi transportowe dostępne aplikacjom
2.1.4. Usługi transportowe dostępne w internecie
2.1.5. Protokoły warstwy aplikacji
2.1.6. Aplikacje sieciowe uwzględnione w książce
2.2. Technologia WWW i protokół HTTP
2.2.1. Omówienie protokołu HTTP
2.2.2. Połączenia nietrwałe i trwałe
2.2.3. Format komunikatu HTTP
2.2.4. Interakcja między użytkownikiem i serwerem
— pliki cookies
2.2.5. Buforowanie stron internetowych
2.2.6. Warunkowe żądanie GET
2.3. Transfer plików przy użyciu protokołu FTP
2.3.1. Polecenia i odpowiedzi protokołu FTP
2.4. Internetowa poczta elektroniczna
2.4.1. Protokół SMTP
2.4.2. Porównanie protokołów SMTP i HTTP
2.4.3. Formaty wiadomości pocztowych
2.4.4. Protokoły dostępu do skrzynki pocztowej
2.5. System DNS, czyli internetowa usługa katalogowa
2.5.1. Usługi oferowane przez system DNS
2.5.2. Przegląd zasad działania systemu DNS
2.5.3. Rekordy i komunikaty systemu DNS
2.6. Aplikacje z obszaru P2P
2.6.1. Dystrybucja plików w sieciach P2P
2.6.2. Sieci DHT
2.6.3. Studium przypadku — Skype,
czyli telefonia internetowa oparta na sieci P2P
2.7. Programowanie gniazd protokołu TCP
2.7.1. Programowanie gniazd protokołu TCP
2.7.2. Przykład aplikacji klient-serwer
napisanej w języku Java
102
105
114
115
117
121
122
123
126
129
131
136
137
138
138
141
144
149
151
155
158
159
160
163
167
167
168
173
174
176
183
189
190
196
201
203
205
207
2.8. Programowanie gniazd protokołu UDP
2.9. Podsumowanie
Problemy do rozwiązania i pytania
Problemy
Dodatkowe pytania
Zadania związane z programowaniem gniazd
Zadanie 1: Wielowątkowy serwer WWW
Zadanie 2: Klient pocztowy
Zadanie 3: Aplikacja Ping używająca protokołu UDP
Zadanie 4: Serwer pośredniczący WWW
Ćwiczenia wykorzystujące narzędzie Wireshark
Ćwiczenie 1: Protokół HTTP
Ćwiczenie 2: Protokół DNS
WYWIAD Z…: Bram Cohen
Rozdział 3. Warstwa transportowa
3.1. Podstawowe informacje na temat usług
warstwy transportowej
3.1.1. Związek występujący między warstwami
transportową i sieci
3.1.2. Przegląd zastosowania warstwy transportowej
Spis treści 7
214
221
222
225
234
235
235
235
236
236
237
237
237
238
241
242
244
3.4. Podstawy dotyczące niezawodnego transferu danych
3.2. Multipleksowanie i demultipleksowanie
3.3. Bezpołączeniowy protokół transportowy UDP
w internecie
3.3.1. Struktura segmentu UDP
3.3.2. Suma kontrolna segmentu UDP
246
248
255
260
260
262
3.4.1. Tworzenie protokołu niezawodnego transferu danych
264
3.4.2. Potokowane protokoły niezawodnego transferu danych 274
278
3.4.3. Go-Back-N
3.4.4. Powtarzanie selektywne
283
290
290
294
299
303
311
314
321
322
329
3.5.1. Połączenie TCP
3.5.2. Struktura segmentu TCP
3.5.3. Wyznaczanie czasu RTT i czas oczekiwania
3.5.4. Niezawodny transfer danych
3.5.5. Kontrola przepływu
3.5.6. Zarządzanie połączeniem TCP
3.6.1. Przyczyny przeciążenia i jego konsekwencje
3.6.2. Metody kontroli przeciążenia
3.5. Protokół transportowy TCP zorientowany na połączenie
3.6. Podstawy dotyczące kontroli przeciążenia
8 Spis treści
3.6.3. Przykład kontroli przeciążenia wspieranej
przez warstwę sieci — kontrola przeciążenia
protokołu ABR architektury ATM
3.7. Kontrola przeciążenia w przypadku protokołu TCP
3.7.1. Sprawiedliwy przydział przepustowości
3.8. Podsumowanie
Problemy do rozwiązania i pytania
Problemy
Pytania dodatkowe
Zadania związane z programowaniem
Zastosowanie niezawodnego protokołu transportowego
Ćwiczenie wykorzystujące narzędzie Wireshark
— poznawanie protokołu TCP
Ćwiczenie wykorzystujące narzędzie Wireshark
— poznawanie protokołu UDP
WYWIAD Z…: Sally Floyd
Rozdział 4. Warstwa sieci
4.1. Wprowadzenie
330
333
343
347
350
353
366
367
367
367
368
369
435
437
440
445
455
4.3. Co znajduje się wewnątrz routera?
4.2. Sieci datagramowe i wirtualnych obwodów
4.1.1. Przekazywanie i routing
4.1.2. Modele usług sieciowych
373
374
376
379
381
382
4.2.1. Sieci wirtualnych obwodów
4.2.2. Sieci datagramowe
386
4.2.3. Początki sieci datagramowych i wirtualnych obwodów 388
389
391
394
396
397
400
402
409
424
428
4.4.1. Format datagramu
4.4.2. Funkcja adresowania protokołu IPv4
4.4.3. Protokół ICMP
4.4.4. Protokół IPv6
4.4.5. Krótki przegląd zagadnień związanych
4.3.1. Porty wejściowe
4.3.2. Struktura przełączająca
4.3.3. Porty wyjściowe
4.3.4. Gdzie ma miejsce kolejkowanie?
z bezpieczeństwem w protokole IP
4.4. Protokół IP — przekazywanie i adresowanie w internecie
4.5. Algorytmy routingu
4.5.1. Algorytm routingu stanu łącza
4.5.2. Algorytm wektora odległości
4.5.3. Routing hierarchiczny
4.6. Routing w internecie
4.6.1. Wewnętrzny protokół routingu
systemu autonomicznego — protokół RIP
4.6.2. Wewnętrzny protokół routingu
systemu autonomicznego — protokół OSPF
4.6.3. Zewnętrzny protokół routingu
systemu autonomicznego — protokół BGP
4.7. Routing rozgłaszania i rozsyłania grupowego
4.7.1. Algorytmy routingu rozgłaszania
4.7.2. Rozsyłanie grupowe
4.8. Podsumowanie
Problemy do rozwiązania i pytania
Problemy
Dodatkowe pytania
Zadania programistyczne
WYWIAD Z…: Vinton G. Cerf
Rozdział 5. Warstwa łącza danych i sieci lokalne
5.1. Warstwa łącza danych — wprowadzenie i usługi
5.1.1. Usługi świadczone przez warstwę łącza danych
5.1.2. Gdzie zaimplementowana jest warstwa łącza danych?
Spis treści 9
460
461
465
468
477
477
484
492
493
496
509
509
511
513
515
515
518
520
522
524
525
528
530
532
540
542
543
543
545
550
552
556
560
562
563
565
566
567
570
5.2. Metody wykrywania i usuwania błędów
5.2.1. Kontrola parzystości
5.2.2. Suma kontrolna
5.2.3. Kontrola nadmiarowości cyklicznej
5.3. Protokoły wielodostępu
5.3.1. Protokoły dzielące kanał
5.3.2. Protokoły dostępu losowego
5.3.3. Protokoły cykliczne
5.3.4. Sieci lokalne
5.4. Adresowanie na poziomie warstwy łącza danych
5.4.1. Adresy MAC
5.4.2. Protokół ARP
5.5. Ethernet
5.5.1. Struktura ramki technologii Ethernet
5.5.2. CSMA/CD — ethernetowy protokół wielodostępu
5.5.3. Odmiany technologii Ethernet
5.6. Przełączniki warstwy łącza danych
5.6.1. Funkcje przekazywania i filtrowania
5.6.2. Automatyczne uczenie
5.6.3. Cechy przełączania w warstwie łącza danych
5.6.4. Porównanie przełączników i routerów
5.6.5. Wirtualne sieci lokalne (VLAN)
10 Spis treści
5.7. Protokół PPP
5.7.1. Ramka danych protokołu PPP
5.8. Wirtualizacja łącza — sieć jako warstwa łącza danych
5.9. Dzień z życia żądania strony internetowej
5.10. Podsumowanie
Problemy do rozwiązania i pytania
Problemy
Dodatkowe pytania
WYWIAD Z…: Simon S. Lam
Rozdział 6. Sieci bezprzewodowe i mobilne
6.1. Wprowadzenie
6.2. Cechy łączy i sieci bezprzewodowych
6.2.1. CDMA
6.3. Wi-Fi: bezprzewodowe sieci lokalne 802.11
6.3.1. Architektura sieci 802.11
6.3.2. Protokół kontroli dostępu do nośnika 802.11
6.3.3. Ramka IEEE 802.11
6.3.4. Mobilność w tej samej podsieci IP
6.3.5. Zaawansowane funkcje protokołu 802.11
6.3.6. Poza standard 802.11 — Bluetooth i WiMAX
6.4. Komórkowy dostęp do internetu
6.4.1. Omówienie architektury komórkowej
6.5. Zasady zarządzania mobilnością
6.5.1. Adresowanie
6.5.2. Routing do węzła mobilnego
6.6. Mobile IP
6.7. Zarządzanie mobilnością w sieciach komórkowych
6.7.1. Routing rozmów z użytkownikiem mobilnym
6.7.2. Transfery w GSM
6.8. Wpływ bezprzewodowości i mobilności
na protokoły wyższych warstw
6.9. Podsumowanie
Pytania i problemy do rozwiązania
Problemy
Zagadnienia do dyskusji
WYWIAD Z…: Charlie Perkins
Rozdział 7. Multimedia
7.1. Multimedialne aplikacje sieciowe
7.1.1. Przykłady aplikacji multimedialnych
7.1.2. Problemy z multimediami w dzisiejszym internecie
574
576
578
583
589
591
592
601
602
605
606
611
614
618
619
623
629
632
633
635
639
640
645
648
650
655
659
661
662
666
668
669
670
674
675
679
680
680
684
Spis treści 11
7.1.3. Co należy zmienić, aby lepiej przystosować internet
do potrzeb aplikacji multimedialnych?
7.1.4. Kompresja obrazu i dźwięku
7.2. Strumieniowa transmisja zapisanego obrazu i dźwięku
7.2.1. Dostęp do obrazu i dźwięku
za pośrednictwem serwera WWW
7.2.2. Wysyłanie multimediów z serwera strumieniowego
do aplikacji pomocniczej
7.2.3. Real-Time Streaming Protocol (RTSP)
7.3. Optymalne wykorzystanie usługi best-effort:
przykład telefonu internetowego
7.3.1. Ograniczenia usługi best-effort
7.3.2. Usuwanie fluktuacji po stronie odbiorcy
7.3.3. Eliminowanie skutków utraty pakietów
7.3.4. Rozpowszechnianie multimediów
we współczesnym internecie: sieci dystrybucji treści
7.3.5. Wymiarowanie sieci best-effort
w celu zapewniania jakości usług
7.4. Protokoły używane przez interaktywne aplikacje czasu
rzeczywistego
7.4.1. RTP
7.4.2. RTP Control Protocol (RTCP)
7.4.3. SIP
7.4.4. H.323
7.5. Udostępnianie usług wielu klas
7.5.1. Przykładowe scenariusze
7.5.2. Mechanizmy szeregowania i regulacji
7.5.3. Usługi zróżnicowane (Diffserv)
7.6. Zapewnianie gwarancji jakości usług
7.6.1. Ilustrujący przykład
7.6.2. Rezerwowanie zasobów, zatwierdzanie połączeń
i zestawianie połączeń
7.6.3. Usługi o gwarantowanej jakości w internecie
— Intserv i RSVP
7.7. Podsumowanie
Pytania i problemy do rozwiązania
Problemy
Zagadnienia do dyskusji
WYWIAD Z…: Henning Schulzrinne
685
687
691
691
693
695
699
700
702
706
709
713
714
715
719
723
729
730
732
736
743
748
748
750
752
755
756
758
765
766
12 Spis treści
Rozdział 8. Bezpieczeństwo w sieciach komputerowych
8.1. Czym jest bezpieczeństwo sieci?
8.2. Zasady kryptografii
8.2.1. Kryptografia z kluczem symetrycznym
8.2.2. Szyfrowanie z kluczem publicznym
8.3. Integralność komunikatów i uwierzytelnianie
punktów końcowych
8.3.1. Kryptograficzne funkcje skrótu
8.3.2. Kod MAC
8.3.3. Podpisy cyfrowe
8.3.4. Uwierzytelnianie punktów końcowych
8.4. Zabezpieczanie poczty elektronicznej
8.4.1. Bezpieczna poczta elektroniczna
8.4.2. PGP
8.5. Zabezpieczanie połączeń TCP — protokół SSL
8.5.1. Ogólny obraz
8.5.2. Bardziej kompletny obraz
8.6. Zabezpieczenia w warstwie sieci — IPsec i sieci VPN
8.6.1. IPsec i sieci VPN
8.6.2. Protokoły AH i ESP
8.6.3. Skojarzenia bezpieczeństwa
8.6.4. Datagram IPsec
8.6.5. IKE — zarządzanie kluczami w protokole IPsec
8.7. Zabezpieczanie bezprzewodowych sieci lokalnych
8.7.1. Wired Equivalent Privacy (WEP)
8.7.2. IEEE 802.11i
8.8. Bezpieczeństwo operacyjne — zapory i systemy
wykrywania włamań
8.8.1. Zapory sieciowe
8.8.2. Systemy wykrywania włamań
8.9. Podsumowanie
Pytania i problemy do rozwiązania
Problemy
Zagadnienia do dyskusji
Ćwiczenie realizowane za pomocą narzędzia Wireshark
Ćwiczenie z wykorzystaniem protokołu IPsec
WYWIAD Z…: Steven M. Bellovin
Rozdział 9. Zarządzanie sieciami
9.1. Co to jest zarządzanie siecią?
9.2. Infrastruktura zarządzania siecią
9.3. Internetowy model zarządzania siecią
769
770
773
774
781
787
788
789
791
798
802
804
808
809
811
814
816
817
818
819
820
824
825
826
828
830
831
839
842
844
846
853
853
854
855
857
857
862
864
9.3.1. Struktura informacji administracyjnych: SMI
9.3.2. Baza informacji administracyjnych: MIB
9.3.3. Działanie protokołu SNMP
i sposób przesyłania komunikatów
9.3.4. Bezpieczeństwo i administracja
9.4. ASN.1
9.5. Podsumowanie
Pytania i problemy do rozwiązania
Problemy
Zagadnienia do dyskusji
WYWIAD Z…: Jeff Case
Źródła
Skorowidz
Spis treści 13
868
871
873
877
880
884
885
886
887
888
891
923
ROZDZIAŁ 8
Bezpieczeństwo
w sieciach
komputerowych
Wiele stron temu, w podrozdziale 1.6, opisaliśmy niektóre z najczęstszych i naj-
bardziej szkodliwych ataków internetowych, między innymi ataki za pomocą
szkodliwego oprogramowania, przez odmowę usług (DoS), przechwytywanie
danych, podszywanie się pod nadawcę i modyfikowanie oraz usuwanie komu-
nikatów. Choć od tego czasu Czytelnicy nauczyli się wielu rzeczy o sieciach
komputerowych, nadal nie dowiedzieli się, jak zabezpieczać je przed atakami
wymienionymi w podrozdziale 1.6. Uzbrojeni w nowo nabytą wiedzę ekspercką
na temat sieci i protokołów internetowych Czytelnicy mogą teraz przystąpić
do szczegółowej analizy bezpiecznej komunikacji, a przede wszystkim tego, jak
zabezpieczać sieci komputerowe przed napastnikami.
Poznajmy Alicję i Bartka, dwie osoby, które zamierzają się porozumieć i chcą,
aby ich komunikacja była „bezpieczna”. Ponieważ jest to książka poświęcona
sieciom, nadmieńmy, że Alicją i Bartkiem mogą być dwa routery, które muszą
wymienić tablice routingu, klient i serwer, które muszą nawiązać bezpieczne
połączenie transportowe, albo dwie aplikacje e-mail, które muszą bezpiecznie
wymienić pocztę — są to konkretne przypadki, które zbadamy w dalszej części
rozdziału. Alicja i Bartek to osoby cieszące się dużą popularnością wśród eks-
pertów od bezpieczeństwa, być może dlatego, że przyjemniej jest posługiwać
się imionami niż ogólnikowymi oznaczeniami w rodzaju „A” lub „B”. Zwykło się
mawiać, że bezpieczna komunikacja jest potrzebna w romansach pozamałżeń-
skich, podczas wojny i w transakcjach handlowych. Ponieważ wolimy ten pierw-
szy scenariusz od pozostałych dwóch, będziemy wyobrażać sobie Alicję i Bartka
jako parę zakochanych.
769
770 ROZDZIAŁ 8. x BEZPIECZEŃSTWO W SIECIACH KOMPUTEROWYCH
Stwierdziliśmy, że Alicja i Bartek chcą komunikować się „bezpiecznie”, ale
co to właściwie znaczy? Jak się niebawem przekonamy, bezpieczeństwo (jak
miłość) ma wiele aspektów. Bez wątpienia Alicja i Bartek chcieliby, aby ich
komunikacja pozostała ukryta przed innymi osobami (na przykład zazdrosnym
małżonkiem). Prawdopodobnie chcieliby też mieć pewność, że rzeczywiście
porozumiewają się ze sobą, a jeśli ktoś zmodyfikuje ich wiadomości, to będzie
można wykryć tę modyfikację. W pierwszej części rozdziału omówimy techniki,
które zapewniają szyfrowanie i deszyfrowanie komunikacji, uwierzytelnianie
porozumiewających się stron oraz integralność wiadomości.
W drugiej części rozdziału zbadamy, jak wykorzystać podstawowe zasady
kryptograficzne do tworzenia bezpiecznych protokołów sieciowych. Ponownie
zastosujemy podejście góra-dół i przyjrzymy się bezpiecznym protokołom
w każdej z czterech górnych warstw (zaczniemy od warstwy aplikacji). Poka-
żemy, jak zabezpieczać pocztę elektroniczną i połączenia TCP, jak zapewnić
pełne bezpieczeństwo w warstwie sieci oraz jak chronić bezprzewodowe sieci
lokalne. W trzeciej części rozdziału rozważymy bezpieczeństwo operacyjne,
związane z ochroną sieci firmowych przed atakami. Przede wszystkim dokład-
nie przyjrzymy się, w jaki sposób zwiększyć bezpieczeństwo takich sieci za
pomocą zapór i systemów wykrywania włamań.
.
8.1 Czym jest bezpieczeństwo sieci?
Na początek wróćmy do naszych kochanków, Alicji i Bartka, którzy chcą poro-
zumiewać się „bezpiecznie”. Co to oznacza? Alicja chce, aby jej wiadomość
mógł zrozumieć tylko Bartek, mimo że komunikują się przez niezabezpieczone
medium, w którym intruz (Inga) może przechwycić, odczytać i przeprowadzić
obliczenia na danych przesyłanych od Alicji do Bartka. Ponadto Bartek chce
być pewien, że odebrana wiadomość rzeczywiście została wysłana przez Alicję,
a Alicja — że rzeczywiście porozumiewa się z Bartkiem. Alicja i Bartek chcą
również mieć pewność, że treść ich wiadomości nie została po drodze zmody-
fikowana. Chcą wreszcie gwarancji, że w ogóle będą mogli się porozumieć, tzn.
że nikt nie odmówi im dostępu do zasobów niezbędnych do komunikacji.
Wziąwszy pod uwagę te kwestie, możemy zidentyfikować pożądane właściwości
bezpiecznej komunikacji:
x Poufność. Tylko nadawca i odbiorca powinni móc zrozumieć treść przesła-
nej wiadomości. Ponieważ wiadomość może zostać przechwycona, trzeba
ją zaszyfrować (ukryć dane) w taki sposób, aby ewentualny podsłuchiwacz
nie mógł jej zrozumieć. Ów aspekt poufności jest prawdopodobnie tym,
z czym większości osób kojarzy się termin bezpieczna komunikacja. Kryp-
tograficzne techniki szyfrowania i deszyfrowania danych omówimy w pod-
rozdziale 8.2.
8.1. x CZYM JEST BEZPIECZEŃSTWO SIECI? 771
x Uwierzytelnianie punktów końcowych. Zarówno nadawca, jak i odbiorca
powinni dysponować środkami potwierdzania tożsamości partnera — upew-
niania się, że jest on rzeczywiście tym, za kogo się podaje. Podczas rozmowy
w cztery oczy można łatwo rozwiązać ten problem za pomocą identyfikacji
wzrokowej. Kiedy porozumiewający się partnerzy używają nośnika, który nie
pozwala obejrzeć drugiej osoby, uwierzytelnianie staje się bardziej skom-
plikowane. Dlaczego mielibyśmy na przykład wierzyć, że wiadomość e-mail
z informacją, iż przesłał ją nasz przyjaciel, rzeczywiście pochodzi od tego
przyjaciela?
Integralność wiadomości. Jeśli nawet nadawca i odbiorca zdołają uwierzy-
telnić się nawzajem, będą również chcieli mieć gwarancję, że treść ich komu-
nikacji nie zostanie zmodyfikowana podczas transmisji (przypadkowo lub
celowo). Integralność wiadomości mogą zagwarantować techniki obliczania
sum kontrolnych, z którymi spotkaliśmy się już w niezawodnych protoko-
łach transportowych i łącza danych. Techniki uwierzytelniania punktów
końcowych i zapewniania integralności wiadomości zbadamy w podroz-
dziale 8.3.
x
x Bezpieczeństwo operacyjne. Prawie wszystkie organizacje (firmy, uniwer-
sytety itd.) mają obecnie sieci podłączone do publicznego internetu. Te sieci
potencjalnie mogą zostać zaatakowane poprzez publiczny internet. Napast-
nicy mogą spróbować umieścić robaki na hostach sieciowych, odkryć sekrety
korporacji, odwzorować konfigurację wewnętrznej sieci lub przeprowadzić
atak DoS. W podrozdziale 8.8 pokażemy, że urządzenia zapewniające bez-
pieczeństwo operacyjne, na przykład zapory i systemy wykrywania wła-
mań, służą do przeciwdziałania atakom na sieci firmowe. Zapora działa
między siecią organizacji i siecią publiczną oraz kontroluje przekazywanie
pakietów do sieci i poza nią. System wykrywania włamań przeprowadza
„dogłębną inspekcję pakietów” i alarmuje administratorów sieci o podej-
rzanych działaniach.
Skoro ustaliliśmy już, co będziemy rozumieć przez bezpieczeństwo sieci,
rozważmy teraz, do jakich informacji ma dostęp intruz i jakie może podjąć
działania. Scenariusz ataku przedstawiono na rysunku 8.1. Alicja (nadawca)
chce wysłać dane do Bartka (odbiorcy). Aby bezpiecznie przenieść dane, speł-
niając kryteria poufności, uwierzytelniania i integralności, Alicja i Bartek będą
wymieniać komunikaty kontrolne i komunikaty danych (podobnie jak nadawcy
i odbiorcy TCP wymieniają segmenty kontrolne i segmenty danych). Niektóre
lub wszystkie te komunikaty będą zaszyfrowane. Jak opisaliśmy w podroz-
dziale 1.6, intruz ma następujące możliwości działania:
x podsłuchiwanie — przeglądanie i rejestrowanie zawartości komunikatów
kontrolnych oraz komunikatów danych przesyłanych kanałem;
x modyfikowanie, wstawianie lub usuwanie komunikatów albo ich zawartości.
772 ROZDZIAŁ 8. x BEZPIECZEŃSTWO W SIECIACH KOMPUTEROWYCH
Rysunek 8.1. Nadawca, odbiorca i intruz (Alicja, Bartek i Inga)
Jak się okaże, bez odpowiednich środków zaradczych możliwości te pozwolą
intruzowi na przypuszczenie wielu różnych ataków: podsłuchiwanie komuni-
kacji (i wykradania haseł lub danych), przybieranie tożsamości innej osoby,
przejmowanie bieżącej sesji, blokowanie dostępu do usług poprzez przeciąże-
nie zasobów systemu itd. Podsumowanie zgłoszonych ataków można znaleźć
w CERT Coordination Center [CERT 2009]. Warto też zajrzeć do [Cisco Secu-
rity 2009; Voydock 1983; Bhimani 1996; Skoudis 2006].
Skoro ustaliliśmy już, że w internecie czyhają bardzo realne zagrożenia, zasta-
nówmy się, jakie są internetowe odpowiedniki Alicji i Bartka, naszych przyja-
ciół, którzy chcą się bezpiecznie porozumiewać? Oczywiście, Bartek i Alicja
mogą być użytkownikami dwóch systemów końcowych — prawdziwą Alicją
i prawdziwym Bartkiem, którzy chcą bezpiecznie wymienić pocztę. Mogą
również być uczestnikami elektronicznej transakcji handlowej. Bartek może
być osobą, która chce przesłać do serwera numer swojej karty kredytowej, aby
kupić coś w sklepie internetowym. Podobnie Alicja może być osobą, która chce
połączyć się ze swoim bankiem. Strony komunikacji mogą również być elemen-
tami infrastruktury sieciowej. Wiemy już, że bezpiecznej komunikacji wyma-
gają serwery nazw domenowych (DNS, podrozdział 2.5) i procesy routingu
(podrozdział 4.6). To samo dotyczy aplikacji do zarządzania siecią, które zbadamy
w rozdziale 9. Intruz, który potrafiłby aktywnie zakłócać lub kontrolować wyszu-
kiwania DNS (zagadnienie to omawiamy w podrozdziale 2.5), obliczenia routingu
[Murphy 2003] albo mechanizmy zarządzania siecią [RFC 2574], mógłby naro-
bić ogromnego zamieszania w internecie.
Wyjaśniliśmy ogólne zasady bezpiecznej komunikacji, poznaliśmy kilka
najważniejszych definicji i zbadaliśmy sens zabezpieczania sieci, więc teraz
możemy przejść do kryptografii. Jak się wkrótce Czytelnicy przekonają, kryp-
tografia zapewnia nie tylko poufność, ale również uwierzytelnianie i integral-
ność, a zatem jest kamieniem węgielnym bezpieczeństwa sieci.
8.2. x ZASADY KRYPTOGRAFII 773
.
8.2 Zasady kryptografii
Choć kryptografia ma historię sięgającą czasów Juliusza Cezara, współczesne
techniki kryptograficzne — również te używane w internecie — opierają się na
badaniach prowadzonych w ciągu ostatnich 30 lat. Książki The Codebreakers
[Kahn 1967] oraz The Code Book: The Science of Secrecy from Ancient Egypt to
Quantum Cryptography [Singh 1999] oferują fascynujące spojrzenie na długą
historię kryptografii. Kompletne studium kryptografii zajęłoby całą książkę
[Kaufman 1995, Schneier 1995], więc tutaj zajmiemy się tylko jej najważniejszymi
aspektami, szczególnie tymi, które mają związek z internetem. Nadmieńmy też,
że choć w tym podrozdziale skupimy się na poufności, to techniki kryptogra-
ficzne są również nierozerwalnie splątane z uwierzytelnianiem, integralnością,
niezaprzeczalnością i innymi aspektami bezpieczeństwa.
Techniki kryptograficzne pozwalają nadawcy przekształcić dane tak, aby
intruz nie mógł uzyskać żadnych informacji z przechwyconej wiadomości. Oczy-
wiście, odbiorca musi mieć możliwość odtworzenia oryginalnych danych. Kilka
najważniejszych terminów zilustrowano na rysunku 8.2.
Rysunek 8.2. Komponenty kryptograficzne
Przypuśćmy, że Alicja chce przesłać wiadomość do Bartka. Wiadomość Ali-
cji w pierwotnej postaci (na przykład „Bartku, kocham ciÚ. Alicja”)
określa się mianem tekstu jawnego lub zwykłego tekstu. Alicja szyfruje tekst
jawny za pomocą algorytmu szyfrowania, uzyskując szyfrogram nieczytelny
dla osób postronnych. Co ciekawe, w wielu współczesnych systemach krypto-
graficznych, również tych używanych w internecie, sama technika szyfrowania
jest znana — opublikowana, ustandaryzowana i dostępna dla wszystkich (na
przykład [RFC 1321; RFC 2437; RFC 2420; NIST 2001]), również dla potencjal-
nego intruza! Oczywiście jeśli każdy zna metodę szyfrowania danych, to musi
istnieć jakaś tajna informacja, która zapobiegnie odczytaniu danych przez intruza.
Tą informacją są klucze.
774 ROZDZIAŁ 8. x BEZPIECZEŃSTWO W SIECIACH KOMPUTEROWYCH
Na rysunku 8.2 Alicja dostarcza klucz KA — łańcuch liczb lub znaków — na
wejście algorytmu szyfrowania. Algorytm przyjmuje klucz oraz tekst jawny m
i na ich podstawie tworzy szyfrogram. Notacja KA(m) oznacza szyfrogram tekstu
jawnego m uzyskany za pomocą klucza KA. Z kontekstu wiadomo, jaki algo-
rytm korzysta z tego klucza. Podobnie Bartek przekazuje klucz KB algorytmowi
deszyfrowania, który przyjmuje ten klucz oraz szyfrogram i na ich podstawie
odtwarza tekst jawny; tzn. jeśli Bartek odbierze zaszyfrowaną wiadomość KA(m),
odszyfrowuje ją poprzez obliczenie KB(KA(m)) = m. W systemach z kluczem
symetrycznym klucze Alicji i Bartka są jednakowe i zachowywane w tajemnicy.
W systemach z kluczem publicznym używa się pary kluczy. Jeden z kluczy
jest znany zarówno Bartkowi, jak i Alicji (w rzeczywistości całemu światu). Drugi
klucz jest znany albo Bartkowi, albo Alicji (ale nie obojgu jednocześnie).
W następnych dwóch punktach zbadamy dokładniej systemy z kluczem syme-
trycznym i kluczem publicznym.
8.2.1. Kryptografia z kluczem symetrycznym
Wszystkie algorytmy kryptograficzne polegają na zastępowaniu jednej rzeczy
drugą, na przykład pobieraniu fragmentu tekstu jawnego oraz obliczaniu i pod-
stawianiu odpowiedniego szyfrogramu w celu utworzenia wiadomości zaszy-
frowanej. Zanim przestudiujemy współczesny system kryptograficzny oparty na
kluczach, zbadajmy bardzo stary, bardzo prosty algorytm szyfrowania przypi-
sywany Juliuszowi Cezarowi i zwany szyfrem Cezara (szyfr to metoda szyfro-
wania danych).
Szyfr Cezara działa w następujący sposób: bierzemy każdą literę tekstu jaw-
nego i zastępujemy ją literą znajdującą się o k liter dalej w alfabecie (alfabet jest
„zawinięty”, tzn. po literze „ż” następuje litera „a”). Jeśli na przykład k = 3, litera
„a” w tekście jawnym staje się literą „c” w szyfrogramie; litera „ą” w tekście
jawnym staje się literą „ć” w szyfrogramie itd. Wartość k pełni tu funkcję klucza.
Na przykład tekst jawny „bartku, kocham ciÚ. alicja” jest przekształ-
cany w szyfrogram „dctymz, mrekco elh. cnleïc”. Choć szyfrogram
rzeczywiście wygląda bezsensownie, złamanie kodu byłoby bardzo łatwe, ponie-
waż istnieje tylko 31 możliwych wartości klucza.
Ulepszeniem szyfru Cezara jest szyfr monoalfabetyczny, który również
polega na zamianie liter. Nie używa się jednak regularnego wzorca (na przy-
kład przesunięcia o k liter), ale dowolnych podstawień, z tym zastrzeżeniem,
że każda litera musi mieć unikatowy zamiennik. Na rysunku 8.3 pokazano jedną
z możliwych metod kodowania tekstu jawnego.
Rysunek 8.3. Szyfr monoalfabetyczny
8.2. x ZASADY KRYPTOGRAFII 775
W tym przypadku tekst jawny „bartku, kocham ciÚ. alicja” jest
przekształcany w szyfrogram „cwÊytl, tiĝěwp ĝhb. wñhĝÚa”. Podobnie
jak w przypadku szyfru Cezara szyfrogram wygląda bezsensownie. Wydawa-
łoby się też, że szyfr monoalfabetyczny jest znacznie lepszy od szyfru Cezara,
ponieważ pozwala połączyć litery w pary na 32! sposobów (liczba rzędu 1035),
a nie na skromne 31. Próba złamania kodu i odszyfrowania wiadomości przez
wypróbowanie wszystkich 1035 kombinacji zajęłaby tyle czasu, że jest z góry
skazana na niepowodzenie. Jednakże analiza statystyczna języka, w którym
napisano tekst jawny — na przykład ustalenie, że w typowym polskim tekście
najczęściej występują litery „a” oraz „i” (obie z częstością powyżej 7 ) i że nie-
które dwu- i trzyliterowe sekwencje liter pojawiają się znacznie częściej niż inne
(na przykład „ch”, „ci”, „nie” itp.) — pozwala dość łatwo złamać ten kod. Jeśli
intruz dysponuje jakąś wiedzą o treści wiadomości, ma jeszcze łatwiejsze zada-
nie. Przykładowo, jeśli Inga jest żoną Bartka i podejrzewa, że romansuje on
z Alicją, to może przypuszczać, że w tekście znajdują się słowa „bartek” lub
„alicja”. Gdyby Inga wiedziała na pewno, że te dwa imiona występują w szyfro-
gramie, mogłaby natychmiast ustalić 10 spośród 32 par liter, zmniejszając o 1014
liczbę możliwości do wypróbowania. Gdyby zresztą Inga podejrzewała Bartka
o romans, mogłaby oczekiwać, że znajdzie w wiadomości inne specyficzne słowa.
Kiedy zastanawiamy się, jak łatwo byłoby Indze złamać szyfr używany przez
Bartka i Alicję, możemy wyróżnić trzy scenariusze, w zależności od informacji,
do jakich intruz ma dostęp:
x Atak ze znanym szyfrogramem. W niektórych przypadkach intruz ma dostęp
wyłącznie do szyfrogramu i nie wie nic o zawartości tekstu jawnego. Wyja-
śniliśmy już, że w ataku ze znanym szyfrogramem może pomóc analiza
statystyczna.
x Atak ze znanym tekstem jawnym. Jak już stwierdziliśmy, gdyby Inga wie-
działa, że w szyfrogramie występują słowa „bartek” i „alicja”, mogłaby
ustalić pary (tekst jawny, szyfrogram) dla liter b, a, r, t, e, k, l, i, c oraz j.
Mogłaby również zarejestrować wszystkie przesyłane szyfrogramy, a później
odnaleźć odszyfrowaną wersję któregoś z nich zapisaną przez Bartka na kartce
papieru. Kiedy intruz zna niektóre pary (tekst jawny, szyfrogram), mówimy
o ataku ze znanym tekstem jawnym.
x Atak z wybranym tekstem jawnym. W ataku z wybranym tekstem jawnym
intruz może wybrać dowolny tekst jawny i uzyskać jego szyfrogram. W przy-
padku prostych algorytmów, które omawialiśmy do tej pory, Inga mogłaby
nakłonić Alicję do wysłania wiadomości „PchnÈÊ w tÚ ïódě jeĝa lub
oĂm skrzyñ fig” i całkowicie złamać szyfr. Niebawem pokażemy, że
w bardziej zaawansowanych technikach szyfrowania atak z wybranym tek-
stem jawnym nie zawsze pozwala złamać szyfr.
776 ROZDZIAŁ 8. x BEZPIECZEŃSTWO W SIECIACH KOMPUTEROWYCH
Pięćset lat temu wymyślono techniki szyfrowania polialfabetycznego. Pole-
gają one na użyciu wielu szyfrów monoalfabetycznych, przy czym określony
szyfr monoalfabetyczny służy do kodowania litery o określonym położeniu
w tekście jawnym. Zatem ta sama litera może być kodowana na różne sposoby,
w zależności od pozycji, jaką zajmuje w tekście jawnym. Przykład szyfru polial-
fabetycznego pokazano na rysunku 8.4. Składa się on z dwóch szyfrów Cezara
(o parametrach k = 5 i k = 19). Moglibyśmy zdecydować, że będziemy używać
tych dwóch szyfrów w powtarzającej się sekwencji C1, C2, C2, C1, C2. Pierwsza
litera tekstu jawnego byłaby kodowana za pomocą szyfru C1, druga i trzecia —
za pomocą szyfru C2, czwarta — za pomocą szyfru C1, a piąta — za pomocą
szyfru C2. Następnie wzór powtarzałby się — szósta litera byłaby kodowana za
pomocą szyfru C1, siódma — za pomocą szyfru C2 itd. Tekst jawny „bartku,
kocham ciÚ. alicja” zostałby zatem zaszyfrowany do postaci „Úogěak,
aefzdc rmu. dÈěfnd”. Zauważmy, że pierwsza litera „a” tekstu jawnego jest
zakodowana za pomocą szyfru C1, a druga litera „a” — za pomocą C2. W tym
przykładzie „kluczem” szyfrowania i deszyfrowania jest znajomość dwóch kluczy
Cezara (k = 5, k = 19) oraz wzoru C1, C2, C2, C1, C2.
Rysunek 8.4. Szyfr polialfabetyczny złożony z dwóch szyfrów Cezara
Szyfry blokowe
Przejdźmy teraz do współczesności i zbadajmy, jak obecnie wygląda szyfro-
wanie z kluczem symetrycznym. Istnieją dwie ogólne klasy technik szyfrowa-
nia z kluczem symetrycznym — szyfry strumieniowe i szyfry blokowe. Szyfry
strumieniowe opisujemy pokrótce w podrozdziale 8.7, gdzie badamy zabezpie-
czenia bezprzewodowych sieci lokalnych. W tym miejscu skoncentrujemy się
na szyfrach blokowych, które są stosowane w wielu bezpiecznych protokołach
internetowych, w tym w PGP (do zabezpieczenia poczty elektronicznej), SSL (do
zabezpieczania połączeń TCP) i IPsec (do zabezpieczania transportu w war-
stwie sieci).
W szyfrach blokowych szyfrowany komunikat jest przetwarzany w blokach
po k bitów. Na przykład jeśli k = 64, komunikat jest dzielony na 64-bitowe
bloki, a każdy z nich jest szyfrowany niezależnie. Aby zakodować blok, algorytm
szyfrujący stosuje odwzorowanie jeden do jednego i przekształca k-bitowy
blok tekstu jawnego na k-bitowe bloki szyfrogramu. Przyjrzyjmy się przykładowi.
Załóżmy, że k = 3, więc szyfr blokowy odwzorowuje 3-bitowe dane wejściowe
(tekst jawny) na 3-bitowe dane wyjściowe (szyfrogram). Jedno z możliwych
odwzorowań przedstawia tabela 8.1. Warto zauważyć, że jest to odwzorowanie
jeden do jednego. Oznacza to, że dla każdych danych wejściowych tworzone
8.2. x ZASADY KRYPTOGRAFII 777
Wejście
Wyjście
Wejście
Wyjście
000
001
010
011
110
111
101
100
100
101
110
111
Tabela 8.1. Określony 3-bitowy szyfr blokowy
011
010
000
001
są inne dane wyjściowe. Ten szyfr blokowy dzieli komunikat na 3-bitowe bloki
i szyfruje każdy z nich na podstawie powyższego odwzorowania. Czytelnik powi-
nien sprawdzić, że komunikat 010110001111 zostanie zaszyfrowany do postaci
101000111001.
Kontynuujmy przykład z 3-bitowymi blokami. Zauważmy, że odwzorowanie
z tabeli 8.1 to tylko jedno z wielu możliwych rozwiązań. Ile różnych odwzo-
rowań istnieje? Aby odpowiedzieć na to pytanie, warto zauważyć, że odwzo-
rowanie jest niczym więcej jak permutacją wszystkich możliwych danych wej-
ściowych. Tych danych jest 23, czyli 8 (są one wymienione w kolumnie danych
wejściowych). Dla tych ośmiu możliwości istnieje 8! = 40 320 różnych permutacji.
Ponieważ każda z nich określa odwzorowanie, tych ostatnich też jest 40 320.
Każde odwzorowanie można traktować jako klucz. Jeśli Alicja i Bartek znają
odwzorowanie (klucz), mogą szyfrować i odszyfrowywać przesyłane komunikaty.
Atak typu brute force na ten szyfr polega na próbie odszyfrowania szyfro-
gramu za pomocą każdego odwzorowania. Przy tylko 40 320 odwzorowaniach
(dla k = 3) można to szybko zrobić na komputerze PC. Aby zapobiec atakom
brute force, w szyfrach blokowych zwykle stosuje się dużo większe bloki —
z k = 64 lub nawet więcej. Zauważmy, że liczba możliwych odwzorowań dla
ogólnego szyfru o bloku o wielkości k wynosi 2k!, co daje bardzo dużą wartość
nawet dla umiarkowanych wartości k (na przykład k = 64).
Choć szyfry blokowe z kompletną tabelą, takie jak opisany wcześniej, już przy
niewielkich wartościach k pozwalają opracować solidne systemy szyfrowania
z kluczem symetrycznym, są niestety trudne w stosowaniu. Dla k = 64 i okre-
ślonego odwzorowania Alicja i Bartek muszą przechowywać tabelę o 264 war-
tościach wejściowych. Jest to niewykonalne zadanie. Ponadto gdyby Alicja
i Bartek mieli wymieniać klucze, musieliby odtwarzać tę tabelę. Dlatego szyfry
blokowe z kompletną tabelą, określające wstępnie ustalone odwzorowanie mię-
dzy wszystkimi wartościami wejściowymi i wyjściowymi (jak we wcześniejszym
przykładzie), są nieakceptowalne.
Zamiast tego w szyfrach blokowych zwykle wykorzystywane są funkcje
symulujące tabele utworzone w wyniku losowej permutacji. Przykład (zaadap-
towany z [Kaufman 1995]) takiej funkcji dla k = 64 bity przedstawia rysunek 8.5.
778 ROZDZIAŁ 8. x BEZPIECZEŃSTWO W SIECIACH KOMPUTEROWYCH
Rysunek 8.5. Przykładowy szyfr blokowy
Ta funkcja najpierw dzieli 64-bitowy blok na osiem 8-bitowych fragmentów.
Każdy z tych fragmentów jest przetwarzany za pomocą możliwej do obsłużenia
tabeli o wielkości osiem na osiem bitów. Na przykład do przetwarzania pierw-
szego fragmentu służy tabela T1. Następnie osiem wyjściowych fragmentów jest
łączonych w 64-bitowy blok. System zamienia wtedy pozycje 64 bitów w tym
bloku, aby wygenerować 64-bitowe dane wyjściowe. Są one ponownie stosowane
jako 64-bitowe dane wejściowe, co zaczyna następny cykl. Po n takich cyklach
funkcja zwraca 64-bitowy blok szyfrogramu. Celem stosowania rund jest spra-
wienie, aby każdy bit wejściowy oddziaływał na większość (jeśli nie wszystkie)
z ostatecznie uzyskanych bitów wyjściowych. Gdyby uruchomiono tylko jedną
rundę, bit wejściowy wpływałby na tylko osiem z 64 bitów wyjściowych. Klu-
czem w takim algorytmie szyfrowania blokowego jest osiem tabel permutacji
(zakładamy, że funkcja mieszająca bity jest powszechnie znana).
Obecnie istnieje wiele popularnych szyfrów blokowych, w tym DES (ang.
Data Encryption Standard), 3DES i AES (ang. Advanced Encryption Standard).
Każdy z tych standardów wykorzystuje funkcje zamiast wstępnie przygotowa-
nych tabel, jak przedstawia to rysunek 8.5 (choć poszczególne szyfry są bardziej
skomplikowane). Każdy z algorytmów używa też łańcucha bitów jako klucza.
Na przykład DES wykorzystuje 64-bitowe bloki z 56-bitowym kluczem. AES
używa 128-bitowych bloków i może działać z kluczami o długości 128, 192
i 256 bitów. Klucz algorytmu określa konkretne odwzorowania i permutacje
w postaci „minitabeli”. Atak brute force na każdy z tych szyfrów polega na
cyklicznym sprawdzaniu wszystkich kluczy i stosowaniu ich w algorytmie deszy-
frującym. Zauważmy, że przy kluczu o długości n istnieje 2n możliwych kluczy.
W instytucie NIST [NIST 2001] oszacowano, że maszynie, która potrafi złamać
8.2. x ZASADY KRYPTOGRAFII 779
56-bitowy szyfr DES w jedną sekundę (czyli zdoła wypróbować w tym czasie
każdy z 256 kluczy), złamanie 128-bitowego klucza AES zajęłoby około 149 try-
lionów lat.
Wiązanie bloków
W aplikacjach sieciowych zwykle trzeba szyfrować długie komunikaty (lub długie
strumienie danych). Jeśli zastosujemy szyfr blokowy przez prosty podział wia-
domości na k-bitowe bloki i niezależne zaszyfrowanie każdego z nich, wystąpi
subtelny, ale istotny problem. Aby go dostrzec, należy zauważyć, że bloki z tek-
stem jawnym mogą być identyczne. Na przykład tekst jawny w kilku blokach
może brzmieć „HTTP/1.1”. Dla takich identycznych bloków szyfr blokowy
utworzy oczywiście takie same szyfrogramy. Napastnik może odgadnąć tekst
jawny, jeśli zauważy identyczne bloki w szyfrogramie. Może nawet zdołać odszy-
frować całą wiadomość przez zidentyfikowanie takich samych bloków i wyko-
rzystanie wiedzy na temat struktury zastosowanego protokołu [Kaufman 1995].
Aby rozwiązać ten problem, należy wprowadzić w proces losowość, aby
identyczne bloki tekstu jawnego prowadziły do utworzenia odmiennych szy-
frogramów. W celu wyjaśnienia tego pomysłu przyjmijmy, że m(i) oznacza i-ty
blok tekstu jawnego, c(i) to i-ty blok szyfrogramu, a a b oznacza operację
XOR na dwóch łańcuchach bitów (a i b). Przypomnijmy, że 0 0 = 1 1 = 0
i 0 1 = 1 0 = 1, a suma XOR dwóch łańcuchów bitów jest obliczana bit po
bicie, na przykład 10101010 11110000 = 01011010. Ponadto oznaczmy algo-
rytm szyfru blokowego z kluczem S jako KS. Podstawowa reguła wygląda tak —
nadawca tworzy losową k-bitową liczbę r(i) dla i-tego bloku i oblicza c(i) =
KS(m(i) r(i)). Zauważmy, że dla każdego bloku wybierana jest nowa k-bitowa
liczba. Następnie nadawca wysyła wartości c(1), r(1), c(2), r(2), c(3), r(3) itd.
Ponieważ odbiorca otrzymuje c(i) i r(i), może odtworzyć każdy blok tekstu
jawnego przez obliczenia m(i) = KS(m(i)) r(i). Należy zauważyć, że choć
wartość r(i) jest przesyłana jako tekst jawny i może zostać zarejestrowana przez
Ingę, nie zdoła ona uzyskać tekstu jawnego m(i), ponieważ nie zna klucza KS.
Ponadto nawet jeśli dwa bloki tekstu jawnego m(i) i m(j) są identyczne, odpo-
wiadające im bloki szyfrogramu c(i) i c(j) różnią się od siebie (o ile liczby losowe
r(i) i r(j) są inne, co jest wysoce prawdopodobne).
Rozważmy na przykład 3-bitowy szyfr blokowy z tabeli 8.1. Załóżmy, że tekst
jawny to 010010010. Jeśli Alicja zaszyfruje go bezpośrednio (bez wprowadzania
losowości), wynikowy szyfrogram będzie miał wartość 101101101. Jeżeli Inga
zarejestruje ten szyfrogram, to ze względu na to, że trzy bloki szyfrogramu są
identyczne, będzie mogła słusznie przyjąć, że każdy z trzech bloków tekstu jaw-
nego jest taki sam. Teraz załóżmy, że Alicja wygeneruje losowe bloki r(1) = 001,
r(2) = 111 i r(3) = 100 oraz zastosuje opisaną wcześniej technikę do utwo-
rzenia szyfrogramu c(1) = 100, c(2) = 010 i c(3) = 000. Zauważmy, że trzy bloki
780 ROZDZIAŁ 8. x BEZPIECZEŃSTWO W SIECIACH KOMPUTEROWYCH
szyfrogramu różnią się od siebie, choć bloki tekstu jawnego są takie same. Alicja
wyśle wtedy dane c(1), r(1), c(2) i r(2). Czytelnik powinien sprawdzić, że Bartek
zdoła uzyskać pierwotny tekst jawny za pomocą wspólnego klucza KS.
Uważni Czytelnicy zauważą, że wprowadzenie losowości rozwiązuje jeden
problem, ale wprowadza inny. Alicja musi teraz przesyłać dwa razy więcej bi-
tów. Dla każdego bitu szyfrogramu musi wysłać także bit losowy, co podwaja
potrzebną przepustowość. Aby można było „zjeść ciastko i mieć ciastko”,
w szyfrach blokowych zwykle stosuje się technikę wiązania bloków (ang. Cipher
Block Chaining — CBC). Podstawowa zasada jej działania polega na wysyłaniu
tylko jednej losowej wartości z pierwszym komunikatem, po czym nadawca
i odbiorca mogą wykorzystać obliczone zakodowane bloki zamiast kolejnych liczb
losowych. Opiszmy dokładniej funkcjonowanie techniki wiązania bloków:
1. Przed zaszyfrowaniem komunikatu (lub strumienia danych) nadawca
generuje losowy k-bitowy łańcuch nazywany wektorem inicjującym
(ang. Initialization Vector — IV). Oznaczmy ten wektor przez c(0). Nadawca
wysyła do odbiorcy wektor IV jako tekst jawny.
2. Dla pierwszego bloku nadawca oblicza wartość m(1) c(0), czyli sumę XOR
pierwszego bloku tekstu jawnego i wektora IV. Następnie przekazuje wynik
do algorytmu szyfru blokowego, aby uzyskać odpowiedni blok szyfrogramu
(c(1) = KS(m(1) c(0)). Nadawca wysyła zaszyfrowany blok c(1) do odbiorcy.
3. Dla i-tego bloku nadawca generuje i-ty blok szyfrogramu c(i) = KS(m(i)
c(i – 1)).
Zbadajmy teraz skutki zastosowania tego podejścia. Po pierwsze, odbiorca
nadal może odtworzyć pierwotną wiadomość. Kiedy otrzyma szyfrogram c(i),
odszyfruje go za pomocą klucza KS, aby uzyskać s(i) = m(i) c(i – 1). Ponieważ
odbiorca zna również wartość c(i – 1), może otrzymać blok tekstu jawnego na
podstawie obliczeń m(i) = s(i) c(i – 1). Po drugie, nawet jeśli dwa bloki tekstu
jawnego są identyczne, odpowiadające im szyfrogramy prawie zawsze będą
różne. Po trzecie, choć nadawca wysyła wektor IV jako tekst jawny, intruz nie
będzie mógł odszyfrować bloków szyfrogramu, ponieważ nie zna tajnego
klucza S. Wreszcie nadawca wysyła tylko jeden dodatkowy blok (wektor IV),
dlatego dla długich komunikatów, składających się z setek bloków, wzrost
potrzebnej przepustowości jest pomijalny.
W ramach przykładu obliczmy na podstawie 3-bitowego szyfru blokowego
z tabeli 8.1 szyfrogram dla tekstu jawnego 010010001 i wektora IV = c(0) = 001.
Nadawca najpierw używa wektora IV do obliczenia c(1) = KS(m(1) c(0)) = 100,
a następnie oblicza c(2) = KS(m(2) c(1)) = KS(010 100) = 000 i c(3) =
KS(m(3) c(2)) = KS(010 000) = 101. Czytelnik powinien sprawdzić, że
odbiorca — znając wartość wektora IV i klucz KS — zdoła odtworzyć pierwotny
tekst jawny.
8.2. x ZASADY KRYPTOGRAFII 781
Wiązanie bloków ma poważny wpływ na projektowanie bezpiecznych pro-
tokołów sieciowych. Trzeba w nich udostępnić mechanizm do przekazywania
wektora IV od nadawcy do odbiorcy. W dalszej części rozdziału pokażemy, jak
odbywa się to w kilku protokołach.
8.2.2. Szyfrowanie z kluczem publicznym
Przez ponad 2000 lat (od wynalezienia szyfru Cezara do lat 70. XX wieku) zaszy-
frowana komunikacja wymagała, aby obie jej strony znały wspólny sekret —
symetryczny klucz używany do szyfrowania i deszyfrowania. Problem w tym,
że obie strony muszą jakoś uzgodnić wspólny klucz, co jednak wymaga (za-
pewne bezpiecznej) komunikacji! Strony mogłyby najpierw spotkać się osobi-
ście i uzgodnić klucz (na przykład dwóch centurionów Cezara mogłoby spotkać
się w rzymskiej łaźni), a potem porozumiewać się przy użyciu szyfru. Jednak
w połączonym siecią świecie często zdarza się, że strony nigdy się nie spoty-
kają i porozumiewają się wyłącznie przez sieć. Czy strony mogą się bezpiecznie
komunikować bez tajnego, uprzednio uzgodnionego klucza? W 1976 roku
Diffie i Hellman [Diffie 1976] zademonstrowali algorytm (obecnie znany jako
wymiana kluczy Diffiego-Hellmana) opracowany właśnie w tym celu — rady-
kalnie odmienną i niezwykle elegancką metodę bezpiecznej komunikacji, która
doprowadziła do powstania współczesnych systemów kryptograficznych z klu-
czem publicznym. Systemy kryptograficzne z kluczem publicznym mają kilka
innych zdumiewających cech, które sprawiają, że nadają się one nie tylko do
szyfrowania, ale także do uwierzytelniania i podpisów cyfrowych. Co ciekawe,
niedawno wyszło na jaw, że idee podobne do opisanych w [Diffie 1976] i [RSA
1978] zostały również przedstawione w serii tajnych raportów badaczy z Com-
munications-Electronics Security Group w Wielkiej Brytanii [Ellis 1987]. Jak
to często bywa, doskonałe pomysły pojawiają się niezależnie w wielu miejscach;
na szczęście postępy w tej dziedzinie nie pozostały w ukryciu, lecz stały się
własnością publiczną.
Koncepcja szyfrowania z kluczem publicznym jest bardzo prosta. Przypu-
śćmy, że Alicja chce porozumieć się z Bartkiem. Jak pokazano na rysunku 8.6, nie
współdzielą oni jednego tajnego klucza (jak w systemach z kluczem symetrycz-
nym). Bartek (odbiorca wiadomości Alicji) ma dwa klucze — klucz publiczny
dostępny dla każdego (łącznie z Ingą, intruzem) oraz klucz prywatny znany
tylko Bartkowi. Publiczny i prywatny klucz Bartka będziemy oznaczać symbo-
BK . Aby porozumieć się z Bartkiem, Alicja naj-
lami (odpowiednio)
pierw zdobywa jego klucz publiczny, po czym szyfruje swoją wiadomość
m przy użyciu tego klucza oraz znanego (na przykład ustandaryzowanego) al-
. Bartek odbiera
gorytmu szyfrowania; oznacza to, że Alicja oblicza
wiadomość Alicji i używa znanego (na przykład ustandaryzowanego) algoryt-
mu deszyfrowania, aby odtworzyć oryginalną wiadomość. Oznacza to, że
(mK B
BK i
)
782 ROZDZIAŁ 8. x BEZPIECZEŃSTWO W SIECIACH KOMPUTEROWYCH
Rysunek 8.6. Kryptografia z kluczem publicznym
B
B
B
)
B
))
m
B
))
))
m
.
B
(
B
(
B
(
B
(
B
(
mKK
(
(
))
, tzn. zastosowanie publicznego klucza Bartka
Bartek oblicza
. Istnieją jednak takie algorytmy szyfrowania-
-deszyfrowania oraz metody wyboru klucza prywatnego i publicznego, że
BK do wia-
mKK
domości m (w celu uzyskania
), a następnie zastosowanie prywatnego
))
)
klucza Bartka
daje z powrotem m. Jest to godne uwagi osiągnięcie! W ten sposób Alicja może
użyć publicznie dostępnego klucza Bartka, aby wysłać do niego tajną wiado-
mość, a żadne z nich nie musi przekazywać drugiemu tajnego klucza! Nieba-
wem przekonamy się, że możemy zamienić klucz prywatny z publicznym i osią-
gnąć ten sam zdumiewający wynik, tzn.
BK do zaszyfrowanej wersji m (tzn. obliczenie
mKK
(
mKK
mKK
(
(
(mK B
Zasady kryptografii z kluczem publicznym są więc nieskomplikowane. Od
razu przychodzą jednak na myśl dwa problemy. Po pierwsze, intruz, który prze-
chwyci wiadomość Alicji, znajdzie w niej tylko „śmieci”, ale zna zarówno klucz
(publiczny klucz Bartka, dostępny dla każdego), jak i algorytm używany przez
Alicję. Intruz może więc przeprowadzić atak z wybranym tekstem jawnym,
korzystając ze standardowego algorytmu szyfrowania i publicznego klucza Bartka
w celu zaszyfrowania dowolnej wiadomości! Intruz może na przykład szyfrować
wiadomości (albo fragmenty) wiadomości, które — jak podejrzewa — Alicja
mogłaby przesyłać Bartkowi. Jak widać, jeśli kryptografia z kluczem publicz-
nym ma działać, dobór kluczy oraz szyfrowanie i deszyfrowanie muszą odbywać
się w taki sposób, aby ustalenie prywatnego klucza Bartka albo odszyfrowanie
wiadomości Alicji było niemożliwe (albo tak trudne, że praktycznie niemoż-
liwe). Po drugie, ponieważ klucz Bartka jest publiczny, każdy może wysłać do
niego wiadomość, podając się za Alicję. W algorytmach z pojedynczym wspól-
nym kluczem fakt, że nadawca zna tajny klucz, jednoznacznie identyfikuje go
przed odbiorcą. W przypadku kryptografii z kluczem publicznym jest inaczej,
ponieważ każdy może wysłać wiadomość do Bartka, korzystając z jego publicz-
nie dostępnego klucza. Aby powiązać nadawcę z wiadomością, potrzebny jest
podpis cyfrowy; zagadnieniem tym zajmiemy się w podrozdziale 8.3.
8.2. x ZASADY KRYPTOGRAFII 783
RSA
Choć można opracować wiele algorytmów i kluczy, które rozwiązywałyby te
problemy, synonimem kryptografii z kluczem publicznym stał się algorytm
RSA (skrót pochodzi od nazwisk jego twórców, Rona Rivesta, Adiego Shamira
i Leonarda Adlemana). Zobaczmy najpierw, jak działa RSA, a następnie zasta-
nówmy się, dlaczego działa.
Algorytm RSA wykonuje wiele operacji arytmetycznych z wykorzystaniem
arytmetyki modulo-n. Opiszmy pokrótce arytmetykę modularną. Przypomnijmy,
że x mod n oznacza po prostu resztę z dzielenia x przez n. Na przykład 19 mod
5 = 4. W arytmetyce modularnej wykonywane są normalne działania doda-
wania, mnożenia i potęgowania. Jednak wynik każdej operacji jest zastępowany
przez całkowitoliczbową resztę z dzielenie go przez n. Dodawanie i mnożenie
w arytmetyce modularnej ułatwiają poniższe wygodne zależności:
[(a mod n)+(b mod n)] mod n = (a+b) mod n
[(a mod n)–(b mod n)] mod n = (a–b) mod n
[(a mod n)·(b mod n)] mod n = (a·b) mod n
Z trzeciej zależności wynika, że (a mod n)d mod n = ad mod n. Ta tożsamość
wkrótce okaże się bardzo przydatna.
Przypuśćmy, że Alicja chce wysłać do Bartka komunikat zaszyfrowany algo-
rytmem RSA, co ilustruje rysunek 8.6. Przy analizie tego algorytmu zawsze warto
pamiętać o tym, że wiadomość to nic więcej jak wzorzec bitów, a każdy wzorzec
ma niepowtarzalną reprezentację w postaci liczby całkowitej (i długości wzorca).
Załóżmy na przykład, że komunikat to wzorzec bitów 1001. Można go przed-
stawić jako dziesiętną liczbę całkowitą 9. Dlatego szyfrowanie wiadomości za
pomocą algorytmu RSA odpowiada szyfrowaniu niepowtarzalnych liczb całko-
witych reprezentujących komunikat.
RSA ma dwa powiązane ze sobą aspekty:
x wybór klucza publicznego i klucza prywatnego;
x algorytm szyfrowania i deszyfrowania.
Aby wybrać klucz publiczny i prywatny, Bartek musi wykonać następujące
czynności:
1. Wybrać dwie duże liczby pierwsze p i q. Jak duże powinny być te liczby?
Im są większe, tym trudniej złamać RSA, ale tym dłużej trwa kodowanie
i dekodowanie. Firma RSA Laboratories zaleca, aby iloczyn p i q miał długość
rzędu 1024 bitów. Sposoby znajdowania dużych liczb pierwszych można
znaleźć w [Caldwell 2007].
2. Obliczyć n = pq oraz z = (p–1)(q–1).
784 ROZDZIAŁ 8. x BEZPIECZEŃSTWO W SIECIACH KOMPUTEROWYCH
3. Wybrać liczbę e mniejszą niż n, która nie ma wspólnych dzielników (poza
jedynką) z liczbą z (w takim przypadku mówi się, że liczby e i z są względnie
pierwsze). Użyto litery e, ponieważ wartość ta będzie służyć do szyfrowania
(ang. encryption).
4. Znaleźć liczbę d taką, że ed–1 dzieli się bez reszty przez z. Użyto litery d,
ponieważ wartość ta będzie służyć do deszyfrowania. Innymi słowy,
dysponując wartością e, wybieramy liczbę d taką, aby:
ed mod z = 1
5. Klucz publiczny
BK , który Bartek udostępnia całemu światu, jest parą liczb
(n, e); klucz prywatny
BK jest parą liczb (n, d).
Alicja szyfruje, a Bartek odszyfrowuje wiadomość w następujący sposób:
x Przypuśćmy, że Alicja chce wysłać Bartkowi wzorzec bitowy reprezentowany
przez liczbę całkowitą m taką, że m n. Aby ją zakodować, Alicja oblicza me,
a następnie oblicza resztę z dzielenia me przez n. Zatem zaszyfrowana war-
tość c tekstu jawnego m wysyłana przez Alicję to:
c = me mod n
Wzorzec bitowy odpowiadający szyfrogramowi (c) jest wysyłany do Bartka.
x Aby odszyfrować odebrany szyfrogram c, Bartek oblicza:
m = cd mod n
co wymaga użycia jego klucza prywatnego (n, d).
Rozważmy prosty przykład użycia RSA. Przypuśćmy, że Bartek wybiera
p = 5 i q = 7 (oczywiście liczby te są zbyt małe, aby były bezpieczne). W takim
przypadku n = 35, a z = 24. Bartek wybiera e = 5, ponieważ 5 i 24 nie mają
wspólnych dzielników. Wreszcie Bartek wybiera d = 29, ponieważ 5·29–1 (tzn.
ed–1) dzieli się bez reszty przez 24. Bartek upublicznia te dwie wartości (n = 35
i e = 5), ale nie ujawnia wartości d = 29. Znając dwie publiczne wartości, Alicja
chce wysłać do Bartka litery „l”, „o”, „v” i „e”. Interpretując każdą z nich jako
wartość z zakresu 1 – 26 („a” to 1, „z” to 26), Alicja i Bartek szyfrują i deszy-
frują wiadomość w sposób przedstawiony w tabelach 8.2 i 8.3. Zauważmy, że
w tym przykładzie każda z czterech liter jest traktowana jak odrębny komunikat.
Bardziej realistyczne rozwiązanie wymaga przekształcenia liter na ich 8-bitowe
reprezentacje w formacie ASCII i zaszyfrowanie liczby całkowitej odpowiadającej
uzyskanemu 32-bitowemu wzorcowi. Jednak taki realistyczny przykład prowa-
dzi do uzyskania liczb, które są zdecydowanie zbyt długie, aby można umieścić
je w podręczniku!
8.2. x ZASADY KRYPTOGRAFII 785
Litera tekstu jawnego m: reprezentacja liczbowa
me
szyfrogram c = me mod n
l
o
v
e
12
15
22
5
238832
759375
5153632
3125
17
15
22
10
Tabela 8.2. Szyfrowanie RSA Alicji, e = 5, n = 35
Szyfrogram c c
cd
m = cd mod n
Litera tekstu jawnego
17
15
22
10
481968572106750915091411825223071697
12783403948858939111232757568359375
851643319086537701956194499721106030592
100000000000000000000000000000
12
15
22
5
l
o
v
e
Tabela 8.3. Deszyfrowanie RSA Bartka, d = 29, n = 35
Zważywszy, że już „dziecinny” przykład z tabel 8.2 i 8.3 doprowadził do
powstania bardzo dużych liczb, a wcześniej dowiedzieliśmy się, że wartości
p i q powinny liczyć kilkaset bitów, trzeba zastanowić się nad praktycznymi
aspektami RSA. Jak wybiera się duże liczby pierwsze? Jak następnie wybiera się
e i d? Jak wykonuje się potęgowanie, kiedy wykładnikami są duże liczby? Omó-
wienie tych ważnych kwestii wykracza poza ramy niniejszej książki; szczegóły
można znaleźć w [Kaufman 1995] oraz wymienionych tam źródłach.
Klucze sesji
Warto wiedzieć, że potęgowanie wymagane przez RSA jest dość czasochłonne.
Algorytm DES jest przynajmniej 100 razy szybszy w implementacji progra-
mowej i od 1000 do 10 000 razy szybszy w implementacji sprzętowej [RSA Fast
2007]. W rezultacie algorytmu RSA często używa się w połączeniu szyframi
z kluczem symetrycznym. Jeśli na przykład Alicja chce szybko przesłać Bart-
kowi dużą ilość zaszyfrowanych danych, robi to w następujący sposób: najpierw
wybiera klucz, który posłuży do szyfrowania danych; czasem określa się go
mianem klucza sesji, KS. Alicja musi przekazać Bartkowi klucz sesji, ponieważ
jest to wspólny klucz symetryczny używany przez szyfr z takim kluczem (na
przykład DES lub AES). Zatem Alicja szyfruje klucz sesji publicznym kluczem
RSA Bartka, tzn. oblicza c = (KS)e mod n. Bartek otrzymuje zaszyfrowany
za pomocą RSA klucz sesji c i odszyfrowuje go, aby uzyskać klucz sesji KS. Teraz
Bartek zna klucz sesji, którego Alicja będzie używać do transferu danych zaszy-
frowanych za pomocą DES.
786 ROZDZIAŁ 8. x BEZPIECZEŃSTWO W SIECIACH KOMPUTEROWYCH
Dlaczego RSA działa?
Szyfrowanie i deszyfrowanie RSA wydaje się niemal magiczne. Dlaczego zasto-
sowanie opisanych wyżej algorytmów pozwala odtworzyć oryginalną wiado-
mość? Aby zrozumieć, jak działa RSA, przyjmiemy n = pq, gdzie p i q są dużymi
liczbami pierwszymi używanymi w algorytmie RSA.
Przypomnijmy, że w szyfrowaniu RSA wiadomość m (reprezentowana przez
liczbę całkowitą) jest najpierw podnoszona do potęgi e z wykorzystaniem aryt-
metyki modulo n:
c = me mod n
Deszyfrowanie polega na podniesieniu tej wartości do potęgi d, znów z wyko-
rzystaniem arytmetyki modulo n. Wynik szyfrowania, po którym następuje
operacja deszyfrowania, można zatem zapisać jako (me mod n)d mod n. Zobaczmy,
co możemy powiedzieć o tej wartości. Jak wcześniej wspomnieliśmy, jedną
z ważnych cech arytmetyki modularnej jest, że (a mod n)d mod n = ad mod n
dla dowolnych wartości a, n i d. Dlatego, wykorzystując zależność a = me z tej
właściwości, otrzymujemy:
(me mod n)d mod n = med mod n
Pozostaje więc wykazać, że med mod n = m. Choć próbujemy wyeliminować
magię z algorytmu RSA, będziemy musieli teraz posłużyć się dość magicznym
twierdzeniem z teorii liczb. Mówiąc ściślej, udowodniono, że jeśli p i q są licz-
bami pierwszymi, a n = pq i z = (p – 1)(q – 1), to xy mod n jest równe x(y mod z)
mod n [Kaufman 1995]. Stosując to twierdzenie dla x = m i y = ed:
med mod n = m(ed mod z) mod n
Jak jednak wiemy, wybraliśmy takie wartości e i d, że ed mod z = 1. Otrzymu-
jemy więc:
med mod n = m1 mod n = m
Właśnie takiego wyniku oczekiwaliśmy! Najpierw podnosząc wartość do potęgi
e (tzn. szyfrując), a następnie podnosząc ją do potęgi d (tzn. deszyfrując), otrzy-
maliśmy pierwotną wartość m. Jeszcze bardziej zdumiewające jest to, że naj-
pierw podnosząc wartość do potęgi d, a później do potęgi e — tzn. odwracając
kolejność szyfrowania i deszyfrowania — również uzyskujemy pierwotną war-
tość m! Te wspaniałe zależności wynikają bezpośrednio z arytmetyki modularnej:
(md mod n)e mod n = mde mod n = med mod n = (me mod n)d mod n
Bezpieczeństwo RSA wynika z tego, że nie są znane żadne szybkie algo-
rytmy dzielenia liczby — w tym przypadku publicznej wartości n — na czynniki
8.3. x INTEGRALNOŚĆ KOMUNIKATÓW I UWIERZYTELNIANIE PUNKTÓW KOŃCOWYCH 787
pierwsze p i q. Gdybyśmy potrafili ustalić wartości p i q, to znając publiczną
wartość e, moglibyśmy łatwo obliczyć tajny klucz d. Z drugiej strony, nie wia-
domo, czy nie istnieje jakiś szybki algorytm dzielenia liczb na czynniki pierwsze,
więc w tym sensie bezpieczeństwo RSA nie jest gwarantowane.
Innym popularnym algorytmem szyfrowania z kluczem publicznym jest
algorytm Diffiego-Hellmana, który pokrótce zbadamy w jednym z problemów
w końcowej części rozdziału. Algorytm ten nie jest równie wszechstronny jak
RSA, ponieważ nie można go stosować do szyfrowania wiadomości o dowolnej
długości. Można go jednak wykorzystać do utworzenia symetrycznego klucza
sesji, który z kolei posłuży do szyfrowania komunikatów.
8.3 Integralność komunikatów
.
i uwierzytelnianie punktów końcowych
W poprzednim podrozdziale Czytelnicy zobaczyli, jak zastosować szyfrowanie
do zapewniania poufności komunikacji między dwoma jednostkami. W tym
miejscu skoncentrujemy się na równie ważnym aspekcie kryptografii — gwa-
rantowaniu integralności komunikatów (jest to tak zwane uwierzytelnianie
wiadomości). Obok integralności komunikatów w tym podrozdziale omówimy
dwa powiązane zagadnienia — podpisy cyfrowe i uwierzytelnianie punktów
końcowych.
Do zdefiniowania problemu zachowania integralności komunikatów ponow-
nie posłużmy się postaciami Alicji i Bartka. Załóżmy, że Bartek otrzymał wia-
domość (zaszyfrowaną lub w formie tekstu jawnego) i wierzy, iż jej nadawcą
jest Alicja. Aby uwierzytelnić komunikat, Bartek musi zweryfikować, że:
x wiadomość rzeczywiście została wysłana przez Alicję;
x wiadomość nie została zmodyfikowana po drodze do Bartka.
W podrozdziałach od 8.4 do 8.7 pokażemy, że problem integralności komuni-
katów jest kluczowy w niemal wszystkich bezpiecznych protokołach sieciowych.
Jako konkretny przykład rozważmy sieć komputerową, w której algorytm
routingu stanu łącza (na przykład OSPF) określa trasy między wszystkimi parami
routerów w sieci (zobacz rozdział 4.). W algorytmach stanu łącza każdy router
musi rozsyłać komunikaty o stanie łącza do wszystkich pozostałych routerów
w sieci. Taki komunikat obejmuje listę wszystkich bezpośrednich sąsiadów routera
i kosztów bezpośredniej komunikacji z nimi. Kiedy router otrzyma komunikaty
o stanie łącza od wszystkich pozostałych routerów, może utworzyć kompletną
mapę sieci, uruchomić algorytm routingu określający ścieżkę o najmniej-
szym koszcie i skonfigurować tabelę przekazywania. Inga może przeprowa-
dzić stosunkowo łatwy atak na algorytm routingu przez dystrybucję fałszywych
788 ROZDZIAŁ 8. x BEZPIECZEŃSTWO W SIECIACH KOMPUTEROWYCH
komunikatów z nieprawidłowymi informacjami o stanie łącza. Stąd wynika
konieczność zachowania integralności komunikatów. Kiedy router B otrzyma
komunikat o stanie łącza od routera A, będzie mógł zweryfikować, że to router
A przygotował tę wiadomość i nikt nie zmodyfikował jej po drodze.
W tym podrozdziale opisujemy popularną technikę zapewniania integral-
ności komunikatów stosowaną w wielu bezpiecznych protokołach sieciowych.
Jednak zanim do tego przejdziemy, musimy omówić następne ważne zagadnie-
nie w kryptografii — kryptograficzne
Pobierz darmowy fragment (pdf)