POLECAMY
- Najlepsze praktyki dotyczące korzystania z kryptografii
- Schematy i objaśnienia algorytmów kryptograficznych
Książka pomaga w zrozumieniu technik kryptograficznych stosowanych w popularnych narzędziach, strukturach i protokołach, dzięki czemu Czytelnik łatwiej będzie mógł dokonać właściwych wyborów zabezpieczeń dla swoich systemów i aplikacji. Publikacja nie skupia się na teorii, ale na aktualnych technikach kryptograficznych, które są potrzebne w codziennej pracy. Autor omawia elementy konstrukcyjne kryptografii, takie jak funkcje skrótu i wymiana kluczy, oraz pokazuje, jak ich używać w ramach protokołów bezpieczeństwa i aplikacji.
Książka omawia też najnowocześniejsze rozwiązania, takie jak kryptowaluty, uwierzytelniana hasłem wymiana kluczy i kryptografia postkwantowa. Wszystkie techniki są zilustrowane diagramami, rzeczywistymi przypadkami użycia i przykładami kodu, dzięki czemu można łatwo zobaczyć, jak zastosować je w praktyce.
To niezbędne źródło wiedzy dla wszystkich, którzy chcą pracować jako specjaliści ds. cyberbezpieczeństwa i programiści zajmujący się szyfrowaniem danych.
Rok wydania | 2023 |
---|---|
Liczba stron | 440 |
Kategoria | Algorytmika |
Wydawca | Wydawnictwo Naukowe PWN |
Tłumaczenie | Wojciech Fenrich, Witold Sikorski |
ISBN-13 | 978-83-01-22928-3 |
Numer wydania | 1 |
Język publikacji | polski |
Informacja o sprzedawcy | ePWN sp. z o.o. |
POLECAMY
Ciekawe propozycje
Prawdziwy Anthony Fauci
do koszyka
Prawdziwy bohater
do koszyka
Prawdziwy cel
do koszyka
PRAWDZIWY CUD
do koszyka
PRAWDZIWY CUD
do koszyka
Prawdziwy duch Bożego Narodzenia
do koszyka
Prawdziwy Mesjasz
do koszyka
Prawdziwy mężczyzna
do koszyka
Prawdziwy Mężczyzna
do koszyka
Spis treści
przedmowa xv | |
podziękowania xix | |
o książce xxi | |
o autorze xxvii | |
CZĘŚĆ I PRYMITYWY. SKŁADNIKI KRYPTOGRAFII | 1 |
1. Wprowadzenie | 3 |
1.1. W kryptografii chodzi o zabezpieczenie protokołów | 4 |
1.2. Kryptografia symetryczna. Czym jest szyfrowanie symetryczne? | 5 |
1.3. Zasada Kerckhoffsa: tylko klucz pozostaje tajny | 7 |
1.4. Kryptografia asymetryczna. Dwa klucze są lepsze niż jeden | 10 |
■ O wymienianiu się kluczami albo jak uzyskać dostęp do wspólnego sekretu | 11 |
■ Szyfrowanie asymetryczne, nie mylić z symetrycznym | 14 |
■ Podpisy cyfrowe, zupełnie jak te tradycyjne | 16 |
1.5. Kryptografia: klasyfikacje i abstrakcje | 18 |
1.6. Kryptografia teoretyczna a prawdziwy świat kryptografii | 20 |
1.7. Od teorii do praktyki. Każdy może pójść własną ścieżką | 21 |
1.8. Słowo ostrzeżenia | 26 |
2. Funkcje skrótu (funkcje haszujące) | 28 |
2.1. Czym jest funkcja skrótu? | 29 |
2.2. Właściwości zabezpieczeń funkcji skrótu | 32 |
2.3. Uwarunkowania zabezpieczeń funkcji skrótu | 34 |
2.4. Funkcje skrótu w praktyce | 36 |
■ Zobowiązania | 36 |
■ Integralność zasobów podrzędnych | 36 |
■ BitTorrent | 37 |
■ Tor | 37 |
2.5. Znormalizowane funkcje skrótu | 38 |
■ Funkcja haszująca SHA-2 | 39 |
■ Funkcja haszująca SHA-3 | 43 |
■ SHAKE i cSHAKE. Dwie funkcje o rozszerzalnym wyjściu (XOF) | 47 |
■ Jak uniknąć wieloznacznego haszowania za pomocą TupleHash | 48 |
2.6. Haszowanie haseł | 50 |
3. Kody uwierzytelniania wiadomości | 54 |
3.1. Ciasteczka bezstanowe – motywujący przykład dla MAC | 55 |
3.2. Kod z przykładem | 58 |
3.3. Właściwości zabezpieczeń MAC | 59 |
■ Fałszerstwo znacznika uwierzytelniania | 59 |
■ Długość znacznika uwierzytelniania | 60 |
■ Ataki powtórzeniowe | 60 |
■ Weryfikacja znaczników uwierzytelniania w stałym czasie | 62 |
3.4. MAC w prawdziwym świecie | 64 |
■ Uwierzytelnianie wiadomości | 64 |
■ Wyprowadzanie kluczy | 64 |
■ Integralność ciasteczek | 65 |
■ Tablice mieszające | 65 |
3.5. Kody uwierzytelniania wiadomości w praktyce | 65 |
■ HMAC, czyli MAC oparty na haszu | 65 |
■ KMAC, czyli MAC oparty na cSHAKE | 67 |
3.6. SHA-2 i ataki przedłużenia długości | 67 |
4. Szyfrowanie uwierzytelnione | 71 |
4.1. Czym jest szyfr? | 72 |
4.2. Szyfr blokowy AES | 74 |
■ Jaki poziom bezpieczeństwa zapewnia AES? | 74 |
■ Interfejs AES | 75 |
■ Wewnętrzna konstrukcja AES | 76 |
4.3. Zaszyfrowany pingwin i tryb CBC | 78 |
4.4. Na brak uwierzytelnienia – AES-CBC-HMAC | 81 |
4.5. Konstrukcje typu „wszystko w jednym”. Szyfrowanie uwierzytelnione | 83 |
■ Czym jest szyfrowanie uwierzytelnione z powiązanymi danymi (AEAD)? | 83 |
■ Algorytm AEAD o nazwie AES-GCM | 85 |
■ ChaCha20-Poly1305 | 90 |
4.6. Inne rodzaje szyfrowania symetrycznego | 94 |
■ Opakowywanie klucza | 94 |
■ Szyfrowanie uwierzytelnione odporne na niepoprawne użycie nonce | 95 |
■ Szyfrowanie dysku | 95 |
■ Szyfrowanie baz danych | 96 |
5. Wymiany klucza | 98 |
5.1. Czym są wymiany klucza? | 99 |
5.2. Wymiana klucza Diffiego-Hellmana (DH) | 102 |
■ Teoria grup | 102 |
■ Problem logarytmu dyskretnego. Fundament algorytmu Diffiego-Hellmana | 107 |
■ Normy algorytmu Diffiego-Hellmana | 109 |
5.3. Wymiana kluczy przy użyciu protokołu Diffiego-Hellmana w przestrzeni krzywych eliptycznych | 110 |
■ Czym jest krzywa eliptyczna? | 111 |
■ Jak działa algorytm Diffiego-Hellmana oparty na krzywych eliptycznych? | 114 |
■ Normy dla algorytmu Diffiego-Hellmana w przestrzeni krzywych eliptycznych | 116 |
5.4. Atak przeciwko małym podgrupom i inne czynniki związane z bezpieczeństwem | 118 |
6. Szyfrowanie asymetryczne i szyfrowanie hybrydowe | 123 |
6.1. Czym jest szyfrowanie asymetryczne? | 124 |
6.2. Szyfrowanie asymetryczne i szyfrowanie hybrydowe w praktyce | 126 |
■ Wymiany klucza i kapsułkowanie klucza | 127 |
■ Szyfrowanie hybrydowe | 128 |
6.3. Szyfrowanie asymetryczne przy użyciu RSA: złe i mniej złe | 132 |
■ Podręcznikowe RSA | 132 |
■ Dlaczego nie należy używać RSA PKCS#1 v1.5 | 137 |
■ Szyfrowanie asymetryczne przy użyciu RSA-OAEP | 139 |
6.4. Szyfrowanie hybrydowe przy użyciu ECIES | 142 |
7. Podpisy i dowody z wiedzą zerową | 145 |
7.1. Czym jest podpis? | 146 |
■ Jak w praktyce weryfikować podpisy | 147 |
■ Najważniejszy przypadek użycia podpisów, czyli uwierzytelnione wymiany klucza | 148 |
■ Rzeczywisty przypadek użycia. Infrastruktura klucza publicznego | 149 |
7.2. Dowody z wiedzą zerową (ZKP). Pochodzenie podpisów | 151 |
■ Protokół identyfikacji Schnorra. Interaktywny dowód z wiedzą zerową | 151 |
■ Podpisy jako nieinteraktywne dowody z wiedzą zerową | 154 |
7.3. Algorytmy podpisów, z których powinniśmy korzystać (lub nie) | 156 |
■ RSA PKCS#1 v1.5, czyli zła norma | 157 |
■ RSA-PSS. Lepsza norma | 160 |
■ Algorytm podpisu elektronicznego oparty na krzywych eliptycznych | 161 |
■ Algorytm podpisu cyfrowego oparty na krzywej Edwardsa | 164 |
7.4. Subtelności schematów podpisów | 168 |
■ Ataki podstawieniowe na podpisy | 168 |
■ Deformowalność podpisu | 169 |
8. Losowość i sekrety | 172 |
8.1. Czym jest losowość? | 173 |
8.2. Powolna losowość? Skorzystajmy z generatora liczb pseudolosowych (PRNG) | 175 |
8.3. Uzyskiwanie losowości w praktyce | 179 |
8.4. Generowanie losowości i czynniki związane z bezpieczeństwem | 181 |
8.5. Publiczna losowość | 184 |
8.6. Wyprowadzanie kluczy za pomocą HKDF | 186 |
8.7. Zarządzanie kluczami i sekretami | 190 |
8.8. Decentralizacja zaufania za pomocą kryptografii progowej | 192 |
CZĘŚĆ II PROTOKOŁY, CZYLI PRZEPISY NA KRYPTOGRAFIĘ | 197 |
9. Bezpieczny transport | 199 |
9.1. Bezpieczne protokoły transportowe: SSL i TLS | 199 |
■ Od SSL do TLS | 200 |
■ TLS w praktyce | 201 |
9.2. Jak działa protokół TLS? | 203 |
■ Handshake TLS | 204 |
■ Jak TLS 1.3 szyfruje dane aplikacji | 218 |
9.3. Aktualny stan szyfrowania w sieci web | 219 |
9.4. Inne bezpieczne protokoły transportowe | 222 |
9.5. Framework protokołu Noise. Współczesna alternatywa dla TLS | 222 |
■ Wiele odcieni fazy handshake | 223 |
■ Handshake przy użyciu Noise | 224 |
10. Szyfrowanie od końca do końca | 227 |
10.1. Dlaczego szyfrowanie od końca do końca? | 228 |
10.2. Niemożliwe do odnalezienia źródło zaufania | 230 |
10.3. Porażka szyfrowanych e-maili | 231 |
■ PGP czy GPG? I jak to w ogóle działa? | 232 |
■ Skalowanie zaufania pomiędzy użytkownikami za pomocą sieci zaufania | 235 |
■ Odkrywanie kluczy to prawdziwy problem | 236 |
■ Jeśli nie PGP, to co? | 238 |
10.4. Bezpieczne przesyłanie wiadomości. Nowoczesne spojrzenie na szyfrowanie od końca do końca w aplikacji Signal | 239 |
■ Bardziej przyjazny dla użytkownika niż WOT. Ufaj, ale weryfikuj | 241 |
■ X3DH. Handshake protokołu Signal | 243 |
■ Podwójna Zapadka. Protokół post-hand shake Signala | 247 |
10.5. Stan szyfrowania od końca do końca | 252 |
11. Uwierzytelnianie użytkownika | 256 |
11.1. Uwierzytelnianie – kilka słów podsumowania | 257 |
11.2. Uwierzytelnianie użytkownika, czyli jak pozbyć się haseł | 259 |
■ Jedno hasło, by rządzić wszystkimi. Pojedyncze logowanie (SSO) i menedżery haseł | 261 |
■ Nie chcecie widzieć haseł? Użyjcie asymetrycznej wymiany kluczy uwierzytelnianej hasłem 263 ■ Hasła jednorazowe to tak naprawdę nie hasła. Bezhasłowość przy użyciu kluczy symetrycznych 268 ■ Jak zastąpić hasła kluczami asymetrycznymi | 271 |
11.3. Uwierzytelnianie wspomagane przez użytkownika – parowanie urządzeń wykorzystujące wsparcie człowieka | 274 |
■ Klucze wstępnie współdzielone | 276 |
■ Symetryczne uwierzytelnianie hasłem wymiany klucza przy użyciu CPace | 278 |
■ Czy naszą wymianę klucza zaatakował pośrednik? Po prostu sprawdźmy krótki ciąg uwierzytelniony (SAS) | 279 |
12. Krypto jak w słowie „kryptowaluta”? | 285 |
12.1. Wprowadzenie do algorytmów konsensusu tolerancyjnych na bizantyjskie błędy | 286 |
■ Problem odporności. Protokoły rozproszone przychodzą na ratunek | 287 |
■ Problem zaufania? Decentralizacja przychodzi z pomocą | 288 |
■ Problem skali. Sieci bezpozwoleniowe i odporne na cenzurę | 290 |
12.2. Jak działa bitcoin? | 292 |
■ W jaki sposób bitcoin obsługuje salda użytkownika i transakcje | 292 |
■ Wydobywanie bitcoinów w cyfrowej złotej erze | 294 |
■ Jasny fork! Rozwiązywanie konfliktów wydobywczych | 298 |
■ Redukcja rozmiaru bloku za pomocą drzew Merkle | 301 |
12.3. Wycieczka po świecie kryptowalut | 303 |
■ Zmienna wartość | 303 |
■ Latencja | 303 |
■ Rozmiar łańcucha bloków | 304 |
■ Poufność | 304 |
■ Wydajność energetyczna | 304 |
12.4. DiemBFT. Tolerancyjny na bizantyjskie błędy protokół konsensusu | 305 |
■ Bezpieczeństwo i żywotność. Dwie własności protokołu konsensusu BFT | 305 |
■ Runda w protokole DiemBFT | 306 |
■ Ile nieuczciwości może tolerować protokół? | 307 |
■ Zasady głosowania DiemBFT | 308 |
■ Kiedy transakcje uważa się za sfinalizowane? | 309 |
■ Intuicje stojące za bezpieczeństwem DiemBFT | 310 |
13. Kryptografia sprzętowa | 314 |
13.1. Model napastnika we współczesnej kryptografii | 315 |
13.2. Niezaufane środowiska. Sprzęcie, ratuj! | 316 |
■ Kryptografia białej skrzynki – zły pomysł | 317 |
■ Siedzą w naszych portfelach. Inteligentne karty i bezpieczne elementy | 318 |
■ Banki je uwielbiają. Sprzętowe moduły bezpieczeństwa | 320 |
■ Moduły zaufanej platformy (TPM). Przydatna normalizacja elementów bezpiecznych | 323 |
■ Poufne obliczenia z zaufanym środowiskiem wykonawczym | 327 |
13.3. Które rozwiązanie będzie dobre dla mnie? | 328 |
13.4. Kryptografia odporna na wycieki, czyli jak złagodzić ataki kanałem bocznym w oprogramowaniu | 330 |
■ Programowanie stałoczasowe | 332 |
■ Nie korzystaj z sekretu! Maskowanie | 334 |
■ A co z atakami usterek? | 335 |
14. Kryptografia postkwantowa | 338 |
14.1. Czym są komputery kwantowe i dlaczego straszą kryptografów? | 339 |
■ Mechanika kwantowa – studium rzeczy małych | 340 |
■ Od narodzin komputerów kwantowych po supremację kwantową | 342 |
■ Wpływ algorytmów Grovera i Shora na kryptografię | 343 |
■ Kryptografia postkwantowa, czyli jak się bronić przed komputerami kwantowymi | 345 |
14.2. Podpisy oparte na haszach. Nie potrzeba niczego poza funkcją skrótu | 346 |
■ Podpisy jednorazowe (OTS) z podpisami Lamporta | 346 |
■ Mniejsze klucze i jednorazowe podpisy Winternitza | 348 |
■ Podpisy wielorazowe z XMSS oraz SPHINCS+ | 349 |
14.3. Krótsze klucze i podpisy dzięki kryptografii opartej na kratach | 353 |
■ Czym jest krata? | 353 |
■ Uczenie się z błędami podstawą kryptografii? | 355 |
■ Kyber, czyli wymiana klucza oparta na kracie | 356 |
■ Dilithium – schemat podpisu oparty na kracie | 359 |
14.4. Czy powinniśmy zacząć panikować? | 360 |
15. Czy to już wszystko? Kryptografia następnej generacji | 364 |
15.1. Im więcej, tym lepiej. Bezpieczne obliczenia wielostronne | 365 |
■ Przecięcie zbiorów prywatnych (PSI) | 366 |
■ MPC ogólnego przeznaczenia | 367 |
■ Stan MPC | 370 |
15.2. W pełni homomorficzne szyfrowania i obietnica zaszyfrowanej chmury | 370 |
■ Przykład szyfrowania homomorficznego z szyfrowaniem RSA | 371 |
■ Różne typy szyfrowania homomorficznego | 371 |
■ Bootstrapping, klucz do w pełni homomorficznego szyfrowania | 372 |
■ Schemat FHE oparty na problemie uczenia się z błędami | 374 |
■ Gdzie się z tego korzysta? | 376 |
15.3. Dowody z wiedzą zerową ogólnego przeznaczenia | 377 |
■ Jak działają schematy zk-SNARK | 380 |
■ Zobowiązania homomorficzne – ukrywamy części dowodu | 381 |
■ Parowania bilinearne – ulepszamy nasze zobowiązania homomorficzne | 381 |
■ Skąd się bierze zwięzłość? | 382 |
■ Od programów do wielomianów | 383 |
■ Programy są dla komputerów; nam potrzebne są układy arytmetyczne | 384 |
■ Układy arytmetyczne R1CS | 384 |
■ Od R1CS do wielomianu | 385 |
■ Trzeba dwojga, aby określić wartość wielomianu ukrytego w wykładniku | 386 |
16. Kiedy i gdzie kryptografia zawodzi | 389 |
16.1. Szukanie właściwego prymitywu kryptograficznego lub protokołu to nudna praca | 390 |
16.2. W jaki sposób korzystam z prymitywu kryptograficznego lub protokołu? Uprzejme normy i formalna weryfikacja | 392 |
16.3. Gdzie są dobre biblioteki? | 395 |
16.4. Niewłaściwe wykorzystanie kryptografii. Programiści to wrogowie | 396 |
16.5. Robicie to źle. Użyteczne zabezpieczenia | 397 |
16.6. Kryptografia nie jest wyspą | 399 |
16.7. Nasze obowiązki jako praktyków kryptografii. Dlaczego nie powinniśmy wdrażać własnej kryptografii | 400 |
Dodatek. Odpowiedzi do ćwiczeń | 404 |
Rozdział 2 | 404 |
Rozdział 3 | 405 |
Rozdział 6 | 405 |
Rozdział 7 | 406 |
Rozdział 8 | 406 |
Rozdział 9 | 406 |
Rozdział 10 | 407 |
Rozdział 11 | 407 |