DH-Schlüsselaustausch finished
This commit is contained in:
@@ -143,7 +143,7 @@
|
||||
$$E((k^{(1)},k^{(2)},m)) := E_{DES}\left(k^{(1)},D_{DES}\left(k^{(2)},E_{DES}\left(k^{(1)},m \right)\right)\right)$$
|
||||
\includegraphics[scale=0.8]{3DES.png}
|
||||
|
||||
\section{Meet-in-the-Middle-Angriff}
|
||||
\section{Meet-in-the-Middle-Angriff}\label{meet-in-the-middle}
|
||||
Aufgrund des Meet-in-the-Middle-Angriffs führt eine \textbf{zweifache} Hintereinanderreihung von Verschlüsselungsfunktionen nur zu einer kleinen Vergrößerung des Schlüsselraums.
|
||||
Bei diesem Angriff handelt es sich um einen known-plaintext-Angriff (siehe \ref{known-plaintext}).
|
||||
Es wird angenommen, dass es ein $2E_{k_1,k_2}$ verfahren gibt, dass sich wie folgt definiert:\\
|
||||
|
||||
75
chapters/Diffie-Hellman-Schlüsselaustausch.tex
Normal file
75
chapters/Diffie-Hellman-Schlüsselaustausch.tex
Normal file
@@ -0,0 +1,75 @@
|
||||
\chapter{Das Diffie-Hellman-Schlüsselaustauschverfahren}
|
||||
In allen Fällen, in denen ein symmetrisches Schlüsselverfahren (inkl. MAC-Verfahren) verwendet wird ist es nötig den Schlüssel sicher auszutauschen.
|
||||
Eine Möglichkeit ist es diese Übertragung über einen sicheren Kanal (z.B. persönliche Übergabe) zu organisieren.
|
||||
Dies ist allerdings mit einem hohen Aufwand verbunden und erlaubt nicht einen sicheren Kanal in Echtzeit (z.B. für HTTPS) aufzubauen.
|
||||
Hierfür wurde von W.Diffie udn M.E.Hellman auf Basis der Arbeit von R.C.Merkle ein asymmetrisches Schlüsselaustauschverfahren entwickelt, welches als DH-Verfahren bekannt ist.
|
||||
Asymmetrische Verschlüsselungsverfahren zeichnen sich durch die Verwendung von \textbf{Schlüsselpaaren} ($k=(k_{\text{priv}},k_{\text{pub}})$) aus.
|
||||
Diese Schlüsselpaare sollten folgende Eigenschaften haben:
|
||||
\begin{itemize}
|
||||
\item Ein Schlüsselpaar ist genau einem Besitzer zugeordnet
|
||||
\item Niemals hat jemand anderes als der Besitzer zugriff auf den privaten Schlüssel $k_\text{priv}$
|
||||
\item Der private Schlüssel wird vom Besitzer selber generiert
|
||||
\item Der öffentliche Schlüssel $k_\text{pub}$ lässt sich effizient aus $k_\text{priv}$ errechnen
|
||||
\item Es gibt keinen effizienten Algorithmus um mithilfe von $k_\text{pub}$ $k_\text{priv}$ zu bestimmen
|
||||
\end{itemize}
|
||||
Vor dem Austausch eines symmetrischen Schlüssels besitzen beide Seiten jeweils ein unabhängiges asymmetrisches Schlüsselpaar.
|
||||
|
||||
\section{Das DH-Verfahren in Einzelschritten}
|
||||
Im Folgenden werden Alice und Bob als Synonyme für zwei beliebige Sender/Empfänger genutzt:
|
||||
\begin{itemize}
|
||||
\item Alice und Bob vereinbaren zwei Parameter (meist durch einen Standard spezifiziert):
|
||||
\begin{itemize}
|
||||
\item eine große Zahl $n\in\mathbb{N}$
|
||||
\item eine Zahl $g\in\mathbb{Z}_n^*$ deren Ordnung $o(g)$ mindestens durch eine sehr große Primzahl geteilt wird.
|
||||
\end{itemize}
|
||||
\item Alice bestimmt eine zufällig Zahl $e_A\in\mathbb{Z}_n^*$ als privaten Schlüssel:
|
||||
$$k_{A,\text{priv}}=e_A$$
|
||||
und errechnet den öffentlichen Schlüssel $k_{A,\text{pub}}=g^{e_A}\in\mathbb{Z}_n$
|
||||
\item Bob bestimmt ebenfalls eine Zufallszahl $e_B\in\mathbb{Z}_n^*$ und damit ein Schlüsselpaar:
|
||||
$$(k_{B,\text{priv}},k_{B,\text{pub}})=(e_B,g^{e_B})$$
|
||||
\item Alice und Bob tauschen ihre öffentlichen Schlüssel aus.
|
||||
\item Alice berechnet in $\mathbb{Z}n$:
|
||||
$$s_A:=(g^{e_B})^{e_A}$$
|
||||
Bob berechnet in $\mathbb{Z}n$:
|
||||
$$s_B:=(g^{e_A})^{e_B}$$
|
||||
\item Der gemeinsame Schlüssel (shared secret) ergibt sich durch:
|
||||
$$s_A:=(g^{e_B})^{e_A}=g^{e_B\cdot e_A}=g^{e_A\cdot e_B}=(g^{e_A})^{e_B}=s_B$$
|
||||
\end{itemize}
|
||||
|
||||
\section{Das Diskrete-Logarithmus-Problem (DL-Problem)}
|
||||
Das Diskrete-Logarithmus-Problem bildet die mathematische Grundlage dafür, dass Schlüssel mittels der DH-Verfahrens über einen potentiell unsicheren Kanal übertragen werden können.
|
||||
Das Problem definiert sich wie folgt:
|
||||
\begin{mybox}
|
||||
\textbf{DL-Problem}\\
|
||||
Gegeben seien $n\in\mathbb{N},g\in\mathbb{Z}_n^*$ und eine Potenz von $g$ in $\mathbb{Z}_n$:
|
||||
$$a\in\langle g\rangle:=\{g^e\mid e\in\mathbb{N}\}$$
|
||||
Als DL-Problem wird die Aufgabe bezeichnet nur mittels $a$ und $g$ einen passenden Exponenten $e$ für $a=g^{e}$ zu finden.\\
|
||||
Es wird vermutet, dass es keinen effizienten Algorithmus gibt.
|
||||
\end{mybox}
|
||||
|
||||
\subsection{Das Diffie-Hellman-Problem (DH-Problem)}
|
||||
Das DH-Problem ist eine Variante des DL-Problems, bei der zwei Potenzen $g^{e_A},g^{e_B}\in\langle g\rangle$ gegeben sind.
|
||||
Hierbei wird die Zahl $g^{e_A\cdot e_B}$ gesucht.
|
||||
Auch hier wird vermutet, dass es keinen effizienten Algorithmus gibt.
|
||||
|
||||
\section{Beispielanwendung des DH-Verfahrens}
|
||||
\includegraphics[scale=0.75]{DH-Verfahren.png}
|
||||
|
||||
\section{Angriffe auf das DH-Verfahren}
|
||||
\subsection{Pohlig-Hellman-Reduktion}
|
||||
Eine Brute-Force-Suche für das DL-Problem wird dadurch vereinfacht, dass sich die Brute-Force-Suche auf eine Brute-Force-Suche auf die Untergruppen von $\langle g \rangle$ mit maximaler Primzahlpotenz reduzieren lässt.
|
||||
Ein optimaler Schutz bietet die Wahl einer Primzahl $n$ bei der $n-1$ die Primfaktorzerlegung $n-1=2\cdot q$ hat ($q$ ist eine Primzahl).
|
||||
|
||||
\subsection{Shanks' \glqq Baby Steps Giant Steps\grqq-Verfahren (BSGS-Verfahren)}
|
||||
Falls die Möglichkeit besteht $\tilde{m}:=\lceil \sqrt{m}\rceil$ viele Zahlen von $\mathbb{Z}n$ in einer Tabelle zu speichern,
|
||||
lässt sich ein gesuchter Exponent $x$ mit dem BSGS-Verfahren bereits mit der Berechnung von höchsten $2\tilde{m}$ vielen Potenzen finden.
|
||||
Das Verfahren ähnelt dabei dem Meet-in-the-middle-Angriff (siehe \ref{meet-in-the-middle}).
|
||||
|
||||
\subsection{Pollard's Rho-Methode}
|
||||
siehe Skript 3 Kapitel 2.2.3 auf Seite 26(42)
|
||||
|
||||
\subsection{Zahlkörpersieb}
|
||||
Zu Beginn der 1990er Jahre wurde das Zahlkörpersieb (Number Field Sieve (NFS)) als Methode zur Faktorisierung großer Zahlen $n$ und zur Bestimmung diskreter Logarithmen in $\mathbb{Z}_n^*$ entwickelt.
|
||||
Die Laufzeit zur Bestimmung diskreter Logarithmen in $\mathbb{Z}_n^*$ mithilfe des Zahlkörpersiebs kann durch
|
||||
$$O\left(e^{\left(\left(\frac{64}{9}\right)^{1/3}+o(1)\right)(\ln(n))^{1/3}(\ln(\ln(n)))^{2/3}}\right)$$
|
||||
von oben abgeschätzt werden.
|
||||
@@ -45,6 +45,41 @@
|
||||
Für eine Primzahl $p$ gilt für alle $a\in\mathbb{Z}$ mit $\text{ggT}(a,p)=1$:
|
||||
$$a^{p-1}\equiv 1 \hspace{10mm}(\mod p)$$
|
||||
|
||||
\subsection{Berechnung modularer Potenzen}
|
||||
Es gibt zwei verschiedene Varianten zur effizienten Berechnung modularer Potenzen, die sich beide an der Darstellung des Exponenten $e$ im Stellenwertsystem zur Basis 2 (binär) orientieren:
|
||||
Es lässt sich ein Algorithmus aufstellen, bei dem sukzessive die Quadrate $a^2,a^4=(a^2)^2, a^8=(a^4)^2,...,a^{2^l-1}=\left(a^{2^{l-2}}\right)^2$ in $\mathbb{Z}_n$ berechnet werden.
|
||||
Diese fließen als Faktor in die Berechnung von $p=a^e$ ein, falls das entsprechende Bit $e_i=1$ ist.
|
||||
Es folgen die beiden Algorithmen:
|
||||
\begin{mybox}
|
||||
\textbf{Algorithmus 1}\\
|
||||
Sei $n\in\mathbb{N},a\in\mathbb{Z}_n$ und $e\in\mathbb{N}$ (in binärer Schreibweise):
|
||||
$$e=(e_{l-1}...e_2 e_1 e_0)_2=\sum_{i=0}^{l-1}e_i\cdot 2^i$$
|
||||
Für die Berechnung von $p=a^e\mod n$ wird der folgende Algorithmus angewandt:
|
||||
\begin{enumerate}[(1)]
|
||||
\item $i:=0,p:=1$ und $s:=a$
|
||||
\item if($e_i=1$){$p:=p\cdot s\mod n$}
|
||||
\item if($i=l-1$){beende den Algorithmus und gebe $p$ aus}
|
||||
\item $i:=i+1$
|
||||
\item $s:=s^2\mod n$
|
||||
\item goto (2)
|
||||
\end{enumerate}
|
||||
\end{mybox}
|
||||
\begin{mybox}
|
||||
\textbf{Algorithmus 2}\\
|
||||
Sei $n\in\mathbb{N},a\in\mathbb{Z}_n$ und $e\in\mathbb{N}$ (in binärer Schreibweise):
|
||||
$$e=(e_{l-1}...e_2 e_1 e_0)_2=\sum_{i=0}^{l-1}e_i\cdot 2^i$$
|
||||
Für die Berechnung von $p=a^e\mod n$ wird der folgende Algorithmus angewandt:
|
||||
\begin{enumerate}[(1)]
|
||||
\item $i:=l-1,p:=1$ und $s:=a$
|
||||
\item if($e_i=1$){$p:=p\cdot a\mod n$}
|
||||
\item if($i=0$){beende den Algorithmus und gebe $p$ aus}
|
||||
\item $i:=i-1$
|
||||
\item $p:=p^2\mod n$
|
||||
\item goto (2)
|
||||
\end{enumerate}
|
||||
\end{mybox}
|
||||
|
||||
|
||||
\section{Exkurs: Einheitengruppe $\mathbb{Z}_{p^e}^*$}
|
||||
Für eine Primzahl $p$ gibt es ein Element $g\in\mathbb{Z}_p^*$ mit $o(g)=p-1$ ($\mathbb{Z}_p^*=<g>=\{1,g,g^2,...,g^{p-2}\}$).
|
||||
Diese Elemente $g$ werden als \textbf{primitive Elemente} bezeichnet.\\
|
||||
|
||||
Reference in New Issue
Block a user