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}