From 1b3a15f9a1142e8fbe4da7dc2c76a81f2f716c90 Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Fri, 21 Feb 2025 21:37:29 +0100
Subject: [PATCH] =?UTF-8?q?Dokonal=C3=A1=20bezpe=C4=8Dnost:=20Za=C4=8D?=
 =?UTF-8?q?=C3=A1tek?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 02-perfect/Makefile    |   3 ++
 02-perfect/perfect.tex | 102 +++++++++++++++++++++++++++++++++++++++++
 Makefile               |   1 +
 3 files changed, 106 insertions(+)
 create mode 100644 02-perfect/Makefile
 create mode 100644 02-perfect/perfect.tex

diff --git a/02-perfect/Makefile b/02-perfect/Makefile
new file mode 100644
index 0000000..ba6c63e
--- /dev/null
+++ b/02-perfect/Makefile
@@ -0,0 +1,3 @@
+TOP=..
+
+include ../Makerules
diff --git a/02-perfect/perfect.tex b/02-perfect/perfect.tex
new file mode 100644
index 0000000..d513003
--- /dev/null
+++ b/02-perfect/perfect.tex
@@ -0,0 +1,102 @@
+\ifx\chapter\undefined
+\input adsmac.tex
+\singlechapter{2}
+\fi
+
+\chapter[perfect]{Dokonalá bezpečnost}
+
+V~ideálním světě bychom o~každém kryptografickém primitivu uměli dokázat,
+že je bezpečné. To je mnohem těžší, než se zdá, ale přeci jen existují
+konstrukce, pro které takový důkaz známe. V~této kapitole si několik těchto
+výjimečných případů předvedeme. Ukáže se ale, že mají dost omezené využití.
+
+\section{Jednorázové klíče}
+
+Uvažujme následující symetrickou šifru. Jejím vstupem bude zpráva ${\bf x}
+\in \{0,1\}^n$ a stejně dlouhý klíč ${\bf k} \in \{0,1\}^n$. Zašifrovanou
+zprávu ${\bf y}\in \{0,1\}^n$ spočítáme jako {\csc xor} původní zprávy s~klíčem,
+tedy $y_i = x_i \oplus k_i$ pro všechna~$i$.
+Dešifrovat můžeme druhým vyxorováním s~klíčem:
+$y_i \oplus k_i = (x_i \oplus k_i) \oplus k_i = x_i \oplus (k_i + k_i)
+= x_i \oplus 0 = x_i$.
+
+\theorem{
+Pakliže klíč zvolíme jako rovnoměrně náhodnou posloupnost bitů,
+je zašifrovaná zpráva také rovnoměrně náhodná posloupnost bitů.
+}
+
+\proof
+Jelikož různé bity zprávy spolu neinteragují, stačí větu dokázat pro jediný bit:
+
+\list{o}
+\:Pokud $x_i=0$, pak s~pravděpodobností $1/2$ nastane $k_i=0$, a~tedy $y_i = 0 \oplus 0 = 0$, nebo $k_i=1$, a~tedy $y_i = 0 \oplus 1 = 1$.
+
+\:Pokud $x_i=1$, pak s~pravděpodobností $1/2$ nastane $k_i=0$, a~tedy $y_i = 1 \oplus 0 = 1$, nebo $k_i=1$, a~tedy $y_i = 1 \oplus 1 = 0$.
+\endlist
+
+V~obou případech tedy $y_i$ nabývá hodnot 0 a~1 se stejnou pravděpodobností.
+\qed
+
+Z~toho plyne, že zašifrovaný text nenese vůbec žádnou informaci o~původním textu
+kromě jeho délky. Takové šifře se říká {\I dokonale bezpečná.}
+Ovšem pozor -- takhle silnou záruku bezpečnosti dostáváme pouze tehdy, když jeden
+klíč použijeme pro jedinou zprávu. Takovým klíčům se říká {\I jednorázové klíče
+(one-time pad).}
+
+Podívejme se, co se stane, pokud stejný klíč~${\bf k}$ použijeme pro dvě zprávy
+${\bf x}$ a~${\bf x'}$. Víme, že $y_i = x_i \oplus k_i$ a $y'_i = x'_i \oplus k_i$.
+Pokud zašifrované zprávy vyxorujeme, dostaneme
+$y_i \oplus y'_i = (x_i \oplus k_i) \oplus (x'_i \oplus k_i)
+= (x_i \oplus x'_i) \oplus (k_i \oplus k_i)
+= (x_i \oplus x'_i) \oplus 0
+= x_i \oplus x'_i$.
+Zašifrované zprávy se tedy liší přesně tam, kde se liší původní zprávy.
+Vzhledem k~tomu, jak velkou redundanci mají přirozené jazyky, tato informace
+obvykle postačí k~rekonstrukci většiny obsahu zpráv. Jen nerozlišíme jejich pořadí.
+
+Vypadá to tedy, že jsme si nepomohli -- místo bezpečného přenosu zprávy teď potřebujeme
+bezpečně přenést stejné dlouhý klíč. To přesto může být praktické. Pokud vysíláme
+do ciziny tajného agenta, můžeme ho vybavit knížkou s~jednorázovými klíči.
+Každou stránku použije na jednu zprávu a pak ji zničí.
+
+Také časem sestrojíme zajímavé šifry tak, že dokonale náhodnou posloupnost
+nahradíme výstupem pseudonáhodného generátoru. To už ovšem nebude dokonale
+bezpečné.
+
+Kromě toho si všimněme, že změna jednoho bitu zašifrované zprávy způsobí
+změnu příslušného bitu dešifrované zprávy. Zbytek dešifrované zprávy zůstane
+nezměněn. Tato vlastnost nám komplikovala život už v~první kapitole a zde vidíme,
+že se může projevit i u~dokonale bezpečných šifer. Proto zopakujeme: šifra
+zaručuje utajení, nikoliv integritu.
+
+Dodejme ještě, že šifru s~jednorázovým klíčem poprvé popsal Frank Miller v~roce 1882,
+znovu ji objevil Gilbert Vernam v~roce 1917 (proto se této šifře často říká Vernamova)
+a dokonalou bezpečnost dokázal Claude Shannon v~roce 1945 (proto místo dokonale
+bezpečné někdy říkáme shannonovsky bezpečné).
+
+\subsection{Zobecnění}
+
+Stejný princip můžeme použít v~libovolné grupě. Kdykoliv máme nějakou
+komutativní grupu $(G,+,{\bf 0},-)$, můžeme zprávu $x\in G$
+zašifrovat náhodným klíčem $k\in G$ jako $y = E(x,k) = x+k$, a~tedy dešifrovat jako
+$D(y, k) = y-k = (x+k)-k = x$.
+Předchozí \uv{xorovací} verzi dostaneme volbou $G = \Z_2^n$.
+
+Opět nahlédneme, že sečtením libovolného prvku grupy s~rovnoměrně náhodným
+prvkem dostaneme rovnoměrně náhodný prvek. (Pro každé $a\in G$ je $x \mapsto a+x$
+permutace na~$G$.) Proto je i~tato šifra dokonale bezpečná.
+
+Dokonalou bezpečnost můžeme interpretovat i takto:
+Nechť Alice vybere zprávu $X\in G$ z~nějakého neznámého pravděpodobnostního rozdělení~$\cal D$
+a rovnoměrně rozdělený klíč $K\in G$.
+My jsme zpozorovali nějakou konkrétní hodnotu~$y$ náhodné veličiny $Y=E(X,K)=X+K$
+a ptáme se, jaká je za této podmínky pravděpodobnost, že $X$ je rovno nějaké konkrétní
+zprávě~$x$.
+Zajímá nás tedy $\Pr[X=x \mid Y=y]
+= \Pr[X=x \mid X+K=y]
+= \Pr[X=x \mid K=y-X]$.
+Ovšem $K$ je zvoleno nezávisle na~$X$, takže jevy $X=x$ a $K=y-x$
+jsou nezávislé, a~tudíž je podmíněná pravděpodobnost rovna nepodmíněné $\Pr[X=x]$.
+Pozorování $Y=y$ tedy nepřináší vůbec žádnou informaci o~hodnotě~$X$.
+
+\endchapter
diff --git a/Makefile b/Makefile
index b0d2125..3ae0073 100644
--- a/Makefile
+++ b/Makefile
@@ -10,6 +10,7 @@ include Makerules
 
 CHAPTERS= \
 	01-intro
+	02-perfect
 
 chapters:
 	for ch in $(CHAPTERS) ; do $(MAKE) -C $$ch pics ; done
-- 
GitLab