From 499b65860cddbc4cc96888ecaf5faf7138811751 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Leonard=20K=C3=B6nig?= <leonard.r.koenig@googlemail.com>
Date: Sat, 8 Feb 2020 20:47:05 +0100
Subject: [PATCH] stream ciphers: korrelations

---
 main.tex | 228 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 227 insertions(+), 1 deletion(-)

diff --git a/main.tex b/main.tex
index 02b4f2a..60ba882 100644
--- a/main.tex
+++ b/main.tex
@@ -1584,7 +1584,233 @@ Wir haben nun einen Überblick darüber gewonnen, wie unser Angriff ungefähr
 ablaufen wird.  Wir möchten uns nun genauere Gedanken über die Periode, die
 Spur und die Initialisierungswerte der Chiffre machen.
 
-Wir betrachten LFSRs mit irreduziblen charakteristischen Polynomen \(f\).
+Wir betrachten LFSRs mit irreduziblen charakteristischen Polynomen \(f\), da
+wir uns nur für LFSRs maximaler Periode interessieren.  Wir bewegen uns im
+Körper \(\GF(\alpha)=\GF_{2^n} = \GF_2[X]/f \cdot \GF_2[X]\) mit der
+Spurfunktion
+\[
+	\Tr(\alpha) := \sum_{i=0}^{n-1} \alpha^{2^i}
+	             = \alpha \xor \alpha^2 \xor \alpha^{2^2} \xor \dotsb \xor \alpha^{2^{n-1}}
+\]
+Zudem ist \(\alpha\in\GF_{2^n}\) eine (beliebige) Nullstelle von \(f\).  Wie
+schon angedeutet, korrespondiert \(\theta\) eindeutig mit der dem Schlüssel
+\(k_0,\dotsc,k_{n-1}\) (bleibt noch zu zeigen):
+%TODO: wo?
+\[
+	\text{LFSR erzeugt Strom } (k_t)_{t\in\mathbb{N}}
+	\Leftrightarrow
+	\exists\theta\in\GF_{2^n}: k_t = \Tr(\theta\alpha^t)
+\]
+
+Wir können mit diesem Wissen wir einige Sachen über LFSRs und ihre
+Periode sagen.
+\begin{theorem}
+	Ein LFSR der Länge \(n\) mit irreduziblem charakteristischen
+	Polynom \(f\) hat genau dann maximale Periode \(2^n -1\), wenn
+	alle Nullstellen primitiv sind.  Hierbei bezeichnen wir die Ordnung
+	einer Nullstelle als das minimale \(k\in\mathbb{N}\), sodass
+	\(a^k = 1\) -- eine Nullstelle ist dann primitiv, wenn ihre Ordnung
+	\(k=2^n -1\).  In diesem Fall erzeugt \(\alpha\) (fast) alle Elemente
+	unseres Körpers \(\GF_{2^n}\setminus\{0\}\).
+\end{theorem}
+\begin{proof}
+Wir wissen, dass jede vom LFSR erzeugte Folge für eine Nullstelle \(\alpha\)
+mit dem Polynom \(f\) und \(\theta\in\GF_{2^n}\) die Form
+\(k^t=\Tr(\theta\alpha^t)\) hat.  Wir können daraus folgern, dass für die
+Ordnung \(k\) der Nullstelle gilt, dass \((\Tr(\theta\alpha^t))_t\) eine Periode
+von maximal \(k\) haben muss.
+
+Andersherum, hat \((\Tr(\theta\alpha^t))_t\) eine Periode \(k\neq 0\), dann
+gilt \(\Tr(\theta\alpha^{t+k}) = \Tr(\theta\alpha^t)\), somit gilt dank
+der Linearität von \(Tr\) (Satz 9.3):
+%TODO insert ref
+\[
+	\forall t\in\mathbb{N}:
+	0 = \Tr(\theta(\alpha^{t+k} +\alpha^t))
+          = \Tr(\theta\alpha^t(\alpha^k + 1))
+\]
+Mit Satz 9.7 erhalten wir außerdem
+%TODO ref
+\[
+	\Tr(\theta\alpha^0) = \Tr(\theta\alpha^1) = \dotsb = \Tr(\theta\alpha^{n-1} = 0
+	\Rightarrow
+	\theta = 0
+\]
+Nutzen wir dieses Wissen für \(\Theta(a^k +1)\), zeigt es dass gelten muss
+\((a^k+1) = 0\), somit würde \(\alpha\) eine Nullstelle haben mit Grad
+maximal \(k\).
+
+Somit sehen wir über Kontraposition
+\[
+	\Tr(\theta\alpha^t) \text{ hat Periode von maximal } k
+	\Leftrightarrow
+	\alpha \text{ hat Ordnung von maximal } k
+\]
+\end{proof}
+
+In diesem Beweis haben wir die eindeutige Korrelation von \(\theta\) mit
+dem Schlüssel genutzt, sowie die Sätze 9.3 und 9.7.  Fangen wir nun an diese
+Lücken zu schließen.
+% insert ref.
+
+%TODO totales Chaos.  Wir haben (?)
+%
+% 9.1: 9.3, 9.7, 9.4
+% F6 = 9.4 9.8
+% 9.2: bottom
+% 9.3: 9.2
+% 9.4: 9.3
+% 9.5: 9.2
+% 9.6: 9.2
+% 9.7: 9.5, 9.6
+% 9.8: 9.7
+%
+%   9.1
+%  --^-------
+% /  |       \  
+% |  | F6    |
+% |  |/  \   |
+% | 9.4  9.8 |
+% |/^     ^\/
+% 9.3      9.7
+%  ^       /^\
+%  |    9.5  9.6
+%  |      ^    ^
+%  \------|---/
+%        9.2
+% 
+
+\subsection{Berlekamp-Messay-Algorithmus}
+
+%TODO
+
+\subsection{Korrelationsattacken}
+
+Bisher haben wir uns ausschließlich mit der Analyse eines LFSRs beschäftigt
+und mit der Errechnung eines LFSRs für eine gegebene Bitfolge, also gezeigt,
+dass die Geheimhaltung der Rückkopplungskoeffizienten keinen Gewinn in
+Sachen Sicherheit bringt.  Weiterhin wissen wir, dass ein einzelnes LFSR
+sowieso unsicher ist, da wir einfach \enquote{zurückrechnen} können.  Die
+einzige Art wie ein LFSR also sicher sein kann, ist wenn wir mehrere
+kombinieren und eine Auswahlfunktion auf diese anwenden um den tatsächlichen
+Schlüsselstrom zu geniereren.  Haben wir also \(m\) LFSRs, dann ist die
+Auswahlfunktion \(f:\GF_2^m\to\GF_2\):
+%TODO Grafik
+
+Was sind aber Kriterien für eine \enquote{gute} Auswahlfunktion?  Erstmal
+sollte \(f\) möglichst gleichverteilt sein, d.\,h.\@ \(\Pr(f(x)=0)=1/2\),
+da einzelne LFSRs mit maximaler Periode sehr gute statistische Eigenschaften
+haben (d.\,i. ähnlich viele Nullen wie Einsen).  Ist nun \(f\) gleichverteilt,
+überträgt sich diese Eigenschaft auf den generierten Schlüsselstrom.  Des
+weiteren soll auch dieser Schlüsselstrom eine große Periode haben.
+
+Wir erinnern uns, eine boolesche Funktion \(f:\GF_2^m\to\GF_2\) lässt sich
+eindeutig als Summe einfacher Monome darstellen. %TODO ref
+Wir werden nun uns dieses Polynom genauer angucken.
+\begin{theorem}\label{thm:stream-lincomp}
+Seien \(m\) LFSR \(A_1,\dotsc,A_m\) mit jeweiliger Länge \(n_1\dotsc,n_m >2\)
+und maximalen Perioden gegeben.  Weiter seien die Längen paarweise teilerfremd.
+Sei nun \(F\) das reale Polynom, dass aus \(f\) entsteht, wenn die Addition
+im \(\GF_2\) \(\xor\) durch das reguläre \(+\) ersetzt wird.  Dann hat die
+obige Konstruktion die lineare Komplexität \(F(n_1,\dotsc,n_m)\).
+\end{theorem}
+Der Beweis wird ausgeführt in Cusick, Stanica: Cryptgraphic Boolean
+Functions and Applications.
+%TODO ref.
+Tatsächlich wird zusätzlich in dem Beweis folgendes über die Periode der
+Gesamtkonstruktion gezeigt.
+\begin{theorem}
+Es gelten die Voraussetzungen des obigen Satzes.  Dann hat die obige
+Konstruktion eine Periode von mindestens \(2^{F(n_1,\dotsc,n_m)}\).
+\end{theorem}
+
+Die Idee von Korrelationsangriffen ist es nun Schwächen in der Funktion \(f\)
+zufinden, um weniger Schritte zu benötigen als mit Schlüsselexhaustion
+(\(2^{n_1}\cdot \dotsb \cdot 2^{n^m}\)).  Angenommen, es gelte für \(f\),
+dass dessen Ausgabe nicht unähnlich der des ersten LFSRs ist (d.\,i.\@ sie
+korrelieren):
+\[
+	\Pr(f(x_1,\dotsc,x_m) = x_1) =: p \neq \frac{1}{2}
+\]
+Dann wäre ein known-plaintext Angriff mit bekanntem Ausschnitt des
+Schlüsselstroms \(k_i,\dotsc,k_{i+t-1}\) möglich, indem für alle möglichen
+Initialwerte \(k_0^1,\dotsc,k_{n_1}^1\) des ersten LSFRs (Schlüsselexhaustion)
+die Werte \(k_i^1,\dotsc,k_{i+t-1}^1\) berechnet werden.  Danach berechnet
+man die Korrelation zwischen den Strömen des ersten LSFRs und den bekannten
+der Gesamtkonstruktion:
+\[
+	p' := \frac{|\{j\in{i,\dotsc,i+t-1} \mid k_j^1 = k_i \}|}{2^t}
+\]
+Ist nun \(p'\approx p\), dann ist der geratene Teilschlüssel
+\((k_0^1,\dotsc,k_{n_1}^1)\) der korrekte Schlüssel für das erste LSFR.
+Ist jedoch \(p'\approx\frac{1}{2}\) wird der Schlüssel verworfen.
+
+Damit kann mit einem Aufwand von Schlüsselexhaustion von ca.\@ \(2^{n_1}\)
+der erste Teilschlüssel bestimmt werden -- der Gesamtaufwand der Schlüsselsuche
+reduziert sich damit auf \(2^{n_1} + 2^{n_2} \cdot\dotsb 2^{n_m}\).  In
+den Worten der linearen Kryptoanalyse, haben wir eine lineare Relation
+\((\alpha,beta)\) für \(f\) gefunden, sodass mit
+\((\alpha=(1,0,\dots,0)\in\GF_2^m\) und \(\beta=(1)\in\GF_2\) gilt, dass
+\[
+	\Pr(f(x)=\langle\alpha,x\rangle) = \Pr(\langle\beta,f(x)\rangle=\langle\alpha,x\rangle) \neq \frac{1}{2}
+\]
+Dieser Angriff lässt sich natürlich mit Korrelationen für jedes einzelne
+LSFR, also alle \(\alpha\in\GF_2^m\) analog durchführen.
+
+Wir entfernen uns nun von dem Beispiel und gucken uns allgemein eine
+lineare Relation \(\alpha\in\GF_2^m\) mit \(\Pr(f(x)=\langle\alpha,x\rangle)\neq 1/2\)
+an, wobei \(i_1<i_2<\dotsb i_t\) die Indizes sind, für an denen die Relation
+\(1\) ist, also \(a_k = 1 \leftrightarrow k=i_j\).  Analog seien
+\(i'_1<i'_2<\dotsb<i'_{m-t}\) die Indizes mit \(\alpha_{i'_j}=0\).
+Weiterhin sei die Abbildung die sich nur auf die korrelierenden LSFRs
+beschränkt:
+\begin{align*}
+	g_\alpha: &\;\GF_2^t \to \GF_2 \\
+	          &x\mapsto \sum_{j=1}^t \alpha_{i_j} x_j
+\end{align*}
+Dann korreliert die Ausgabe von \(f\) mit der von \(g_\alpha\).
+%TODO grafik
+Es reduziert sich die Schlüsselsuche auf
+\(2^{n_{i_1}}\cdot\dotsb\cdot 2^{n_{i_t}} + 2^{n_{i'_1}}\cdot\dotsb\cdot 2^{n_{i'_{m-t}}}\).
+
+\paragraph{Gegenmaßnahmen}
+Wir möchten uns nun damit beschäftigen, wie wir solche Korrelationen
+verhindern können.
+\begin{definition}
+Sei \(t\leq m\).  Eine Funktion \(f:\GF_2^m\to\GF_2\) heißt
+\(t\)-korrelationsimmun, wenn für alle linearen Relationen \(\alpha\in\GF_2^m\)
+die maximal \(t\) LSFRs auswählen \(1 \leq\sum \alpha_i \leq t\) gilt:
+\[
+	\Pr(f(x_1,\dotsc,x_m) = \langle\alpha,x\rangle) = \frac{1}{2}
+\]
+
+Eine Funktion \(f\) heißt zudem \(t\)-resilient, wenn \(f\) zusätzlich
+gleichverteilt ist.
+\end{definition}
+Wir möchten möglichst eine \(m\)-resiliente Funktion, dann wäre ein
+Korrelationsangriff genauso aufwändig wie Brute-Force.  Wie wir aber in
+Abschnitt 13
+% TODO ref
+sehen werden, gibt es keine solcher Funktionen.  Nehmen wir das nächstbeste,
+also \(m-1\)-resiliente Funktionen.  Jedoch sind solche Funktionen
+affin, der Schlüsselstrom also weiter linear abhängig vom Schlüssel.  Wir
+können also höchstens \(m-2\)-resilent fordern.
+%TODO im Skript steht hier abwechselnd resilient und korrelationsimmun.
+
+Es gilt sogar nach Siegenthaler 1984, dass eine Funktion \(f\) die
+\(t\)-resilient ist, einen algebraischen Grad von maximal \(m-t\) haben
+muss.
+%TODO ref.
+Wir möchten jedoch einen hohen Grad haben um nach Satz~\ref{thm:stream-lincomp}
+eine hohe lineare Komplexität des Schlüsselstroms zu erreichen.  Dies
+verhindert die im nächsten Kapitel algebraischen Angriffe.
+
+Man kann bei Stromchiffren also immer einen Angriff kreieren, der
+besser ist als Brute Force -- als Gegenmaßnahmen muss der Schlüssel
+entsprechend groß gewählt werden.
+
+\subsection{Algebraische Angriffe}
+
 
 
 \end{document}
-- 
GitLab