Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
Symmetric Cryptanalysis Script
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
This is an archived project. Repository and other project resources are read-only.
Show more breadcrumbs
koenigl2
Symmetric Cryptanalysis Script
Commits
3b19dcfc
Commit
3b19dcfc
authored
5 years ago
by
koenigl
Browse files
Options
Downloads
Patches
Plain Diff
criteria: Parseval
parent
a9f515a7
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
main.tex
+223
-5
223 additions, 5 deletions
main.tex
template.tex
+1
-0
1 addition, 0 deletions
template.tex
with
224 additions
and
5 deletions
main.tex
+
223
−
5
View file @
3b19dcfc
...
@@ -1446,7 +1446,7 @@ direkt einen \(n\) langen Teil des Schlüsselstroms errechnen:
...
@@ -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.
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
Wir nutzen also LFSRs nur als Bausteine für eine komplette Chiffre, indem wir
mehrere kombinieren und eine
Auswahl
funktion
\(
f
\)
auf die Ausgaben der einzelnen
mehrere kombinieren und eine
Kombinier
funktion
\(
f
\)
auf die Ausgaben der einzelnen
LFSRs anwenden, die für jedes Output-Bit der Gesamtchiffre spezifiziert, welches
LFSRs anwenden, die für jedes Output-Bit der Gesamtchiffre spezifiziert, welches
LFSR konkret verwendet wird.
LFSR konkret verwendet wird.
...
@@ -1455,7 +1455,7 @@ geheimzuhalten. Wir werden nun sehen, dass wir anhand eines Schlüsselstroms ei
...
@@ -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
entsprechendes LFSR bauen können -- dadurch also nichts gewonnen ist. Hierzu
betrachten wir nun was es bedeutet, wenn ein LFSR maximale Periode hat um
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
dann bei gegebenen Bitstrom die Koeffizienten bestimmen zu können. Abschließend
werden wir uns dann mit der
Auswahl
funktion beschäftigen, und welche Angriffe es
werden wir uns dann mit der
Kombinier
funktion beschäftigen, und welche Angriffe es
darauf gibt.
darauf gibt.
\paragraph
{
Rekursive Beschreibung von LFSRs
}
\paragraph
{
Rekursive Beschreibung von LFSRs
}
...
@@ -1692,12 +1692,12 @@ dass die Geheimhaltung der Rückkopplungskoeffizienten keinen Gewinn in
...
@@ -1692,12 +1692,12 @@ dass die Geheimhaltung der Rückkopplungskoeffizienten keinen Gewinn in
Sachen Sicherheit bringt. Weiterhin wissen wir, dass ein einzelnes LFSR
Sachen Sicherheit bringt. Weiterhin wissen wir, dass ein einzelnes LFSR
sowieso unsicher ist, da wir einfach
\enquote
{
zurückrechnen
}
können. Die
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
einzige Art wie ein LFSR also sicher sein kann, ist wenn wir mehrere
kombinieren und eine
Auswahl
funktion auf diese anwenden um den tatsächlichen
kombinieren und eine
Kombinier
funktion auf diese anwenden um den tatsächlichen
Schlüsselstrom zu geniereren. Haben wir also
\(
m
\)
LFSRs, dann ist die
Schlüsselstrom zu geniereren. Haben wir also
\(
m
\)
LFSRs, dann ist die
Auswahl
funktion
\(
f:
\GF
_
2
^
m
\to\GF
_
2
\)
:
Kombinier
funktion
\(
f:
\GF
_
2
^
m
\to\GF
_
2
\)
:
%TODO Grafik
%TODO Grafik
Was sind aber Kriterien für eine
\enquote
{
gute
}
Auswahl
funktion? Erstmal
Was sind aber Kriterien für eine
\enquote
{
gute
}
Kombinier
funktion? Erstmal
sollte
\(
f
\)
möglichst gleichverteilt sein, d.
\,
h.
\@
\(
\Pr
(
f
(
x
)=
0
)=
1
/
2
\)
,
sollte
\(
f
\)
möglichst gleichverteilt sein, d.
\,
h.
\@
\(
\Pr
(
f
(
x
)=
0
)=
1
/
2
\)
,
da einzelne LFSRs mit maximaler Periode sehr gute statistische Eigenschaften
da einzelne LFSRs mit maximaler Periode sehr gute statistische Eigenschaften
haben (d.
\,
i. ähnlich viele Nullen wie Einsen). Ist nun
\(
f
\)
gleichverteilt,
haben (d.
\,
i. ähnlich viele Nullen wie Einsen). Ist nun
\(
f
\)
gleichverteilt,
...
@@ -2030,4 +2030,222 @@ Wir unterscheiden nun drei Fälle:
...
@@ -2030,4 +2030,222 @@ Wir unterscheiden nun drei Fälle:
\end{enumerate}
\end{enumerate}
\end{proof}
\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
=
1
x
_
1
^
0
x
_
2
^
0
+
0
x
_
1
^
0
x
_
2
^
1
+
0
x
_
1
^
1
x
_
2
^
1
+
1
x
_
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
^{
2
n
}\)
Operationen. Mit der schnellen
Fouriertransformation ist dies sogar reduzierbar auf
\(
n
2
^
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
^{
2
n
}
\]
\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}
\end{document}
This diff is collapsed.
Click to expand it.
template.tex
+
1
−
0
View file @
3b19dcfc
...
@@ -28,6 +28,7 @@
...
@@ -28,6 +28,7 @@
\newcommand
{
\GF
}{
\mathbb
{
F
}}
\newcommand
{
\GF
}{
\mathbb
{
F
}}
\newcommand
{
\Fn
}{
\mathcal
{
F
}}
\newcommand
{
\Fn
}{
\mathcal
{
F
}}
\newcommand
{
\Idx
}{
\mathcal
{
I
}}
\newcommand
{
\Idx
}{
\mathcal
{
I
}}
\newcommand
{
\Base
}{
\mathcal
{
B
}}
\usepackage
{
iftex
}
\usepackage
{
iftex
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment