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

criteria finished

parent 3b19dcfc
No related branches found
No related tags found
No related merge requests found
......@@ -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}
......@@ -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}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment