finished chapter Blockverschlüsselungsverfahren

This commit is contained in:
Paul Lödige
2020-09-16 18:11:00 +02:00
parent 6bd94983a7
commit 23f91641ed
12 changed files with 220 additions and 30 deletions

View File

@@ -116,7 +116,7 @@
Aus ihm werden Rundenschlüssel $k_i$ mit $i\in\{1,...,r\}$ abgeleitet, welche bei jeder Runde mit in die Berechnung einfließen.
Bei einer Entschlüsselung wird das durch die Runden beschriebene Verfahren einfach rückwärts angewandt.
\section{DES und Tripple-DES}
\section{DES}
Das einfach DES wurde 1977 veröffentlicht und 2005 zurückgezogen.
Sowohl die Blöcke als auch die Schlüssel setzten sich jeweils aus 8 Bytes zusammen:
$$\begin{aligned}
@@ -141,4 +141,104 @@
\end{aligned}$$
Die 3-DES Entschlüsselungsfunktion definiert sich durch:
$$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}
\includegraphics[scale=0.8]{3DES.png}
\section{Meet-in-the-Middle-Angriff}
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:\\
\includegraphics{meet-in-the-middle.png}\\
Es wird zudem angenommen, dass genügend Speicher zur Verfügung steht um alle $\tilde{k}_1\in\mathscr K$ zusammen mit den jeweiligen $c_{\tilde{k}_1}(m_1):=E(\tilde{k}_1,m_1)$ in eine Tabelle zu schreiben:
\begin{center}
\begin{tabular}{c|c}
$\tilde{k}_1$ & $c_{\tilde{k}_1}(m_1):=E(\tilde{k}_1,m_1)$\\
\hline
0101010101010101 & 8A549EC56733AB66\\
0101010101010102 & 653148AE6B688132\\
\vdots & \vdots \\
FEFEFEFEFEFEFEFE & CE55464B6485684E
\end{tabular}
\end{center}
Anschließend wird die Tabelle nach der zweiten Spalte sortiert.
Beim Ausprobieren alle Möglichkeiten von $\tilde{k}_2 \in\mathscr K$ kann für $D_{\tilde{k}_2}(c_1)$ nachgeschlagen werden, ob sich dieser in der Tabelle befindet.
Hierdurch ergeben sich dann $(\tilde{k}_1,\tilde{k}_2)$ Paare, für die gilt:
$$2E_{\tilde{k}_1,\tilde{k}_2}(m_{\color{red}{\mathbf{1}}})=c_{\color{red}{\mathbf{1}}}$$
Durchschnittlich ist mit $1+\frac{|\mathscr K|}{|\mathscr M|}$ solcher Paare zu rechnen.
Die Paare können nun durch Ausprobieren der anderen bekannten Nachrichten $\{m_i\setminus m_1\}$ schnell ausgeschlossen werden.
\section{AES (Advanced Encryption Standard)}
Der AES ist für Schlüssel mit den Bitlängen 128, 192 und 256 definiert.
Im folgenden wird AES-128 als Synonym für alle möglichen Schlüssellängen verwendet.
\subsection{AES-128}
Sowohl die Blöcke als auch die Schlüssel setzen sich aus jeweils 16 Bytes zusammen:
$$\begin{aligned}
\mathscr M =& ({\mathbb{Z}_2}^8)^{16}=\{(m_1,...m_{16})\mid m_i\in{\mathbb{Z}_2}^8\}\\
\mathscr K =& ({\mathbb{Z}_2}^8)^{16}=\{(k_1,...k_{16})\mid k_i\in{\mathbb{Z}_2}^8\}\\
\end{aligned}$$
Blöcke werden in Form von Matrizen dargestellt, die als State-Array bezeichnet werden:
$$S=\begin{pmatrix}
s_{0,0} & s_{0,1} &s_{0,2} &s_{0,3}\\
s_{1,0} & s_{1,1} &s_{1,2} &s_{1,3}\\
s_{2,0} & s_{2,1} &s_{2,2} &s_{2,3}\\
s_{3,0} & s_{3,1} &s_{3,2} &s_{3,3}\\
\end{pmatrix}:=\begin{pmatrix}
m_1 &m_5 & m_9 & m_{13}\\
m_2 &m_6 & m_{10} & m_{14}\\
m_3 &m_7 & m_{11} & m_{15}\\
m_4 & m_8 & m{12} & m_{16}
\end{pmatrix}$$
\vspace{5mm}
Im AES gibt es 4 elementare Operationen auf den State-Arrays:
\begin{enumerate}
\item SubBytes()\\
Es wird auf Basis der folgenden Tabelle eine Substitution von jedem Element des State-Arrays durchgeführt.\\
\includegraphics[scale=0.8]{AES S-Box.png}
\item ShiftRows()\\
auf dem S-Array wird die folgende Transposition durchgeführt:
$$\begin{pmatrix}
s_{0,0} & s_{0,1} &s_{0,2} &s_{0,3}\\
s_{1,0} & s_{1,1} &s_{1,2} &s_{1,3}\\
s_{2,0} & s_{2,1} &s_{2,2} &s_{2,3}\\
s_{3,0} & s_{3,1} &s_{3,2} &s_{3,3}\\
\end{pmatrix}
\mapsto
\begin{pmatrix}
s_{0,0} & s_{0,1} &s_{0,2} &s_{0,3}\\
s_{1,1} & s_{1,2} &s_{1,3} &s_{1,0}\\
s_{2,2} & s_{2,3} &s_{2,0} &s_{2,1}\\
s_{3,3} & s_{3,0} &s_{3,1} &s_{3,2}\\
\end{pmatrix}$$
\item MixColumns()\\
auf dem S-Array wird eine Substitution ausgeführt, die durch die folgende Multiplikation definiert ist:
$$S\mapsto M\cdot S\hspace{5mm} \text{mit }M=
\begin{pmatrix}
02 & 03& 01& 01\\
01 & 02 & 03 & 01 \\
01 & 01 & 02 & 03 \\
03 & 02 & 01 & 02 \\
\end{pmatrix}$$
Hierbei ist wichtig anzumerken, dass die Multiplikation nicht in $\mathbf{Z}_{256}$ berechnet wird.
Stattdessen wird sind die Elemente als Elemente des Körpers $\mathbf{F}_{256}$ aufzufassen (siehe \ref{endliche Körper})
\item AddRoundKey()\\
Es wird eine XOR-Operation der Einträge des S-Arrays mit den entsprechenden Einträgen aus \textbf{K} durchgeführt.
Dies entspricht einer Matrixaddition in $\mathbb{F}_{256}$:
$$ \textbf{S}\mapsto\textbf{K}+\textbf{S}$$
\end{enumerate}
\vspace{2mm}
AES-128 führt die zuvor beschriebenen Schritte nach dem folgenden Algorithmus aus:
\texttt{
\begin{tabbing}
AES\_ENCRYPT(\textbf{S},$\textbf{K}_0,...,\textbf{K}_10$)\{\\
\hspace{5mm}\=AddRoundKey(\textbf{S},$\textbf{K}_0$)\\
\>for( int i = 1; i < 10; ++i)\{\\
\>\hspace{5mm}\=SubBytes(\textbf{S});\\
\>\>ShiftRows(\textbf{S});\\
\>\>MixColumns(\textbf{S});\\
\>\>AddRoundKey(\textbf{S},$\textbf{K}_0$)\\
\>\}\\
\>SubBytes(\textbf{S});\\
\>ShiftRows(\textbf{S});\\
\>AddRoundKey(\textbf{S},$\textbf{K}_0$)\\
\}
\end{tabbing}}

View File

@@ -0,0 +1 @@
\chapter{Endliche Körper $\mathbb{F}_{p^n}$} \label{endliche Körper}