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}