diff --git a/01-intro/intro.tex b/01-intro/intro.tex index a6545fbe12d2f9060f8e49d3008007de8d62128a..84f80540c32e0b434a4458f94e8ec4a1613c4730 100644 --- a/01-intro/intro.tex +++ b/01-intro/intro.tex @@ -135,7 +135,7 @@ stranami, které si navzájem věří. Konstrukce je snadná: spočítáme otisk slepením podepisovacího klíče se zprávou. } -\section{Náhodné generátory} +\section[introrng]{Náhodné generátory} 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 @@ -199,7 +199,7 @@ generovat náhodně. Teoreticky se sice může zopakovat, ale jak uvidíme v~odd malou pravděpodobností. } -\section{Alice a Bob na dražbě} +\section[auction]{Alice a Bob na dražbě} Na závěr této kapitoly zkusíme z~kryptografických primitiv poskládat jeden trochu složitější protokol. Budeme (trochu naivně) předpokládat, že primitiva jsou dokonalá, ale i tak se objeví @@ -391,7 +391,59 @@ Za to ale zaplatíme omezeními použitelnosti šifry. \subsection{Narozeninové útoky} -TODO +Může se stát, že protokol má úroveň bezpečnosti výrazně nižší než použitá primitiva. + +Představme si protokol, v~němž Alice generuje $b$-bitové nonce a předpokládá, +že budou unikátní. Útočník si bude pamatovat všechny nonce, které už proběhly, +a číhat na okamžik, kdy se nějaká nonce zopakuje. Jak dlouho mu to typicky potrvá? +Zdálo by se, že $2^b$ kroků, ale ve skutečnosti to bude mnohem méně. + +To, co útočník pozoruje, můžeme popsat jako náhodnou funkci~$f$ z~množiny $\{1,\ldots,m\}$ +pokusů do množiny $n$ možných noncí (v~našem případě je $n=2^b$). Útok uspěje, pokud +tato funkce není prostá. + +Počítejme pravděpodobnost, že $f$ je prostá, tedy podíl počtu prostých funkcí a počtu +všech funkcí:\foot{$n^{\underline m}$ je klesající mocnina definovaná jako $n(n-1)(n-2)\ldots(n-m+1)$.} +$$\eqalign{ +{n^{\underline{m}} \over n^m} +&= {n\over n} + \cdot{n-1\over n} + \cdot{n-2\over n} + \cdot\ldots + \cdot{n-m+1\over n} +\cr +&= 1 + \cdot\left( 1 - {1\over n} \right) + \cdot\left( 1 - {2\over n} \right) + \cdot\ldots + \cdot\left( 1 - {m-1\over n} \right). +}$$ +Jelikož pro malé~$x$ je $\e^{-x}\approx 1-x$ (to jsou první dva členy Taylorovy řady), +můžeme pravděpodobnost aproximovat výrazem +$$ + 1 + \cdot\e^{-{1\over n}} + \cdot\e^{-{2\over n}} + \cdot\ldots + \cdot\e^{-{m-1\over n}} + = \e^{-\left( 1 + 2 + \ldots + m-1 \over n \right)} + = \e^{-{m(m-1)\over 2n}} + \approx \e^{-{m^2\over 2n}} + . +$$ +Hledejme nyni~$m$, pro které tato pravděpodobnost bude rovna $1/2$. Má platit: +$$ + {1\over 2} = \e^{-{m^2\over 2n}}. +$$ +Zlogaritmováním dostaneme $-\ln 2 = -(m^2/2n)$, tedy $m^2 = (2\ln 2)n$, což po +odmocnění dá $m = \sqrt{2\ln 2}\cdot\sqrt n \approx 1.18\sqrt{n}$. + +Už po řádově odmocninovém počtu pokusů je tedy pravděpodobnost útoku $1/2$. +Místo očekávaných $2^b$ pokusů jich tedy stačí cca $\sqrt{2^b} = 2^{b/2}$. +Úroveň bezpečnosti je tedy nejvýše polovina délky nonce. + +Útokům tohoto druhu se říká {\I narozeninové} podle známého \uv{narozeninového paradoxu}: +pravděpodobnost, že ve skupině 23 lidí mají dva narozeniny tentýž den, je větší než $1/2$. \subsection{Útoky setkáním na půli cesty} diff --git a/tex/adsmac.tex b/tex/adsmac.tex index f07d7300e1c7b9979e2e0839aec2501939f9bfb7..470c75f82a3ca34d7a8c97c21c45db204ef97d73 100644 --- a/tex/adsmac.tex +++ b/tex/adsmac.tex @@ -143,6 +143,9 @@ % Asymptoticke O-cko \protected\def\O{{\cal O}} +% Konkatenace +\def\concat{\mathop{\Vert}} + % Prirozena a realna cisla \def\N{{\bb N}} \def\R{{\bb R}}