Skip to content
Snippets Groups Projects
Commit 17a77850 authored by koenigl's avatar koenigl
Browse files

add stream-algebraic

parent 499b6586
No related branches found
No related tags found
No related merge requests found
...@@ -1450,7 +1450,7 @@ mehrere kombinieren und eine Auswahlfunktion \(f\) auf die Ausgaben der einzelne ...@@ -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 LFSRs anwenden, die für jedes Output-Bit der Gesamtchiffre spezifiziert, welches
LFSR konkret verwendet wird. 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 geheimzuhalten. Wir werden nun sehen, dass wir anhand eines Schlüsselstroms ein
entsprechendes LFSR bauen können -- dadurch also nichts gewonnen ist. Hierzu entsprechendes LFSR bauen können -- dadurch also nichts gewonnen ist. Hierzu
betrachten wir nun was es bedeutet, wenn ein LFSR maximale Periode hat um betrachten wir nun was es bedeutet, wenn ein LFSR maximale Periode hat um
...@@ -1555,7 +1555,7 @@ Wir wissen also: ...@@ -1555,7 +1555,7 @@ Wir wissen also:
Hierbei ist \(\Tr(\alpha)\) die Spur (Trace) von \(\alpha\). Hierbei ist \(\Tr(\alpha)\) die Spur (Trace) von \(\alpha\).
Während \(\Tr\) unabhängig von jedem LFSR ist, beschreibt die Nullstelle die 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: \(\theta\)? Hierzu nutzen wir die uns bekannten Schlüsselbits und setzen ein:
\begin{align*} \begin{align*}
0 &= k_0 0 &= k_0
...@@ -1734,15 +1734,15 @@ korrelieren): ...@@ -1734,15 +1734,15 @@ korrelieren):
\] \]
Dann wäre ein known-plaintext Angriff mit bekanntem Ausschnitt des 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 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 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: der Gesamtkonstruktion:
\[ \[
p' := \frac{|\{j\in{i,\dotsc,i+t-1} \mid k_j^1 = k_i \}|}{2^t} 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 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. 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}\) 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 ...@@ -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} \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 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 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\) 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 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 \(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\). \(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: beschränkt:
\begin{align*} \begin{align*}
g_\alpha: &\;\GF_2^t \to \GF_2 \\ g_\alpha: &\;\GF_2^t \to \GF_2 \\
...@@ -1779,7 +1779,7 @@ verhindern können. ...@@ -1779,7 +1779,7 @@ verhindern können.
\begin{definition} \begin{definition}
Sei \(t\leq m\). Eine Funktion \(f:\GF_2^m\to\GF_2\) heißt 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\) \(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} \Pr(f(x_1,\dotsc,x_m) = \langle\alpha,x\rangle) = \frac{1}{2}
\] \]
...@@ -1811,6 +1811,223 @@ entsprechend groß gewählt werden. ...@@ -1811,6 +1811,223 @@ entsprechend groß gewählt werden.
\subsection{Algebraische Angriffe} \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} \end{document}
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
\DeclareMathOperator{\Gen}{Gen} \DeclareMathOperator{\Gen}{Gen}
\DeclareMathOperator{\Dec}{Dec} \DeclareMathOperator{\Dec}{Dec}
\DeclareMathOperator{\Enc}{Enc} \DeclareMathOperator{\Enc}{Enc}
\DeclareMathOperator{\AI}{AI}
\newcommand{\Diff}{\Delta} \newcommand{\Diff}{\Delta}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment