From ef5d235f40fe1a2a4cb6dde869937a04ef815020 Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Mon, 13 May 2024 22:21:50 +0200
Subject: [PATCH] =?UTF-8?q?N=C3=A1hodn=C3=A9=20gener=C3=A1tory?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
01-intro/intro.tex | 62 +++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 61 insertions(+), 1 deletion(-)
diff --git a/01-intro/intro.tex b/01-intro/intro.tex
index b8a6ce7..782f26a 100644
--- a/01-intro/intro.tex
+++ b/01-intro/intro.tex
@@ -137,6 +137,66 @@ slepením podepisovacího klíče se zprávou.
\section{Náhodné generátory}
-TODO
+Kryptografické protokoly také často potřebují generátor náhodných bitů \em{(RNG -- random number
+generator)}. Ten má být nejen statisticky rovnoměrný, ale pro vnějšího
+pozorovatele kompletně nepředvídatelný -- i~pokud by pozorovatel znal celou
+historii vygenerovaných bitů, nesmí mu to pomoci zjistit cokoliv o~následujícím bitu.
+
+RNG se používá zejména pro generování klíčů, ale má i jiné zajímavé aplikace.
+
+\examplen{hybridní šifra}{
+Zatímco symetrické šifry obvykle mají lineární časovou složitost, všechny známé asymetrické
+šifry jsou asymptoticky pomalejší. Proto se používá konstrukce, která kombinuje oba druhy šifer.
+Říká se jí \df{hybridní šifra} a funguje následovně:
+
+\tightlist{o}
+\:Značení:
+ \tightlist{o}
+ \:Nechť $E_A$ a $D_A$ je šifrovací a dešifrovací funkce nějaké asymetrické šifry.
+ \:$K_E$ a $K_D$ je šifrovací a dešifrovací klíč pro tuto šifru vygenerovaný Bobem.
+ Klíč $K_E$ je veřejný a zná ho i~Alice. Klíč~$K_D$ je soukromý Bobův.
+ \:$E_S$ a~$D_S$ je šifrovací a dešifrovací funkce nějaké symetrické šifry.
+ \endlist
+\:Alice chce poslat nějakou zprávu~$x$ Bobovi.
+\:Alice vygeneruje náhodný klíč~$N$ pro symetrickou šifru.
+\:Alice zašifruje zprávu symetricky: $y = E_S(N, x)$.
+\:Alice zašifruje klíč~$N$ asymetricky: $z = E_A(K_E, y)$.
+\:Alice pošle Bobovi $y$ a~$k$.
+\:Bob použije asymetrickou šifru, aby získal klíč $N = D_A(K_D, z)$.
+\:Bob použije symetrickou šifry, aby získal zprávu $x = D_S(N, y)$.
+\endlist
+}
+
+Všimněte si, že pomalou asymetrickou šifru používáme jen na krátký řetězec~$N$ fixní délky,
+zatímco celou dlouho zprávu~$x$ šifrujeme symetricky.
+
+Útočník má následující možnosti:
+
+\tightlist{o}
+\:zaútočit na symetrickou šifru
+\:zaútočit na asymetrickou sifru
+\:zaútočit na náhodný generátor: pokusit se uhodnout klíč~$N$
+\endlist
+
+\examplen{výzva a odpověď}{
+Alice je uživatel a Bob server. Alice chce Boba přesvědčit, že zná heslo, ale nechce mu ho posílat.
+Udělají to následovně: Bob vygeneruje náhodný řetězec -- \em{výzvu (challenge).} Alice výzvu podepíše
+pomocí svého klíče, například zahešováním výzvy spojené s~heslem, a~pošle to jako \em{odpověď (response).}
+Bob také zná heslo, takže může provést stejný výpočet a ověřit, že mu vyšlo totéž.
+}
+
+\examplen{přehrávací útok a nonce}{
+Zamysleme se nad vlastnostmi výzvy v~předchozím příkladu. Především se nesmí opakovat. Jinak by si totiž
+útočník mohl zaznamenávat všechny Aliciny odpovědi a když by později od Boba dostal tutéž výzvu, mohl by
+odpovědět zaznamenanou odpovědí. Tomu se říká \em{přehrávací útok (replay attack)} -- útočník použil
+legitimní zprávu, ale v~jiném kontextu.
+
+To je v~kryptografii velmi typická situace: potřebujeme generovat nějaké řetězce \uv{na jedno použití}.
+Těm se říká \em{nonce} z~anglického \uv{number used once}. My si toto slovo počeštíme a budeme ho skloňovat
+podle vzoru \uv{růže}. Kde takovou nonci sehnat? Buďto si můžeme pořídit počítadlo a postupně ho zvyšovat;
+jak uvidíme v~kapitole TODO, udržování stavu je v~praxi dost problematické. Proto bývá jednodušší nonci
+generovat náhodně. Teoreticky se sice může zopakovat, ale jak uvidíme v~oddílu TODO, stane se to s~velmi
+malou pravděpodobností.
+}
\endchapter
--
GitLab