"Prawdziwy świat kryptografii"

Identyfikator Librowy: 290864

Spis treści

przedmowa 16

podziękowania 20

o książce 22

o autorze 28

CZĘŚĆ I PRYMITYWY. SKŁADNIKI KRYPTOGRAFII 30

1. Wprowadzenie 32

1.1. W kryptografii chodzi o zabezpieczenie protokołów 33

1.2. Kryptografia symetryczna. Czym jest szyfrowanie symetryczne? 34

1.3. Zasada Kerckhoffsa: tylko klucz pozostaje tajny 36

1.4. Kryptografia asymetryczna. Dwa klucze są lepsze niż jeden 39

■ O wymienianiu się kluczami albo jak uzyskać dostęp do wspólnego sekretu 40

■ Szyfrowanie asymetryczne, nie mylić z symetrycznym 43

■ Podpisy cyfrowe, zupełnie jak te tradycyjne 45

1.5. Kryptografia: klasyfikacje i abstrakcje 47

1.6. Kryptografia teoretyczna a prawdziwy świat kryptografii 49

1.7. Od teorii do praktyki. Każdy może pójść własną ścieżką 50

1.8. Słowo ostrzeżenia 55

2. Funkcje skrótu (funkcje haszujące) 57

2.1. Czym jest funkcja skrótu? 58

2.2. Właściwości zabezpieczeń funkcji skrótu 61

2.3. Uwarunkowania zabezpieczeń funkcji skrótu 63

2.4. Funkcje skrótu w praktyce 65

■ Integralność zasobów podrzędnych 65

■ Zobowiązania 65

■ BitTorrent 66

■ Tor 66

2.5. Znormalizowane funkcje skrótu 67

■ Funkcja haszująca SHA-2 68

■ Funkcja haszująca SHA-3 72

■ SHAKE i cSHAKE. Dwie funkcje o rozszerzalnym wyjściu (XOF) 76

■ Jak uniknąć wieloznacznego haszowania za pomocą TupleHash 77

2.6. Haszowanie haseł 79

3. Kody uwierzytelniania wiadomości 83

3.1. Ciasteczka bezstanowe – motywujący przykład dla MAC 84

3.2. Kod z przykładem 87

3.3. Właściwości zabezpieczeń MAC 88

■ Fałszerstwo znacznika uwierzytelniania 88

■ Ataki powtórzeniowe 89

■ Długość znacznika uwierzytelniania 89

■ Weryfikacja znaczników uwierzytelniania w stałym czasie 91

3.4. MAC w prawdziwym świecie 93

■ Uwierzytelnianie wiadomości 93

■ Wyprowadzanie kluczy 93

3.5. Kody uwierzytelniania wiadomości w praktyce 94

■ HMAC, czyli MAC oparty na haszu 94

■ Integralność ciasteczek 94

■ Tablice mieszające 94

3.6. SHA-2 i ataki przedłużenia długości 96

■ KMAC, czyli MAC oparty na cSHAKE 96

4. Szyfrowanie uwierzytelnione 100

4.1. Czym jest szyfr? 101

4.2. Szyfr blokowy AES 103

■ Jaki poziom bezpieczeństwa zapewnia AES? 103

■ Interfejs AES 104

■ Wewnętrzna konstrukcja AES 105

4.3. Zaszyfrowany pingwin i tryb CBC 107

4.4. Na brak uwierzytelnienia – AES-CBC-HMAC 110

4.5. Konstrukcje typu „wszystko w jednym”. Szyfrowanie uwierzytelnione 112

■ Czym jest szyfrowanie uwierzytelnione z powiązanymi danymi (AEAD)? 112

■ Algorytm AEAD o nazwie AES-GCM 114

■ ChaCha20-Poly1305 119

4.6. Inne rodzaje szyfrowania symetrycznego 123

■ Opakowywanie klucza 123

■ Szyfrowanie dysku 124

■ Szyfrowanie uwierzytelnione odporne na niepoprawne użycie nonce 124

■ Szyfrowanie baz danych 125

5. Wymiany klucza 127

5.1. Czym są wymiany klucza? 128

5.2. Wymiana klucza Diffiego-Hellmana (DH) 131

■ Teoria grup 131

■ Problem logarytmu dyskretnego. Fundament algorytmu Diffiego-Hellmana 136

■ Normy algorytmu Diffiego-Hellmana 138

5.3. Wymiana kluczy przy użyciu protokołu Diffiego-Hellmana w przestrzeni krzywych eliptycznych 139

■ Czym jest krzywa eliptyczna? 140

■ Jak działa algorytm Diffiego-Hellmana oparty na krzywych eliptycznych? 143

■ Normy dla algorytmu Diffiego-Hellmana w przestrzeni krzywych eliptycznych 145

5.4. Atak przeciwko małym podgrupom i inne czynniki związane z bezpieczeństwem 147

6. Szyfrowanie asymetryczne i szyfrowanie hybrydowe 152

6.1. Czym jest szyfrowanie asymetryczne? 153

6.2. Szyfrowanie asymetryczne i szyfrowanie hybrydowe w praktyce 155

■ Wymiany klucza i kapsułkowanie klucza 156

■ Szyfrowanie hybrydowe 157

6.3. Szyfrowanie asymetryczne przy użyciu RSA: złe i mniej złe 161

■ Podręcznikowe RSA 161

■ Dlaczego nie należy używać RSA PKCS#1 v1.5 166

■ Szyfrowanie asymetryczne przy użyciu RSA-OAEP 168

6.4. Szyfrowanie hybrydowe przy użyciu ECIES 171

7. Podpisy i dowody z wiedzą zerową 174

7.1. Czym jest podpis? 175

■ Jak w praktyce weryfikować podpisy 176

■ Najważniejszy przypadek użycia podpisów, czyli uwierzytelnione wymiany klucza 177

■ Rzeczywisty przypadek użycia. Infrastruktura klucza publicznego 178

7.2. Dowody z wiedzą zerową (ZKP). Pochodzenie podpisów 180

■ Protokół identyfikacji Schnorra. Interaktywny dowód z wiedzą zerową 180

■ Podpisy jako nieinteraktywne dowody z wiedzą zerową 183

7.3. Algorytmy podpisów, z których powinniśmy korzystać (lub nie) 185

■ RSA PKCS#1 v1.5, czyli zła norma 186

■ RSA-PSS. Lepsza norma 189

■ Algorytm podpisu elektronicznego oparty na krzywych eliptycznych 190

■ Algorytm podpisu cyfrowego oparty na krzywej Edwardsa 193

7.4. Subtelności schematów podpisów 197

■ Ataki podstawieniowe na podpisy 197

■ Deformowalność podpisu 198

8. Losowość i sekrety 201

8.1. Czym jest losowość? 202

8.2. Powolna losowość? Skorzystajmy z generatora liczb pseudolosowych (PRNG) 204

8.3. Uzyskiwanie losowości w praktyce 208

8.4. Generowanie losowości i czynniki związane z bezpieczeństwem 210

8.5. Publiczna losowość 213

8.6. Wyprowadzanie kluczy za pomocą HKDF 215

8.7. Zarządzanie kluczami i sekretami 219

8.8. Decentralizacja zaufania za pomocą kryptografii progowej 221

CZĘŚĆ II PROTOKOŁY, CZYLI PRZEPISY NA KRYPTOGRAFIĘ 226

9.1. Bezpieczne protokoły transportowe: SSL i TLS 228

9. Bezpieczny transport 228

■ Od SSL do TLS 229

■ TLS w praktyce 230

9.2. Jak działa protokół TLS? 232

■ Handshake TLS 233

■ Jak TLS 1.3 szyfruje dane aplikacji 247

9.3. Aktualny stan szyfrowania w sieci web 248

9.4. Inne bezpieczne protokoły transportowe 251

9.5. Framework protokołu Noise. Współczesna alternatywa dla TLS 251

■ Wiele odcieni fazy handshake 252

■ Handshake przy użyciu Noise 253

10. Szyfrowanie od końca do końca 256

10.1. Dlaczego szyfrowanie od końca do końca? 257

10.2. Niemożliwe do odnalezienia źródło zaufania 259

10.3. Porażka szyfrowanych e-maili 260

■ PGP czy GPG? I jak to w ogóle działa? 261

■ Skalowanie zaufania pomiędzy użytkownikami za pomocą sieci zaufania 264

■ Odkrywanie kluczy to prawdziwy problem 265

■ Jeśli nie PGP, to co? 267

10.4. Bezpieczne przesyłanie wiadomości. Nowoczesne spojrzenie na szyfrowanie od końca do końca w aplikacji Signal 268

■ Bardziej przyjazny dla użytkownika niż WOT. Ufaj, ale weryfikuj 270

■ X3DH. Handshake protokołu Signal 272

■ Podwójna Zapadka. Protokół post-hand shake Signala 276

10.5. Stan szyfrowania od końca do końca 281

11. Uwierzytelnianie użytkownika 285

11.1. Uwierzytelnianie – kilka słów podsumowania 286

11.2. Uwierzytelnianie użytkownika, czyli jak pozbyć się haseł 288

■ Jedno hasło, by rządzić wszystkimi. Pojedyncze logowanie (SSO) i menedżery haseł 290

■ 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 300

11.3. Uwierzytelnianie wspomagane przez użytkownika – parowanie urządzeń wykorzystujące wsparcie człowieka 303

■ Klucze wstępnie współdzielone 305

■ Symetryczne uwierzytelnianie hasłem wymiany klucza przy użyciu CPace 307

■ Czy naszą wymianę klucza zaatakował pośrednik? Po prostu sprawdźmy krótki ciąg uwierzytelniony (SAS) 308

12. Krypto jak w słowie „kryptowaluta”? 314

12.1. Wprowadzenie do algorytmów konsensusu tolerancyjnych na bizantyjskie błędy 315

■ Problem odporności. Protokoły rozproszone przychodzą na ratunek 316

■ Problem zaufania? Decentralizacja przychodzi z pomocą 317

■ Problem skali. Sieci bezpozwoleniowe i odporne na cenzurę 319

12.2. Jak działa bitcoin? 321

■ W jaki sposób bitcoin obsługuje salda użytkownika i transakcje 321

■ Wydobywanie bitcoinów w cyfrowej złotej erze 323

■ Jasny fork! Rozwiązywanie konfliktów wydobywczych 327

■ Redukcja rozmiaru bloku za pomocą drzew Merkle 330

12.3. Wycieczka po świecie kryptowalut 332

■ Latencja 332

■ Zmienna wartość 332

■ Poufność 333

■ Rozmiar łańcucha bloków 333

■ Wydajność energetyczna 333

12.4. DiemBFT. Tolerancyjny na bizantyjskie błędy protokół konsensusu 334

■ Bezpieczeństwo i żywotność. Dwie własności protokołu konsensusu BFT 334

■ Runda w protokole DiemBFT 335

■ Ile nieuczciwości może tolerować protokół? 336

■ Zasady głosowania DiemBFT 337

■ Kiedy transakcje uważa się za sfinalizowane? 338

■ Intuicje stojące za bezpieczeństwem DiemBFT 339

13. Kryptografia sprzętowa 343

13.1. Model napastnika we współczesnej kryptografii 344

13.2. Niezaufane środowiska. Sprzęcie, ratuj! 345

■ Kryptografia białej skrzynki – zły pomysł 346

■ Siedzą w naszych portfelach. Inteligentne karty i bezpieczne elementy 347

■ Banki je uwielbiają. Sprzętowe moduły bezpieczeństwa 349

■ Moduły zaufanej platformy (TPM). Przydatna normalizacja elementów bezpiecznych 352

■ Poufne obliczenia z zaufanym środowiskiem wykonawczym 356

13.3. Które rozwiązanie będzie dobre dla mnie? 357

13.4. Kryptografia odporna na wycieki, czyli jak złagodzić ataki kanałem bocznym w oprogramowaniu 359

■ Programowanie stałoczasowe 361

■ Nie korzystaj z sekretu! Maskowanie 363

■ A co z atakami usterek? 364

14. Kryptografia postkwantowa 367

14.1. Czym są komputery kwantowe i dlaczego straszą kryptografów? 368

■ Mechanika kwantowa – studium rzeczy małych 369

■ Od narodzin komputerów kwantowych po supremację kwantową 371

■ Wpływ algorytmów Grovera i Shora na kryptografię 372

■ Kryptografia postkwantowa, czyli jak się bronić przed komputerami kwantowymi 374

14.2. Podpisy oparte na haszach. Nie potrzeba niczego poza funkcją skrótu 375

■ Podpisy jednorazowe (OTS) z podpisami Lamporta 375

■ Mniejsze klucze i jednorazowe podpisy Winternitza 377

■ Podpisy wielorazowe z XMSS oraz SPHINCS+ 378

14.3. Krótsze klucze i podpisy dzięki kryptografii opartej na kratach 382

■ Czym jest krata? 382

■ Uczenie się z błędami podstawą kryptografii? 384

■ Kyber, czyli wymiana klucza oparta na kracie 385

■ Dilithium – schemat podpisu oparty na kracie 388

14.4. Czy powinniśmy zacząć panikować? 389

15. Czy to już wszystko? Kryptografia następnej generacji 393

15.1. Im więcej, tym lepiej. Bezpieczne obliczenia wielostronne 394

■ Przecięcie zbiorów prywatnych (PSI) 395

■ MPC ogólnego przeznaczenia 396

15.2. W pełni homomorficzne szyfrowania i obietnica zaszyfrowanej chmury 399

■ Stan MPC 399

■ Przykład szyfrowania homomorficznego z szyfrowaniem RSA 400

■ Różne typy szyfrowania homomorficznego 400

■ Bootstrapping, klucz do w pełni homomorficznego szyfrowania 401

■ Schemat FHE oparty na problemie uczenia się z błędami 403

■ Gdzie się z tego korzysta? 405

15.3. Dowody z wiedzą zerową ogólnego przeznaczenia 406

■ Jak działają schematy zk-SNARK 409

■ Parowania bilinearne – ulepszamy nasze zobowiązania homomorficzne 410

■ Zobowiązania homomorficzne – ukrywamy części dowodu 410

■ Skąd się bierze zwięzłość? 411

■ Od programów do wielomianów 412

■ Programy są dla komputerów; nam potrzebne są układy arytmetyczne 413

■ Układy arytmetyczne R1CS 413

■ Od R1CS do wielomianu 414

■ Trzeba dwojga, aby określić wartość wielomianu ukrytego w wykładniku 415

16. Kiedy i gdzie kryptografia zawodzi 418

16.1. Szukanie właściwego prymitywu kryptograficznego lub protokołu to nudna praca 419

16.2. W jaki sposób korzystam z prymitywu kryptograficznego lub protokołu? Uprzejme normy i formalna weryfikacja 421

16.3. Gdzie są dobre biblioteki? 424

16.4. Niewłaściwe wykorzystanie kryptografii. Programiści to wrogowie 425

16.5. Robicie to źle. Użyteczne zabezpieczenia 426

16.6. Kryptografia nie jest wyspą 428

16.7. Nasze obowiązki jako praktyków kryptografii. Dlaczego nie powinniśmy wdrażać własnej kryptografii 429

Dodatek. Odpowiedzi do ćwiczeń 433

Rozdział 2 433

Rozdział 3 434

Rozdział 6 434

Rozdział 7 435

Rozdział 8 435

Rozdział 9 435

Rozdział 10 436

Rozdział 11 436