diff --git a/main.tex b/main.tex index f7e16d4fc573fb1627b82bf4ca3cd5eeb11f7494..3734d7c98dfeac9f6c5f000d703e9a41f0d6d2a7 100644 --- a/main.tex +++ b/main.tex @@ -1446,7 +1446,7 @@ direkt einen \(n\) langen Teil des Schlüsselstroms errechnen: \] Mit diesem lassen sich dann auch die Nachfolger (und Vorgänger) berechnen. Wir nutzen also LFSRs nur als Bausteine für eine komplette Chiffre, indem wir -mehrere kombinieren und eine Auswahlfunktion \(f\) auf die Ausgaben der einzelnen +mehrere kombinieren und eine Kombinierfunktion \(f\) auf die Ausgaben der einzelnen LFSRs anwenden, die für jedes Output-Bit der Gesamtchiffre spezifiziert, welches LFSR konkret verwendet wird. @@ -1455,7 +1455,7 @@ geheimzuhalten. Wir werden nun sehen, dass wir anhand eines Schlüsselstroms ei entsprechendes LFSR bauen können -- dadurch also nichts gewonnen ist. Hierzu betrachten wir nun was es bedeutet, wenn ein LFSR maximale Periode hat um dann bei gegebenen Bitstrom die Koeffizienten bestimmen zu können. Abschließend -werden wir uns dann mit der Auswahlfunktion beschäftigen, und welche Angriffe es +werden wir uns dann mit der Kombinierfunktion beschäftigen, und welche Angriffe es darauf gibt. \paragraph{Rekursive Beschreibung von LFSRs} @@ -1692,12 +1692,12 @@ 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 +kombinieren und eine Kombinierfunktion 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\): +Kombinierfunktion \(f:\GF_2^m\to\GF_2\): %TODO Grafik -Was sind aber Kriterien für eine \enquote{gute} Auswahlfunktion? Erstmal +Was sind aber Kriterien für eine \enquote{gute} Kombinierfunktion? 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, @@ -2030,4 +2030,222 @@ Wir unterscheiden nun drei Fälle: \end{enumerate} \end{proof} +\section{Effiziente Berechnung kryptographischer Gütekriterien} + +Nachdem wir uns mit den einzelnen Chiffren, Angriffen auf diesen und +Kriteren für die Durchführbarkeit dieser beschäftigt haben, möchten wir +uns nun ansehen wie wir \emph{effizient} die Qualität einer Chiffre +berechnen können (also ohne einen gesamten Angriff zu fahren oder zu +simulieren). Einige Kriterien für die Güte haben wir dabei schon +kennengelernt, wie den Grad einer booleschen Funktion, die Möglichkeiten +der Approximation von \(f\) durch lineare Funktionen, die stochastische +Verteilung von \(f\), Korrelationsimmunität, Immunität gegen differenzielle +Attacken, noch nicht (direkt) jedoch das Avalanche-Kriterium. +Wir werden nun auf einige dieser detaillierter eingehen. + +\subsection{Algebraische Normalform} +Gucken wir uns die Problematik ersteinmal an einem Beispiel an und +betrachten \(f(x_1,x_2)=x_1\cdot x_2\xor 1\). Durch Auswertung erhält man +die Wertetabelle von \(f\): \(f(0,0)=1\), \(f(0,1)=1\), \(f(1,0)=1\) und +\(f(1,1)=0\). Wir fragen uns wie man aus der Wertetabelle die +Polynomdarstellung -- ud damit den algebraischen Grad -- von \(f\) +bestimmt. Unser Ansatz ist eine Basistransformation durchzuführen. + +Die Menge der booleschen Funktionen \(\Fn(\GF_2^n,\GF_2)\cong\GF_2^{2^n}\) +isomorph zu einem Vektorraum über den \(\GF_2\). Die Basis für die +Darstellung über Wertetabelle ist \(\Base_W = \{\chi_p \mid p\in\GF_2^n\}\), +während die für die Darstellung über Polynome +\(\Base_P = \{x_i^{i_1}\dotsb x_n^{i_n} \mid i_1,\dotsc,i_n\in\GF_2\}\) ist. +Wir führen nun einen Basiswechsel durch, über die Matrix: +\[ + S_n = \bigotimes_{i=1}^n S_1, \qquad + S_1 = \begin{pmatrix} + 1 & 0 \\ + 1 & 1\end{pmatrix} +\] +D.\,h.\@ bspw.\@ für \(S_2\): +\[ + S_2 = \begin{pmatrix} + 1\cdot S_1 & 0\cdot S_1 \\ + 1\cdot S_1 & 1\cdot S_1 + \end{pmatrix} = \begin{pmatrix} + 1 & 0 & 0 & 0 \\ + 1 & 1 & 0 & 0 \\ + 1 & 0 & 1 & 0 \\ + 1 & 1 & 1 & 1 \end{pmatrix} +\] + +Beispielsweise für \(f(x_1,x_2)=x_1 x_2\xor 1\) gilt +\[ + f=\begin{pmatrix} + f(0,0) \\ + f(0,1) \\ + f(1,0) \\ + f(1,1)\end{pmatrix} = \begin{pmatrix} + 1 \\ + 1 \\ + 1 \\ + 0 \end{pmatrix} +\] +Also \(f=1\chi_{00} + 1\chi_{01} + 1\chi_{10} + 0\chi_{11}\). +Umgekehrt gilt +\[ + S_2 \cdot f = S_2 \cdot \begin{pmatrix} + 1 \\ + 1 \\ + 1 \\ + 0 \end{pmatrix} = \begin{pmatrix} + 1 \\ + 0 \\ + 0 \\ + 1 \end{pmatrix} +\] +Die Polynomdarstellung von \(f\) ist somit +\[ + f = 1x_1^0 x_2^0 + 0x_1^0 x_2^1 + 0x_1^1 x_2^1 + 1x_1^1 x_2^1 +\] +Der Aufwand für die berechnung ist der einer \(2^n\times 2^n\)-Matrix und +\(2^n\)-Vektor, dementsprechend \(2^{2n}\) Operationen. Mit der schnellen +Fouriertransformation ist dies sogar reduzierbar auf \(n2^n\) Operationen. + +\subsection{Approximation durch lineare Funktionen} + +Bei einer linearen Attacke auf Blockchiffre haben wir die lineare Approximationen +für die linearen Abbildungen der nichtlinearen S-Boxen \(\GF_2^n\to\GF_2^m\) gesucht, +bei Stromchiffren ging es um die booleschen Funktionen der nichtlinearen +Kombinierfunktionen \(\GF_2^n\to\GF_2\). Die Grundidee war die selbe, wir +finden eine Relation \((\alpha,\beta)\) mit +\[ + \Pr(\langle\alpha, x\rangle = \langle\beta,f(x)\rangle) = p \neq \frac{1}{2} +\] + +Wir betrachten im ersten Schritt nur Funktionen \(f:\GF_2^n\to\GF_2\) (also +für Stromchiffren). +\begin{definition} +Sei \(f:\GF_2^n\to\GF_2\). Wir nennen nun \(\hat{f}\) die Fouriertransformierte +von \(f\) mit +\begin{align*} + \hat{f}: &\GF_2^n\to\mathbb{Z} \\ + &\alpha\mapsto\sum_{x\in\GF_2^n} (-1)^{\langle\alpha,x\rangle} f(x) +\end{align*} +und \(\hat{\chi}_f\) die \textbf{Walshtransformierte} von \(f\) mit +\begin{align*} + \hat{\chi}_f: &\GF_2^n\to\mathbb{Z} \\ + &\alpha\mapsto\sum_{x\in\GF_2^n} (-1)^{\langle\alpha,x\rangle\xor f(x)} +\end{align*} +Hierbei ist \(\hat{\chi}_f\) die Fouriertransformierte von +\(\chi_f(x)=(-1)^{f(x)}\). +\end{definition} + +Wir können mit der Walshtransformierten viele Informationen über \(f\) +gewinnen, so misst \(\hat{\chi}_f(0)\) die Verteilung von \(f\): +\[ + \hat{\chi}_f(0) = \sum_{x\in\GF_2} (-1)^{f(x)} + = |\{x \mid f(x) = 0 \}| - |\{x \mid f(x) = 1 \}| +\] +Ist \(\hat{\chi}_f(0)=0\) ist \(f\) gleichverteilt. + +Die Auswertung \(\hat{\chi}_f(\alpha)\) misst dagegen die Übereinstimmung +von \(f\) mit der linearen Abbildung \(x\mapsto\langle\alpha,x\rangle\): +\[ + \hat{\chi}_f(\alpha) = \sum_{x\in\GF_2^n} (-1)^{\langle\alpha,x\rangle \xor f(x)} + = |\{ x\mid \langle\alpha, x\rangle = f(x)\}| - |\{x\mid \langle\alpha, x\rangle \neq f(x)\}| +\] + +Es gilt also \(-2^n\leq\hat{\chi}_f(\alpha)\leq 2^n\) mit +\(\hat{\chi}_f(\alpha)=2^n\), wenn \(f=\langle\alpha,\cdot\rangle\) und +\(\hat{\chi}_f(\alpha)=-2^n\), wenn \(f=\langle\alpha,\cdot\rangle\xor 1\). +Unser Ziel ist es nun \(f\) zu finden mit keiner Übereinstimmung, also +\(\hat{\chi}_f(\alpha)=0\). Dann gilt \(\Pr(\langle\alpha,x\rangle=f(x))=\frac{1}{2}\), +d.\,h.\@ \(f\) ist nicht durch \(\langle\alpha,\cdot\rangle\) approximierbar. +Nur: Geht das für alle Relationen \(\alpha\in\GF_2^n\)? +\begin{theorem}[Parseval]\label{thm:parseval} +Für alle booleschen Funktionen \(f:\GF_2^n\to\GF_2\) gilt +\[ + \sum_{\alpha\in\GF_2^n} \hat{\chi}_f(\alpha)^2 = 2^{2n} +\] +\end{theorem} +Die Antwort lautet also nein. Für den Beweis benötigen wir aber erst +folgendes Lemma. +\begin{lemma}\label{lem:parseval-1} +Lineare Funktionen ungleich Null, die von \(\GF_2^n\) auf \(\GF_2\) abbilden, +sind gleichverteilt, d.\,h.: +\[ + \forall\alpha\in\GF_2^n: \sum_{x\in\GF_2^n} (-1)^{\langle\alpha,x\rangle} + = \begin{cases} 0, &\alpha \neq 0 \\ + 2^n, &\text{sonst} + \end{cases} +\] +\end{lemma} +\begin{proof} +Wir unterscheiden zwei Fälle. Betrachten wir erstmal den Nullvektor +\(\alpha=(0,\dotsc,0)\in\GF_2^n\), dann gilt +\[ + \sum_{x\in\GF_2^n} (-1)^{\langle (0,\dotsc,0),x\rangle} + = \sum_{x\in\GF_2^n} (-1)^0 = 2^n +\] + +Nun alle anderen Vektoren \(\alpha\in\GF_2^n\setminus\{(0,\dotsc,0)\}\). Dann +existiert \(c\in\GF_2^n\) mit \(\langle\alpha,c\rangle\neq 0\). Seien weiter +die Meng der Werte, sodass \(\alpha\) auf Null abbildet +\(F_0 := \{ x \mid \langle \alpha,x\rangle = 0 \}\) und analog +\(F_1 := \{ x \mid \langle \alpha,x\rangle = 1 \}\). Es gilt \(F_0\cup F_1=\GF_2^n\). +Wir müssen also \(|F_0|=|F_1|\) zeigen. Zunächst gilt: +\begin{align*} + \langle\alpha,x\rangle = 0 \Leftrightarrow + \langle\alpha,x\xor c\rangle = \langle\alpha,x\rangle\xor\langle\alpha,c\rangle = 0 \xor 1 = 1 +\end{align*} +Also ist die Abbildung \(f:F_0\to F_1\) mit \(x\mapsto x\xor c\) wohldefiniert. +Die Umkehrabbildung lautet, wegen \(c\xor c = 0\), schlicht \(f:F_1\to F_0\) +mit ebenfalls \(x\mapsto x\xor c\). Somit ist \(f\) also bijektiv und es +folgt die Behauptung. +\end{proof} +\begin{proof}[Beweis von \ref{thm:parseval}] +Es gilt +\begin{align*} + \sum_{\alpha\in\GF_2^n} \hat{\chi}_f(\alpha)^2 + &= \sum_{\alpha\in\GF_2^n} \left( \sum_{x\in\GF_2^n} (-1)^{\langle\alpha,x\rangle\xor f(x)} \right)^2 \\ + &= \sum_{\alpha\in_GF_2^n} \left( \sum_{x\in\GF_2^n} (-1)^{\langle\alpha,x\rangle\xor f(x)} \cdot + \sum_{y\in\GF_2^n} (-1)^{\langle\alpha,y\rangle\xor f(y)} \right) \\ + &= \sum_{x\in\GF_2^n} (-1)^{f(x)} \sum_{y\in\GF_2^n} (-1)^{f(y)} \sum_{\alpha\in\GF_2^n} (-1)^{\langle\alpha,x\xor y\rangle} +\end{align*} +Aus Lemma~\ref{lem:parseval-1} folgt +\[ + \sum_{a\in\GF_2^n} (-1)^{\langle\alpha,x\xor y\rangle} = + \begin{cases} + 0, & x\xor y \neq 0 \\ + 2^n, & x=y + \end{cases} +\] +Das heißt: +%TODO check whether \chi_f or not \hat{\chi}_f +\begin{align*} + \sum_{a\in\GF_2^n} \chi_f(\alpha)^2 + &= \sum_{x\in\GF_2^n} (-1)^{f(x)} \sum_{\substack{y\in\GF_2^n\\x=y}} (-1)^f(y) 2^n \\ + &= 2^n \sum_{x\in\GF_2^n} (-1)^{f(x)\xor f(x)} = 2^n 2^n = 2^{2n} +\end{align*} +\end{proof} + +Wir haben mehrere Folgerungen vom Satz von Parseval~\ref{thm:parseval}. +\begin{theorem} +Es gibt keine \(n\)-resilienten Funktionen. +\end{theorem} +\begin{proof} +Wäre \(f:\GF_2^n\to\GF_2\) eine \(n\)-resiliente Funktion, dann folgte +\(\hat{\chi}_f(\alpha) = 0\) für alle linearen Relationen \(\alpha\in\GF_2^n\). +\end{proof} +\begin{theorem} +Ist \(f:\GF_2^n\to\GF_2\) eine \(n-1\)-resiliente Funktion, dann ist +\(f\) affin. +\end{theorem} +\begin{proof} +Da die Funktion gleichverteilt ist, bedeutet das, dass \(\hat{\chi}_f(0)=0\). +Da \(n-1\)-kor\-re\-la\-ti\-ons\-im\-mun, ist \(\hat{\chi}_f(\alpha)=0\) für alle +\(\alpha\in\GF_2^n\) für die \(|\alpha|\leq n-1\) gilt. Nach Parseval muss +gelten \(\hat{\chi}_f(1,\dotsc,1)=\pm 2^n\). Damit wäre +\(f=\langle(1,\dotsc,1),\cdot\rangle\) oder +\(f=\langle(1,\dotsc,1),\cdot\rangle\xor 1\). +\end{proof} + + \end{document} diff --git a/template.tex b/template.tex index 150a3e8cc9fdfca059a3ff737beaf823ccea80da..a0260091cc3040d9875d2de640a9c13385369983 100644 --- a/template.tex +++ b/template.tex @@ -28,6 +28,7 @@ \newcommand{\GF}{\mathbb{F}} \newcommand{\Fn}{\mathcal{F}} \newcommand{\Idx}{\mathcal{I}} +\newcommand{\Base}{\mathcal{B}} \usepackage{iftex}