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