diff --git a/main.tex b/main.tex
index 3734d7c98dfeac9f6c5f000d703e9a41f0d6d2a7..79b96e7e4cce791d3e255f30c7818dcbbdfa5e4e 100644
--- a/main.tex
+++ b/main.tex
@@ -2119,6 +2119,7 @@ finden eine Relation \((\alpha,\beta)\) mit
 	\Pr(\langle\alpha, x\rangle = \langle\beta,f(x)\rangle) = p \neq \frac{1}{2}
 \]
 
+\paragraph{Boolesche Funktionen}
 Wir betrachten im ersten Schritt nur Funktionen \(f:\GF_2^n\to\GF_2\) (also
 für Stromchiffren).
 \begin{definition}
@@ -2247,5 +2248,254 @@ gelten \(\hat{\chi}_f(1,\dotsc,1)=\pm 2^n\).  Damit wäre
 \(f=\langle(1,\dotsc,1),\cdot\rangle\xor 1\).
 \end{proof}
 
+Weiterhin zeigt der Satz von Parseval, dass wenn für eine lineare Relation
+\(\alpha\in\GF_2^n\) gilt, dass \(\hat{\chi}_f(\alpha)^2=0\), muss für
+andere \(\alpha'\) der Wert \(\hat{\chi}_f(\alpha')^2\) größer sein.  Ist
+nun \(\hat{\chi}_f(\alpha')^2\) groß, heißt dass, \(f\) ist durch
+\(\langle\alpha',\cdot\rangle\) oder \(\langle\alpha',\cdot\rangle\xor 1\)
+approximierbar.  Anstatt also zu versuchen gegen eine konkrete lineare
+Relation zu optimieren, ist es sinnvoller, für alle \(\alpha\) den Wert
+\(\hat{\chi}_f(\alpha)^2\) zu minimieren, also
+\[
+	\hat{\chi}_f(\alpha)^2=2^n \quad\text{bzw.}\quad \hat{\chi}_f(\alpha)=\pm 2^{\frac{n}{2}}
+\]
+Wir möchten nun uns genau solche Funktionen genauer ansehen.
+
+\begin{definition}
+Eine Funkton \(f:\GF_2^n\to\GF_2\) heißt \textbf{Bentfunktion} (oder auch krumm),
+wenn für alle \(\alpha\in\GF_2^n\) gilt
+\[
+	\hat{\chi}_f(\alpha)=\pm 2^{n/2}
+\]
+\end{definition}
+Wie schon vorher, möchten wir ersteinmal herausfinden, ob es solche Funktionen
+gibt.  Dafür gucken wir uns an, wie wir eine solche Funktion aus gegebenen Funktionen
+konstruieren können.
+\begin{theorem}
+Sei \(n=2m\geq 2\) gerade, \(\pi:\GF_2^m\to\GF_2^m\) eine bijektive Permutation,
+und \(g:\GF_2^m\to\GF_2\) beliebig.  Dann ist die Funktion
+\begin{align*}
+	f: &\GF_2^n\to\GF_2 \\
+	   &(x,y) \mapsto \langle \pi(x),y\rangle\xor g(x)
+\end{align*}
+eine Bentfunktion.
+\end{theorem}
+\begin{proof}
+Es gilt für alle \(\alpha=(\alpha_1,\alpha_2)\in\GF_2^m\times\GF_2^m\):
+%TODO typeset cases cleaner
+\begin{align*}
+	   \hat{\chi}_f(\alpha)
+	&= \sum_{(x,y)\in\GF_2^n} (-1)^{\langle(\alpha_1,\alpha_2),(x,y)\rangle\xor f(x,y)} \\
+	&= \sum_{(x,y)\in\GF_2^n} (-1)^{\langle\alpha_1,x\rangle \xor \langle\alpha_2,y\rangle \xor \langle\pi(x),y\rangle \xor g(x)} \\
+	&= \sum_{(x,y)\in\GF_2^n} (-1)^{\langle\alpha_1,x\rangle \xor \langle\pi(x)\xor\alpha_2,y\rangle \xor g(x)} \\
+	&= \sum_{x\in\GF_2^m} (-1)^{\langle\alpha_1,x\rangle \xor g(x)} \cdot \sum_{y\in\GF_2^m} (-1)^{\langle\pi(x)\xor\alpha_2,y\rangle} \\
+	&= \sum_{x\in\GF_2^m} (-1)^{\langle\alpha_1,x\rangle \xor g(x)} \cdot \begin{cases} 0, &\pi(x)\neq\alpha_2\\ 2^m, &\text{sonst}\end{cases}
+		&& \mid \text{nach \ref{lem:parseval-1}} \\
+	&= \sum_{\substack{x\in\GF_2^m\\ \pi(x)=\alpha_2}} (-1)^{\langle\alpha_1,x\rangle \xor g(x)} \cdot 2^m \\
+	&= (-1)^{\langle\alpha_1,\pi^{-1}(\alpha_2)\rangle \xor g(\pi^{-1}(x))} \cdot 2^m \\
+	&= \pm 2^m = \pm 2^{\frac{n}{2}}
+\end{align*}
+\end{proof}
+
+Wir möchten uns nun die genaueren Eigenschaften von Bentfunktionen angucken.
+\begin{theorem}
+Bentfunktionen sind nicht gleichverteilt.
+\end{theorem}
+\begin{proof}
+Wie wir schon bei der Interpreation der Walshtransformierten gesehen haben, gilt:
+\begin{align*}
+	   \hat{\chi}_f(0)
+	&= |\{ x \mid f(x) = 0\} | - |\{x \mid f(x) = 1\}| \\
+	&= 2^n \cdot (\Pr(f=0) - \Pr(f=1)) \\
+	&= 2^n \cdot (\Pr(f=0) - (1-\Pr(f=0)) \\
+	&= 2^n \cdot (2\Pr(f=0) -1) \\
+	&= 2^{n+1} \cdot \Pr(f=0) - 2^n
+\end{align*}
+Da für eine Bentfunktion gilt \(\hat{\chi}_f(0) = \pm 2^{n/2}\), folgt damit
+\[
+	\Pr(f=0) = \frac{1}{2} \pm \frac{2^{\frac{n}{2}}}{2^{n+1}} = \frac{1}{2} \pm \frac{1}{2^\frac{n}{2} +1}
+\]
+Das heißt Bentfunktion weichen -- geringfügig -- von der Gleichverteilung ab!
+\end{proof}
+Es gibt noch eine weitere Aussage über den algebraischen Grad, die wir aber ohne Beweis
+lassen.
+\begin{theorem}
+Eine Bentfunktion auf \(\GF_2^n\) hat höchstens einen algebraischen Grad von
+\(n/2 + 1\).
+\end{theorem}
+
+\paragraph{Boolesche Abbildungen}
+
+Betrachten wir nun boolesche Abbildungen \(f:\GF_2^n\to\GF_2^m\).  Hierzu definieren
+wir die Indikatorfunktion (oder charakteristische Funktion) um das Problem auf das
+von booleschen Funktionen zurückzuführen.
+\begin{align*}
+	I_f: &\GF_2^n\times\GF_2^m \to\GF_2 \\
+	     &(x,y) \mapsto \begin{cases} 1, &y=f(x)\\ 0, &\text{sonst}\end{cases}
+\end{align*}
+Für die Fouriertransformierte der Indikatorfunktion gilt bspw.:
+\begin{align*}
+	   \hat{I}_f(\alpha,\beta)
+	&= \sum_{(x,y)\in\GF_2^n\times\GF_2^m} I_f(x,y) (-1)^{\langle (\alpha,\beta), (x,y) \rangle} \\
+	&= \sum_{\substack{(x,y)\in\GF_2^n\times\GF_2^m\\ y=f(x)}} (-1)^{\langle\alpha,x\rangle\xor\langle\beta,y\rangle} \\
+	&= \sum_{x\in\GF_2^n} (-1)^{\langle\alpha,x\rangle \xor \langle\beta,f(x)\rangle}
+\end{align*}
+Die Fouriertransformierte der Indikatorfunktion \(\hat{I}_f(\alpha,\beta)\) misst
+also, ob sich eine boolsche Abbildung \(f\) über die Relation \((\alpha,\beta)\)
+approximieren lässt.  Die Sätze und Definition zu Booleschen Funktionen und den
+Walshtransformierten lassen sich nun analog übertragen.
+
+\paragraph{Berechnung der Fourier- und Walshtransformierten}
+
+Möchten wir nun die Fourier- bzw.\@ Walshtransformierten benutzen um Konstruktionen
+zu bewerten, müssen wir uns auch angucken, wir wir (effizient) diese Transformationen
+durchführen können.  Die naive Berechnung von Fouriertransformierten \(\hat{f}\) einer
+Booleschen Funktion \(f:\GF_2^n\to\GF_2\) bedeutet einen Aufwand für jedes \(\alpha\in\GF_2^n\)
+von ungefähr \(2^n\) (Addition der Werte) und somit einen Gesamtaufwand von ca.\@
+\(2^n \cdot 2^n=2^{2n}\).
+
+Wir sehen uns nun die Eigenschaften der Fouriertransformation an, um eine effizientere
+Berechnung zu finden.  Die Abbildung die einer booleschen Funktion ihre Fouriertransformierte
+zuweist \(\Fn(\GF_2^n,\GF_2)\to\Fn(\GF_2^n,\GF_2)\) mit \(f\mapsto\hat{f}\) ist linear
+(Übungsaufgabe).  Wir beschreiben diese Abbildung als Matrix, sodass \(\hat{f}=H_n(f)\) mit
+\[
+	H_n = \bigotimes_{i=1}^n H_1, \qquad H_1 = \begin{pmatrix}1 & 1\\ 1 & -1\end{pmatrix}
+\]
+Bspw.\@ ist dann
+\[
+	H_2 = \begin{pmatrix*}[r]
+    	 1 &  1 &  1 &  1 \\
+    	 1 & -1 &  1 & -1 \\
+    	 1 &  1 & -1 & -1 \\
+	 1 & -1 & -1 &  1 \end{pmatrix*}
+\]
+Und für die Funktion \(f:\GF_2^2\to\GF_2\) mit \((x_1,x_2)\mapsto 1\xor x_1 x_2\) gilt:
+\[
+	\begin{pmatrix}
+    	\hat{f}(0,0) \\
+    	\hat{f}(0,1) \\
+    	\hat{f}(1,0) \\
+	\hat{f}(1,1) \end{pmatrix} = \begin{pmatrix*}[r]
+    	 1 &  1 &  1 &  1 \\
+    	 1 & -1 &  1 & -1 \\
+    	 1 &  1 & -1 & -1 \\
+	 1 & -1 & -1 &  1 \end{pmatrix*} \cdot \begin{pmatrix}
+	f(0,0) \\
+	f(0,1) \\
+	f(1,0) \\
+	f(1,1) \end{pmatrix} = \begin{pmatrix}
+	 3 \\
+	 1 \\
+	 1 \\
+	-1 \end{pmatrix}
+ \]
+Der Aufwand ist zwar immernoch \(2^{2n}\), mittels Fast Fourier Transformationen jedoch
+nur noch \(n\cdot 2^n\) -- damit können wir auch deutlich größere \(n\) verarbeiten.
+
+\paragraph{Weitere kryptographische Gütekriterien -- Avalanche-Kriterium}
+
+Mittels der FFT können auch weitere Kriterien effizienter bestimmt werden, wie bspw.\@
+das Avalanche-Kriterium welches Aussagen trifft über die Unterschiede zwischen zwei
+Ciphertexten bei sehr ähnlichen Plaintexten.  In anderen Worten, ist unsere Chiffre eine
+Abbildung \(f:\GF_2^n\to\GF_2^m\), dann soll eine kleine Änderung (d.\,i.\@ ein Bit) in
+der Eingabe eine Änderung von \SI{50}{\percent} der Ausgabebits bewirken.  Formal
+ausgedrückt, gucken wir uns die Ausgabe des \(i\)-ten Bits als Projektion an
+\(f_i := \pi_i \circ f\) an, dann sollte die Wahrscheinlichkeit, dass dieses Bit bei einer
+Änderung an der \(j\)-ten Stelle gleich bleibt, \(1/2\) betragen:
+\[
+	\Pr(f_i(x) = f_i(x\xor e_j)) = \frac{1}{2}, \quad e_j := (0,\dotsc,0,\underbrace{1}_j,0\dotsc,0), \quad j\leq n
+\]
+Anders formuliert, soll die Wahrscheinlichkeit, dass die Bits gleich sind, oder die Bits
+unterschiedlich, gleich sein, d.\,h.:
+\[
+	C_{f_i}(e_j) := \Pr(f_i(x) = f_i(x\xor e_j)) - \Pr(f_i(x) \neq f_i(x\xor e_j)) = 0
+\]
+
+\begin{theorem}\label{thm:avalanche}
+Für alle booleschen Funktionen \(f:\GF_2^n\to\GF_2\) können wir diese Änderungswahrscheinlichkeit
+mit dem Faltungsoperator \(\star\) ausdrücken:
+\[
+	C_f(a) = \frac{1}{2^n} \sum_{x\in\GF_2^n} \chi_f(x\xor a)\chi_f(x) =: \frac{1}{2^n} (\chi_f\star\chi_f(a))
+\]
+\end{theorem}
+\begin{proof}
+Es gilt
+\begin{align*}
+	   C_f(a)
+	&= \Pr(f=f(\cdot\xor a)) - \Pr(f\neq f(\cdot\xor a)) \\
+	&= \frac{1}{2^n} \sum_{x\in\GF_2^n} (-1)^{f(x\xor a)\xor f(x)} \\
+	&= \frac{1}{2^n} \sum_{x\in\GF_2^n} \chi_f(x\xor a)\chi_f(x) = \frac{1}{2^n} (\chi_f\star\chi_f(a))
+\end{align*}
+\end{proof}
+Wir fragen uns nun, wie man die Faltung effizient berrechnet.
+\begin{lemma}\label{lem:avalanche-eff}
+Seien \(f,g: \GF_2^n\to\GF_2\), dann gilt erstens, dass \(\hat{\hat{f}} = 2^n\cdot f\) und
+weiter, dass \(\widehat{f\star g} = \hat{f}\cdot \hat{g}\).
+\end{lemma}
+\begin{proof}
+Wir zeigen erstmal die erste Aussage:
+\begin{align*}
+	   \hat{\hat{f}}(x)
+	&= \sum_{\alpha\in\GF_2^n} (-1)^{\langle\alpha,x\rangle} \hat{f}(L) \\
+	&= \sum_{\alpha\in\GF_2^n}\sum_{y\in\GF_2^n} (-1)^{\langle\alpha,x\rangle} (-1)^{\langle\alpha,y\rangle} f(y) \\
+	&= \sum_{y\in\GF_2^n} f(y) \sum_{\alpha\in\GF_2^n} (-1)^{\langle\alpha,(x\xor y)\rangle} \\
+	&= \sum_{y\in\GF_2^n} f(y) \cdot \begin{cases} 2^n, &x=y\\ 0, &\text{sonst}\end{cases}
+	    && \mid \text{nach \ref{lem:parseval-1}} \\
+	&= 2^n \cdot f(x)
+\end{align*}
+
+Nun die zweite Aussage:
+\begin{align*}
+	   \widehat{f\star g}(\alpha)
+	&= \sum_{x\in\GF_2^n} (-1)^{\langle\alpha,x\rangle} (f\star g)(x) \\
+	&= \sum_{x\in\GF_2^n}\sum_{a\in\GF_2^n} (-1)^{\langle\alpha,x\rangle} f(a)g(x\xor\alpha) \\
+	&= \sum_{a\in\GF_2^n} f(a) \left( \sum_{x\in\GF_2^n} (-1)^{\langle\alpha,x\rangle} g(x\xor a) \right) \\
+	&= \sum_{a\in\GF_2^n} f(a) \sum_{y\in\GF_2^n} (-1)^{\langle\alpha,(y\xor a)\rangle} g(y) \\
+	&= \sum_{a\in\GF_2^n} f(a) \left( \sum_{y\in\GF_2^n} (-1)^{\langle\alpha,y\rangle} g(y) \right) (-1)^{\langle\alpha,a\rangle} \\
+	&= \left( \sum_{a\in\GF_2^n} (-1)^{\langle\alpha,a\rangle} f(a) \right) \hat{g}(\alpha) \\
+	&= \hat{f}(\alpha)\cdot \hat{g}(\alpha)
+\end{align*}
+\end{proof}
+Während die naive Berechnung der Faltung \(2^{2n}\) Operationen benötigen würde, können
+wir mittels der FFT die Faltung in \((3n+1)\cdot 2^n\) Operationen berechnen:
+\[\begin{array}{ccccc}
+                      &                   & 2^{2n} &                     &            \\
+	              & (f,g)             & \to    & f\star g            &            \\
+	2n\cdot 2^n   & \downarrow        &        & \uparrow            & n\cdot 2^n \\
+	              & (\hat{f},\hat{g}) & \to    & \hat{f}\cdot\hat{g} &            \\
+	              &                   & 2^n    &                     &
+\end{array}\]
+
+Nun da wir uns das Avalanche-Kriterium angesehen haben, möchten wir gucken, ob Bentfunktionen
+dieses erfüllen.  Die Antwort lautet ja, es gilt sogar mehr -- die Funktionen die das
+Avalanche-Kriterium erfüllen, \emph{müssen} Bentfunktionen seinen.
+\begin{theorem}
+\(f\) ist eine Bentfunktion genau dann, wenn \(C_f(a)=0\) für alle \(a\in\GF_2^n\setminus\{0\}\).
+\end{theorem}
+\begin{proof}
+Nach \ref{thm:avalanche} und \ref{lem:avalanche-eff} gilt:
+\begin{align*}
+	   \widehat{C}_f
+	&= \widehat{\left(\frac{1}{2^n}\chi_f\star\chi_f(a)\right)} \\
+	&= \frac{1}{2^n} \widehat{\left(\chi_f\star\chi_f(a)\right)} \\
+	&= \frac{1}{2^n} \hat{\chi}_f \cdot \hat{\chi}_f
+\end{align*}
+und somit \(C_f(0,\dotsc,0)=1\) und \((-1)^{\langle\alpha,(0,\dotsc,0)\rangle} = 1\).
+Nun formen wir um:
+\begin{align*}
+	               & \forall a\neq 0: C_f(a) = 0 \\
+	\Leftrightarrow& \forall \alpha\in\GF_2^n: \widehat{C}_f(\alpha) = \sum_{a\in\GF_2^n} (-1)^{\langle\alpha,a\rangle} C_f(a) = 1 \\
+	\Leftrightarrow& \frac{1}{2^n} \hat{\chi}_f\cdot\hat{\chi}_f = 1 \\
+	\Leftrightarrow& \hat{\chi}_f^2 = 2^n
+\end{align*}
+Für die erste Äquivalenz ist die Hinrichtung offensichtlich, für die Rückrichtung berechnet
+man nach Lemma~\ref{lem:avalanche-eff}
+\[
+	  C_f(a)
+	= \frac{1}{2^n} \widehat{\widehat{C}}_f(a)
+	= \frac{1}{2^n} \sum_{\alpha\in\GF_2^n} (-1)^{\alpha,a\rangle}
+\]
+und wendet dann Lemma~\ref{lem:parseval-1} an.
+\end{proof}
 
 \end{document}
diff --git a/template.tex b/template.tex
index a0260091cc3040d9875d2de640a9c13385369983..b0ce6038437f2692e54dec3b06c8c98bdd784d79 100644
--- a/template.tex
+++ b/template.tex
@@ -2,6 +2,7 @@
 \documentclass{scrartcl}
 
 \usepackage{amsmath}
+\usepackage{mathtools} % stuff like pmatrix* that should be in amsmath but isn't
 \usepackage{amsfonts}
 \usepackage{amssymb}
 \usepackage{amsthm}