diff --git a/main.tex b/main.tex index 60ba8824e3432845dca460729519db7fbebcdb5e..b8ce081268e3765807a30e57421d48b9191e76d7 100644 --- a/main.tex +++ b/main.tex @@ -1450,7 +1450,7 @@ mehrere kombinieren und eine Auswahlfunktion \(f\) auf die Ausgaben der einzelne LFSRs anwenden, die für jedes Output-Bit der Gesamtchiffre spezifiziert, welches LFSR konkret verwendet wird. -Man könnte meinen, dass es reichen würde, schlicht die Rückkkopplungskoeffizienten +Man könnte meinen, dass es reichen würde, schlicht die Rückkopplungskoeffizienten geheimzuhalten. Wir werden nun sehen, dass wir anhand eines Schlüsselstroms ein entsprechendes LFSR bauen können -- dadurch also nichts gewonnen ist. Hierzu betrachten wir nun was es bedeutet, wenn ein LFSR maximale Periode hat um @@ -1555,7 +1555,7 @@ Wir wissen also: Hierbei ist \(\Tr(\alpha)\) die Spur (Trace) von \(\alpha\). Während \(\Tr\) unabhängig von jedem LFSR ist, beschreibt die Nullstelle die -Rückkkopplungskoeffizienten -- und \(\theta\) den Schlüssel. Was ist aber nun +Rückkopplungskoeffizienten -- und \(\theta\) den Schlüssel. Was ist aber nun \(\theta\)? Hierzu nutzen wir die uns bekannten Schlüsselbits und setzen ein: \begin{align*} 0 &= k_0 @@ -1734,15 +1734,15 @@ korrelieren): \] 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) +Initialwerte \(k_0^1,\dotsc,k_{n_1}^1\) des ersten LFSRs (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 +man die Korrelation zwischen den Strömen des ersten LFSRs 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. +\((k_0^1,\dotsc,k_{n_1}^1)\) der korrekte Schlüssel für das erste LFSR. 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}\) @@ -1755,14 +1755,14 @@ den Worten der linearen Kryptoanalyse, haben wir eine lineare Relation \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. +LFSR, 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 +Weiterhin sei die Abbildung die sich nur auf die korrelierenden LFSRs beschränkt: \begin{align*} g_\alpha: &\;\GF_2^t \to \GF_2 \\ @@ -1779,7 +1779,7 @@ 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: +die maximal \(t\) LFSRs auswählen \(1 \leq\sum \alpha_i \leq t\) gilt: \[ \Pr(f(x_1,\dotsc,x_m) = \langle\alpha,x\rangle) = \frac{1}{2} \] @@ -1811,6 +1811,223 @@ entsprechend groß gewählt werden. \subsection{Algebraische Angriffe} +Wir werden nun uns einen anderen Angriff auf Stromchiffren widmen. + +Wir bezeichnen die Rückkopplungskoeffizienten des \(j\)-ten LFSRs, mit der +dazugehörigen Rekursionsgleichung +\(k_t^j = a_0^j k_{t-{n_j}}^j + \dotsb + a_{n_j -1}^j k_{t-1}^j\). +Haben wir nun einen \(n_j\) langen Ausschnitt des Schlüsselstroms dieses +LFSRs \(k_{t-n_i}^j,\dotsc,k_{t-1}^j\), dann lässt sich darüber der Nachfolger +\(k_{t-n_i+1}^j,\dotsc,k_t^j\) über folgende Matrixmultiplikation berechnen +bei der jeweils die Koeffizienten den vorherigen Schlüsselwerten zugeordnet +werden: +\[ + (k_{t-n_j+1}^j,\dotsc,k_t^j) = + \begin{pmatrix} + 0 & 1 & 0 & \dotsb & 0 \\ + 0 & 0 & 1 & \dotsb & 0 \\ + \vdots & \vdots & & \ddots & \vdots \\ + 0 & 0 & 0 & \dotsb & 1 \\ + a_0^j & a_1^j & a_2^j & \dotsb & a_{n-1}^j + \end{pmatrix} \cdot + \begin{pmatrix} + k_{t-n_j+0}^j \\ + k_{t-n_j+1}^j \\ + \vdots \\ + k_{t-2}^j \\ + k_{t-1} + \end{pmatrix} +\] +Wir bezeichnen mit \(L_j\) die obige Matrix für das \(j\)-ten LFSR\@. +Nutzen wir nun die Projektion auf die \(n_j\)-te Komponente +\(\pi_{n_j}(x_1,\dotsc,x_{n_j}):=x_{n_j}\), können wir schreiben: +\begin{align*} + k_t^j &= \pi_{n_j}\circ L_j \cdot (k_{t-n_j}^j,\dotsc,k_{t-1}^j)^T \\ + k_{t+1}^j &= \pi_{n_j}\circ L_j \cdot (k_{t-n_j+1}^j,\dotsc,k_{t-1+1}^j)^T \\ + &= \pi_{n_j}\circ L_j \cdot \left(L_j \circ (k_{t-n_j}^j,\dotsc,k_{t-1}^j)^T\right) \\ + &= \pi_{n_j}\circ L_j^2 \cdot (k_{t-n_j}^j,\dotsc,k_{t-1}^j)^T \\ + &\vdots +\end{align*} +Mit Einsetzen können wir den Schlüsselstrom wiefolgt beschreiben: +\begin{align*} + k_t = f&\left(\pi_{n_1}\circ L_1^t(k_0^1,\dotsc,k_{n_1-1}^1)^T,\right. \\ + &\quad\vdots \\ + &\;\left.\pi_{n_m}\circ L_m^t(k_0^m,\dotsc,k_{n_m-1}^m)^T\right) +\end{align*} +Wir wissen, dass sich unsere boolesche Funktion \(f:\GF_2^m\to\GF_2\) als +über \(\GF_2[X_1,\dotsc,X_m]\) darstellen lässt, mit einem Maximalgrad +von \(1\) für alle Unbestimmten (d.\,i.\@ einfache Monome). Wir können +nun eine known-plaintext Attacke durchführen. Angenommen Teilschlüssel +\(k_i,\dotsc,k_{i+t}\) sind bekannt, dann müssen wir folgendes +Gleichungssystem lösen: +\begin{align*} + f\left(\pi_{n_1}\circ L_1^i(k_0^1,\dotsc,k_{n_1-1}^1)^T,\dotsc, + \pi_{n_m}\circ L_m^i(k_0^m,\dotsc,k_{n_m-1}^m)^T\right) &= k_i \\ + &\;\;\vdots \\ + f\left(\pi_{n_1}\circ L_1^{i+t}(k_0^1,\dotsc,k_{n_1-1}^1)^T,\dotsc, + \pi_{n_m}\circ L_m^{i+t}(k_0^m,\dotsc,k_{n_m-1}^m)^T\right) &= k_{i+t} \\ +\end{align*} +Der Grad des Gleichungssystems ist definiert als \(d := \deg(f)\) der des +Polynoms. Damit ist der Aufwand zum Lösung ungefähr \((n_{\text{tot}}^d)^3\) +mit der Gesamtlänge aller LFSRs \(n_{\text{tot}} := \sum n_i\). + +Unser Ziel ist es nun, den Grad dieses Gleichungssystems zu reduzieren. +Hierzu betrachten wir zunächst nur die Gleichungen für die Schlüsselbits +unseres bekannten Teilschlüssels \(k_i,\dots,k_{i+t}\) den Wert \(1\) +annehmen, also \(k_j=1\) mit \(i\leq j\leq i+t\). Finden wir ein +Annihilatorpolynom \(g\) von \(f\) mit \(\deg(g) < \deg(f)\), so, dass +\(f\cdot g=0\), d.\,i.\@ wenn \(f(x)=1 \Rightarrow g(x)=0\), dann gilt +\[ + f(x)g(x) = k_j g(x) \Leftrightarrow 0 = g(x) +\] +Um unsere Schlüsselkandidaten zu finden, ersetzen wir \(f\) durch \(g\) +und alle \(1\) durch \(0\). + +Betrachten wir das an dem Beispiel \(f(x_1,x_2) := x_1 x_2\), dann ist +\(g(x_1,x_2) := x_1\xor x_2\) Annihilator von \(f\). + +Analog lässt sich für die Gleichungen mit \(k_j=0\) der Grad reduzieren. +Hierfür sei \(g'\) Annihilator von \(f\xor 1\), also +\[ + f(x) \xor 1 = 1 \Leftrightarrow f(x) = 0 \Rightarrow g'(x) = 0 +\] +Es gilt dann auch wieder +\begin{align*} + &\; f(x) g'(x) = k_j g'(x) \\ + \Leftrightarrow&\; (f(x)\xor 1) g'(x) = (k_j\xor 1)g'(x) \\ + \Leftrightarrow&\; 0 = g'(x) +\end{align*} + +Wie finden wir aber Funktionen, für die solche Angriffe schwierig +umsetzbar sind? +\begin{definition} +Sei \(f:\GF_2^m\to\GF_2\) und die Menge aller Annihilatorkandidaten +\(A(f) := \{ g: \GF_2^m\to\GF_2 \mid fg = 0\}\), dann ist die +algebraische Immunität definiert als der kleinste Grad aller dieser +Polynome: +\[ + \AI(f) := \min\{\deg(g) \mid g\in A(f) \lor g\in A(f\xor 1)\} +\] +\end{definition} +Die Bestimmung der algebraischen Immunität im Allgemeinen sehr schwer. wir +können jedoch abschätzen. +\begin{theorem}[Courtois-Meier, 2003]\label{thm:cm2003} +Für alle \(f:\GF_2^m\to\GF_2\) ist +\[ + \AI(f) \leq \left\lceil\frac{m}{2}\right\rceil +\] +\end{theorem} +Für den Beweis benötigen wir erst noch zwei Lemmata. +\begin{lemma}\label{lem:cm2003-1} +Sei \(f:\GF_2^m\to\GF_2\). Dann existiert \(g:\GF_2^m\to\GF_2\) mit +\(g\neq 0\) und \(\deg(g) \leq \lceil m/2\rceil\) so, dass +\[ + \deg(f\cdot g) \leq \lceil m/2\rceil +\] +\end{lemma} +\begin{proof} +Wir erinnern uns an zwei Eigenschaften von Binomialkoeffizienten: +\[ + \binom{m}{k} = \frac{m!}{(m-k)!\cdot k!} = \frac{m!}{(m-k)!\cdot (m-(m-k))!} = \binom{m}{m-k} \\ +\] +\[ + \sum_{k=0}^m \binom{m}{k} = 2^m +\] +Und wir wissen, \(\binom{m}{k}\) ist die Anzahl \(k\)-elementiger Teilmengen +aus einer \(m\)-elementigen Menge. + +Nun betrachten wir die Menge \(A\) aller Monome mit einem Grad von Maximal +\(\lfloor m/2\rfloor\) und die Menge \(B\) der Multiplikation von \(f\) und +allen Monomen von Grad Maximal \(\lceil m/2\rceil\): +\begin{align*} + A &= \{ 1, x_1, x_2, \dotsc, x_1 x_2, \dotsc \} \\ + B &= \{ f(x), f(x)x_1, f(x) x_2, \dotsc \} +\end{align*} +Dann gilt für die Summe der Mächtigkeiten der Mengen +\begin{align*} + |A|+|B| &= \sum_{i=0}^{\left\lfloor \frac{m}{2}\right\rfloor} \binom{m}{i} + + \sum_{i=0}^{\left\lceil \frac{m}{2}\right\rceil } \binom{m}{i} \\ + &= \sum_{i=0}^m \binom{m}{i} + \binom{m}{\left\lfloor\frac{m}{2}\right\rfloor} \\ + &= 2^m + \binom{m}{\left\lfloor\frac{m}{2}\right\rfloor} > 2^m +\end{align*} +Wir wechseln jetzt die Betrachtung und sehen, dass die Menge der +booleschen Funktionen isomorph zu \(\Fn(\GF_2^m,\GF_2) \cong \GF_2^{2^m}\) +einem Vektorraum über \(\GF_2\) ist, da die booleschen Funktionen einem +multivariablem Polynom entsprechen, welches wiederum eindeutig zu Vektoren +abgebildet werden kann. Genauer hat \(f:\GF_2^m\to\GF_2\) eine eindeutige +Darstellung als Polynomfunktion +\[ + f(x) = \sum_{I\in\GF_2^m} a_I x^I +\] +mit Koeffizienten \(a_I\in\GF_2\) und \(x^I=x_1^{i_1}\cdot\dotsb\cdot x_m^{i_m}\) +für einen Potenzvektor \(I=(i_1,\dotsc,i_m)\). Wir können also die +boolesche Funktion mit den Koeffizienten \((a_{(0,\dotsc,0)},\dotsc,a_{(1,\dotsc,1)})\in\GF_2^{2^m}\) +identifizieren. +%TODO bei den vorherigen Kapiteln anpassen, man braucht tatsächlich nur +% Koeffs, nicht I +Damit ist die obige Menge \(A=\{(1,0,\dotsc,0),(0,1,0,\dotsc,0),\dotsc\}\) +linear unabhängig. Wir schreiben abkürzend \(m_i\) als das \(i\)-te +Monom, also \(m_1=1\), \(m_2=x_1\), usw\@. Da nun \(|A|+|B| > 2^m\), sind +die Vektoren linear abhängig, d.\,h.\@ es existieren +\[ + a_1,\dotsc,a_{|A|},b_1,\dotsc,b_{|B|} \in\GF_2^{|A|+|B|}\setminus\{(0,\dotsc,0)\} +\] +mit +\[ + \sum_{i=1}^{|A|} a_i m_i + \sum_{i=1}^{|B|} b_i f(x) m_i + \Leftrightarrow + \sum_{i=1}^{|A|} a_i m_i = f(x) \sum_{i=1}^{|B|} b_i m_i +\] +Wir wählen nun +\[ + g=\sum_{i=1}^{|B|} b_i m_i +\] +Nach Konstruktion der Menge \(B\) wissen wir, das \(\deg(g)\leq\lceil m/2\rceil\), +nach der Konstruktion der Menge \(A\), dass \(\deg(fg)\leq\lfloor m/2\rfloor\). +Darüber hinaus ist \(A\) linear unabhängig, es gilt somit +\[ + fg = \sum_{i=1}^{|A|} a_i m_i \neq 0 +\] +Und somit auch \(g\neq 0\). +\end{proof} + +\begin{lemma}\label{lem:cm2003-2} +%TODO im Skript steht fg = h != 0,g -- gemeint != 0 und != g? +Seien \(f,g,h: \GF_2^m\to\GF_2\) mit \(f\cdot g = h \neq 0\) und \(h\neq g\), +sowie für die Grade \(\deg(g),\deg(h) \leq d\). Dann existiert +\(g':\GF_2^m\to\GF_2\) mit \(\deg(g')\leq d\) und \(f\cdot g' = 0\). +\end{lemma} +\begin{proof} +Wegen \(f=f^2\) gilt +\[ + h=f\cdot g = f^2 \cdot g = f\cdot (f\cdot g) = f\cdot h +\] +Für \(g'=g\xor h\) erhalten wir damit +\[ + f\cdot g'=f\cdot (g\xor h) = f\cdot g\xor f\cdot h = f\cdot g\xor h = 0 +\] +Wobei \(\deg(g') \leq \max\{\deg(g), \deg(h)\} \leq d\). +\end{proof} + +\begin{proof}[Beweis von Satz~\ref{thm:cm2003}] +Nach Lemma~\ref{lem:cm2003-1} existiert \(g\neq 0\) dessen Grad +\(\deg(g) \leq \lceil m/2\rceil\) so, dass \(\deg(f\cdot g)\leq\lceil m/2\rceil\). +Wir unterscheiden nun drei Fälle: +\begin{enumerate} +\item \(f\cdot g = 0\). Dann folgt die Behauptung sofort. +\item \(h \neq f\cdot g \neq 0\) und \(h\neq g\). Dann sind die Voraussetzungen + für Lemma~\ref{lem:cm2003-2} gegeben. Da die Grade \(\deg(g),\deg(h)\leq\lceil m/2\rceil\) + existiert also ein \(g'\) mit \(\deg(g')\leq\lceil m/2\rceil\) und + \(f\cdot g'=0\). +\item Ist nun \(h:=f\cdot g\neq 0\), jedoch \(h=g\), dann gilt \(f\cdot g=g\) + und damit auch + \[ + (f\xor 1)\cdot g = f\cdot g \xor g = g\xor g = 0 + \] + Somit ist \(g\) also ein Annihilator von \(f\xor 1\) und es folgt auch + hier die Behauptung. +\end{enumerate} +\end{proof} \end{document} diff --git a/template.tex b/template.tex index 28434dbe27f2a41f61c4d83dd40e5a84349b0100..150a3e8cc9fdfca059a3ff737beaf823ccea80da 100644 --- a/template.tex +++ b/template.tex @@ -16,6 +16,7 @@ \DeclareMathOperator{\Gen}{Gen} \DeclareMathOperator{\Dec}{Dec} \DeclareMathOperator{\Enc}{Enc} +\DeclareMathOperator{\AI}{AI} \newcommand{\Diff}{\Delta}