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
499b6586
Commit
499b6586
authored
5 years ago
by
koenigl
Browse files
Options
Downloads
Patches
Plain Diff
stream ciphers: korrelations
parent
bce1ace6
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
main.tex
+227
-1
227 additions, 1 deletion
main.tex
with
227 additions
and
1 deletion
main.tex
+
227
−
1
View file @
499b6586
...
...
@@ -1584,7 +1584,233 @@ Wir haben nun einen Überblick darüber gewonnen, wie unser Angriff ungefähr
ablaufen wird. Wir möchten uns nun genauere Gedanken über die Periode, die
Spur und die Initialisierungswerte der Chiffre machen.
Wir betrachten LFSRs mit irreduziblen charakteristischen Polynomen
\(
f
\)
.
Wir betrachten LFSRs mit irreduziblen charakteristischen Polynomen
\(
f
\)
, da
wir uns nur für LFSRs maximaler Periode interessieren. Wir bewegen uns im
Körper
\(
\GF
(
\alpha
)=
\GF
_{
2
^
n
}
=
\GF
_
2
[
X
]/
f
\cdot
\GF
_
2
[
X
]
\)
mit der
Spurfunktion
\[
\Tr
(
\alpha
)
:
=
\sum
_{
i
=
0
}^{
n
-
1
}
\alpha
^{
2
^
i
}
=
\alpha
\xor
\alpha
^
2
\xor
\alpha
^{
2
^
2
}
\xor
\dotsb
\xor
\alpha
^{
2
^{
n
-
1
}}
\]
Zudem ist
\(
\alpha\in\GF
_{
2
^
n
}\)
eine (beliebige) Nullstelle von
\(
f
\)
. Wie
schon angedeutet, korrespondiert
\(
\theta
\)
eindeutig mit der dem Schlüssel
\(
k
_
0
,
\dotsc
,k
_{
n
-
1
}\)
(bleibt noch zu zeigen):
%TODO: wo?
\[
\text
{
LFSR erzeugt Strom
}
(
k
_
t
)
_{
t
\in\mathbb
{
N
}}
\Leftrightarrow
\exists\theta\in\GF
_{
2
^
n
}
: k
_
t
=
\Tr
(
\theta\alpha
^
t
)
\]
Wir können mit diesem Wissen wir einige Sachen über LFSRs und ihre
Periode sagen.
\begin{theorem}
Ein LFSR der Länge
\(
n
\)
mit irreduziblem charakteristischen
Polynom
\(
f
\)
hat genau dann maximale Periode
\(
2
^
n
-
1
\)
, wenn
alle Nullstellen primitiv sind. Hierbei bezeichnen wir die Ordnung
einer Nullstelle als das minimale
\(
k
\in\mathbb
{
N
}\)
, sodass
\(
a
^
k
=
1
\)
-- eine Nullstelle ist dann primitiv, wenn ihre Ordnung
\(
k
=
2
^
n
-
1
\)
. In diesem Fall erzeugt
\(
\alpha
\)
(fast) alle Elemente
unseres Körpers
\(
\GF
_{
2
^
n
}
\setminus\{
0
\}
\)
.
\end{theorem}
\begin{proof}
Wir wissen, dass jede vom LFSR erzeugte Folge für eine Nullstelle
\(
\alpha
\)
mit dem Polynom
\(
f
\)
und
\(
\theta\in\GF
_{
2
^
n
}\)
die Form
\(
k
^
t
=
\Tr
(
\theta\alpha
^
t
)
\)
hat. Wir können daraus folgern, dass für die
Ordnung
\(
k
\)
der Nullstelle gilt, dass
\(
(
\Tr
(
\theta\alpha
^
t
))
_
t
\)
eine Periode
von maximal
\(
k
\)
haben muss.
Andersherum, hat
\(
(
\Tr
(
\theta\alpha
^
t
))
_
t
\)
eine Periode
\(
k
\neq
0
\)
, dann
gilt
\(
\Tr
(
\theta\alpha
^{
t
+
k
}
)
=
\Tr
(
\theta\alpha
^
t
)
\)
, somit gilt dank
der Linearität von
\(
Tr
\)
(Satz 9.3):
%TODO insert ref
\[
\forall
t
\in\mathbb
{
N
}
:
0
=
\Tr
(
\theta
(
\alpha
^{
t
+
k
}
+
\alpha
^
t
))
=
\Tr
(
\theta\alpha
^
t
(
\alpha
^
k
+
1
))
\]
Mit Satz 9.7 erhalten wir außerdem
%TODO ref
\[
\Tr
(
\theta\alpha
^
0
)
=
\Tr
(
\theta\alpha
^
1
)
=
\dotsb
=
\Tr
(
\theta\alpha
^{
n
-
1
}
=
0
\Rightarrow
\theta
=
0
\]
Nutzen wir dieses Wissen für
\(
\Theta
(
a
^
k
+
1
)
\)
, zeigt es dass gelten muss
\(
(
a
^
k
+
1
)
=
0
\)
, somit würde
\(
\alpha
\)
eine Nullstelle haben mit Grad
maximal
\(
k
\)
.
Somit sehen wir über Kontraposition
\[
\Tr
(
\theta\alpha
^
t
)
\text
{
hat Periode von maximal
}
k
\Leftrightarrow
\alpha
\text
{
hat Ordnung von maximal
}
k
\]
\end{proof}
In diesem Beweis haben wir die eindeutige Korrelation von
\(
\theta
\)
mit
dem Schlüssel genutzt, sowie die Sätze 9.3 und 9.7. Fangen wir nun an diese
Lücken zu schließen.
% insert ref.
%TODO totales Chaos. Wir haben (?)
%
% 9.1: 9.3, 9.7, 9.4
% F6 = 9.4 9.8
% 9.2: bottom
% 9.3: 9.2
% 9.4: 9.3
% 9.5: 9.2
% 9.6: 9.2
% 9.7: 9.5, 9.6
% 9.8: 9.7
%
% 9.1
% --^-------
% / | \
% | | F6 |
% | |/ \ |
% | 9.4 9.8 |
% |/^ ^\/
% 9.3 9.7
% ^ /^\
% | 9.5 9.6
% | ^ ^
% \------|---/
% 9.2
%
\subsection
{
Berlekamp-Messay-Algorithmus
}
%TODO
\subsection
{
Korrelationsattacken
}
Bisher haben wir uns ausschließlich mit der Analyse eines LFSRs beschäftigt
und mit der Errechnung eines LFSRs für eine gegebene Bitfolge, also gezeigt,
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
Schlüsselstrom zu geniereren. Haben wir also
\(
m
\)
LFSRs, dann ist die
Auswahlfunktion
\(
f:
\GF
_
2
^
m
\to\GF
_
2
\)
:
%TODO Grafik
Was sind aber Kriterien für eine
\enquote
{
gute
}
Auswahlfunktion? 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,
überträgt sich diese Eigenschaft auf den generierten Schlüsselstrom. Des
weiteren soll auch dieser Schlüsselstrom eine große Periode haben.
Wir erinnern uns, eine boolesche Funktion
\(
f:
\GF
_
2
^
m
\to\GF
_
2
\)
lässt sich
eindeutig als Summe einfacher Monome darstellen.
%TODO ref
Wir werden nun uns dieses Polynom genauer angucken.
\begin{theorem}
\label
{
thm:stream-lincomp
}
Seien
\(
m
\)
LFSR
\(
A
_
1
,
\dotsc
,A
_
m
\)
mit jeweiliger Länge
\(
n
_
1
\dotsc
,n
_
m >
2
\)
und maximalen Perioden gegeben. Weiter seien die Längen paarweise teilerfremd.
Sei nun
\(
F
\)
das reale Polynom, dass aus
\(
f
\)
entsteht, wenn die Addition
im
\(
\GF
_
2
\)
\(
\xor
\)
durch das reguläre
\(
+
\)
ersetzt wird. Dann hat die
obige Konstruktion die lineare Komplexität
\(
F
(
n
_
1
,
\dotsc
,n
_
m
)
\)
.
\end{theorem}
Der Beweis wird ausgeführt in Cusick, Stanica: Cryptgraphic Boolean
Functions and Applications.
%TODO ref.
Tatsächlich wird zusätzlich in dem Beweis folgendes über die Periode der
Gesamtkonstruktion gezeigt.
\begin{theorem}
Es gelten die Voraussetzungen des obigen Satzes. Dann hat die obige
Konstruktion eine Periode von mindestens
\(
2
^{
F
(
n
_
1
,
\dotsc
,n
_
m
)
}\)
.
\end{theorem}
Die Idee von Korrelationsangriffen ist es nun Schwächen in der Funktion
\(
f
\)
zufinden, um weniger Schritte zu benötigen als mit Schlüsselexhaustion
(
\(
2
^{
n
_
1
}
\cdot
\dotsb
\cdot
2
^{
n
^
m
}\)
). Angenommen, es gelte für
\(
f
\)
,
dass dessen Ausgabe nicht unähnlich der des ersten LFSRs ist (d.
\,
i.
\@
sie
korrelieren):
\[
\Pr
(
f
(
x
_
1
,
\dotsc
,x
_
m
)
=
x
_
1
)
=
: p
\neq
\frac
{
1
}{
2
}
\]
Dann wäre ein known-plaintext Angriff mit bekanntem Ausschnitt des
Schlüsselstroms
\(
k
_
i,
\dotsc
,k
_{
i
+
t
-
1
}\)
möglich, indem für alle möglichen
Initialwerte
\(
k
_
0
^
1
,
\dotsc
,k
_{
n
_
1
}^
1
\)
des ersten LSFRs (Schlüsselexhaustion)
die Werte
\(
k
_
i
^
1
,
\dotsc
,k
_{
i
+
t
-
1
}^
1
\)
berechnet werden. Danach berechnet
man die Korrelation zwischen den Strömen des ersten LSFRs und den bekannten
der Gesamtkonstruktion:
\[
p' :
=
\frac
{
|
\{
j
\in
{
i,
\dotsc
,i
+
t
-
1
}
\mid
k
_
j
^
1
=
k
_
i
\}
|
}{
2
^
t
}
\]
Ist nun
\(
p'
\approx
p
\)
, dann ist der geratene Teilschlüssel
\(
(
k
_
0
^
1
,
\dotsc
,k
_{
n
_
1
}^
1
)
\)
der korrekte Schlüssel für das erste LSFR.
Ist jedoch
\(
p'
\approx\frac
{
1
}{
2
}\)
wird der Schlüssel verworfen.
Damit kann mit einem Aufwand von Schlüsselexhaustion von ca.
\@
\(
2
^{
n
_
1
}\)
der erste Teilschlüssel bestimmt werden -- der Gesamtaufwand der Schlüsselsuche
reduziert sich damit auf
\(
2
^{
n
_
1
}
+
2
^{
n
_
2
}
\cdot\dotsb
2
^{
n
_
m
}\)
. In
den Worten der linearen Kryptoanalyse, haben wir eine lineare Relation
\(
(
\alpha
,beta
)
\)
für
\(
f
\)
gefunden, sodass mit
\(
(
\alpha
=(
1
,
0
,
\dots
,
0
)
\in\GF
_
2
^
m
\)
und
\(
\beta
=(
1
)
\in\GF
_
2
\)
gilt, dass
\[
\Pr
(
f
(
x
)=
\langle\alpha
,x
\rangle
)
=
\Pr
(
\langle\beta
,f
(
x
)
\rangle
=
\langle\alpha
,x
\rangle
)
\neq
\frac
{
1
}{
2
}
\]
Dieser Angriff lässt sich natürlich mit Korrelationen für jedes einzelne
LSFR, also alle
\(
\alpha\in\GF
_
2
^
m
\)
analog durchführen.
Wir entfernen uns nun von dem Beispiel und gucken uns allgemein eine
lineare Relation
\(
\alpha\in\GF
_
2
^
m
\)
mit
\(
\Pr
(
f
(
x
)=
\langle\alpha
,x
\rangle
)
\neq
1
/
2
\)
an, wobei
\(
i
_
1
<i
_
2
<
\dotsb
i
_
t
\)
die Indizes sind, für an denen die Relation
\(
1
\)
ist, also
\(
a
_
k
=
1
\leftrightarrow
k
=
i
_
j
\)
. Analog seien
\(
i'
_
1
<i'
_
2
<
\dotsb
<i'
_{
m
-
t
}\)
die Indizes mit
\(
\alpha
_{
i'
_
j
}
=
0
\)
.
Weiterhin sei die Abbildung die sich nur auf die korrelierenden LSFRs
beschränkt:
\begin{align*}
g
_
\alpha
:
&
\;\GF
_
2
^
t
\to
\GF
_
2
\\
&
x
\mapsto
\sum
_{
j=1
}^
t
\alpha
_{
i
_
j
}
x
_
j
\end{align*}
Dann korreliert die Ausgabe von
\(
f
\)
mit der von
\(
g
_
\alpha
\)
.
%TODO grafik
Es reduziert sich die Schlüsselsuche auf
\(
2
^{
n
_{
i
_
1
}}
\cdot\dotsb\cdot
2
^{
n
_{
i
_
t
}}
+
2
^{
n
_{
i'
_
1
}}
\cdot\dotsb\cdot
2
^{
n
_{
i'
_{
m
-
t
}}}\)
.
\paragraph
{
Gegenmaßnahmen
}
Wir möchten uns nun damit beschäftigen, wie wir solche Korrelationen
verhindern können.
\begin{definition}
Sei
\(
t
\leq
m
\)
. Eine Funktion
\(
f:
\GF
_
2
^
m
\to\GF
_
2
\)
heißt
\(
t
\)
-korrelationsimmun, wenn für alle linearen Relationen
\(
\alpha\in\GF
_
2
^
m
\)
die maximal
\(
t
\)
LSFRs auswählen
\(
1
\leq\sum
\alpha
_
i
\leq
t
\)
gilt:
\[
\Pr
(
f
(
x
_
1
,
\dotsc
,x
_
m
)
=
\langle\alpha
,x
\rangle
)
=
\frac
{
1
}{
2
}
\]
Eine Funktion
\(
f
\)
heißt zudem
\(
t
\)
-resilient, wenn
\(
f
\)
zusätzlich
gleichverteilt ist.
\end{definition}
Wir möchten möglichst eine
\(
m
\)
-resiliente Funktion, dann wäre ein
Korrelationsangriff genauso aufwändig wie Brute-Force. Wie wir aber in
Abschnitt 13
% TODO ref
sehen werden, gibt es keine solcher Funktionen. Nehmen wir das nächstbeste,
also
\(
m
-
1
\)
-resiliente Funktionen. Jedoch sind solche Funktionen
affin, der Schlüsselstrom also weiter linear abhängig vom Schlüssel. Wir
können also höchstens
\(
m
-
2
\)
-resilent fordern.
%TODO im Skript steht hier abwechselnd resilient und korrelationsimmun.
Es gilt sogar nach Siegenthaler 1984, dass eine Funktion
\(
f
\)
die
\(
t
\)
-resilient ist, einen algebraischen Grad von maximal
\(
m
-
t
\)
haben
muss.
%TODO ref.
Wir möchten jedoch einen hohen Grad haben um nach Satz~
\ref
{
thm:stream-lincomp
}
eine hohe lineare Komplexität des Schlüsselstroms zu erreichen. Dies
verhindert die im nächsten Kapitel algebraischen Angriffe.
Man kann bei Stromchiffren also immer einen Angriff kreieren, der
besser ist als Brute Force -- als Gegenmaßnahmen muss der Schlüssel
entsprechend groß gewählt werden.
\subsection
{
Algebraische Angriffe
}
\end{document}
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