DC_Zusammenfassung/chapters/Blockverschlüsselungsverfahren.tex

85 lines
6.4 KiB
TeX

\chapter{Blockverschlüsselungsverfahren}
Ein Verschlüsselungsverfahren wird als Blockverschlüsselungsverfahren bezeichnet,
wenn die Menge der Nachrichten $\mathscr M$ durch die Menge der Blöcker einer festen Länge $n\in \mathbb{N}$ gegeben ist:
$$\mathscr M := ({\mathbb{Z}_2}^8)^n = \{(z_1,z_2,...,z_n)\mid z_i\in{\mathbb{Z}_2}^8\}$$
\textbf{Wichtig}\\
\begin{itemize}
\item Häufig wird für Blöcke die aus $n$ Bytewerten die Blocklänge in Bits (Blocklänge$=n\cdot 8$) angegeben
\item Die Menge der Blöcke $\mathscr M$ kann als Vektorraum über $\mathbb{Z}_2$ aufgefasst werden.
Hierbei wird die Summe von zwei Blöcken $m_1,m_2\in\mathscr M$ durch eine bitweise Addition definiert, welcher einer Bitweisen XOR-Verknüpfung ($\oplus$) entspricht.
\item Da sich die Vektoren aus ${\mathbb{Z}_2}^{8\cdot n}$ in Zahlen aus $\mathbb{Z}_{2^{8\cdot n}}$ umrechnen lassen könnte man sie auch auf diese Art addieren.
Hierbei erhält man allerdings ein deutlich anderes Ergebnis als bei XOR-Addition.
Aus diesem Grund wird in diesem Fall das Symbol $\boxplus$ verwendet.
\end{itemize}
\section{Padding-Verfahren}
Damit Daten beliebiger Länge mit einem Blockverschlüsselungsverfahren verschlüsselt werden können muss die Nachricht auf ein Vielfaches der Blocklänge aufgestockt werden.
Man spricht von Padding.
Um dem Empfänger mitzuteilen, welche übertragenen Daten zum Padding und nicht zur Nachricht gehören gibt es mehrere Möglichkeiten:
\begin{itemize}
\item Die Anzahl der Padding-Bytes wird mit übertragen
\item Als Paddingbytes werden Zeichen verwendet, die nicht in die Kodierung passen (z.B. 0x00 bei ASCII)
\item Es findet immer Padding statt (bei passender Nachrichtenlänge ist der ganze letzte Block Padding), wobei im Padding die Paddinglänge kodiert ist.
\end{itemize}
\section{Betriebsmodi}
Es gibt eine Vielzahl von Betriebsmodi, die für die Blockverschlüsselung verwendet werden.
Auf diese wird im Folgenden eingegangen
\subsection{ECB (Electronic Code Book)}
Im ECB-Modus wir mit dem Verschlüsselungsverfahren $E$ jedes Tupel von Blöcken blockweise verschlüsselt:
$$E_k((m_1,...,m_r)) := (E_k(m_1),...,E_k(m_r))$$
eine auf diese Weise verschlüsselte Nachricht kann ebenfalls Blockweise entschlüsselt werden:
$$D_k((c_1,...,c_r)) := (D_k(c_1),...,D_k(c_r))$$
\includegraphics{ECB.png}\\
Da diese Modus anfällig für Wörterbuchangriffe ist wird häufig ein Nonce-Wert verwendet, der jeweils mit dem Klartextblock addiert ($\oplus$) wird:\\
\includegraphics{ECB_Nonce.png}
\subsection{CBC (Cipher Block Chaining)}\label{CBC}
Der CBC-Modus ist eine spezielle Form des ECB-Modus, bei dem der errechnete Geheimtextblock als Nonce-Wert für die Verschlüsselung des nächsten Blocks verwendet wird.
Hierbei wird der erste Nonce-Wert $c_0$ durch einen Initialisierungsvektor $IV\in\mathscr M$ gegeben.
$$\begin{aligned}
c_i:=&E_k(m_i+c_{i-1})\\
E_{k,IV}(m_1,...,m_r) :=&(c_1,...,c_r)
\end{aligned}$$
\includegraphics{CBC_enc.png}\\
Bei der Entschlüsselung wird wie folgt vorgegangen:
$$\begin{aligned}
m_i :=&D_k(c_i)+c_{i-1}\\
D_{k,IV}(c_1,...,c_r):=&(m_1,...,m_r)
\end{aligned}$$
\includegraphics{CBC_dec.png}
\subsection{CBC-CS (Chiphertext Stealing for CBC Mode)}
Der CBC-CS-Modus wird auch als CTS-Modus (Chiphertext Stealing Mode) bezeichnet.
Dieser Modus basiert auf dem CBC-Modus (siehe \ref{CBC}), erlaubt aber eine Verschlüsselung von Nachrichten mit beliebiger Länge (ohne Padding).
Um das Padding zu umgehen gibt es mehrere Varianten:
\subsubsection{CBC-CS1}
Bei der Variante 1 der CBC-CS-Verschlüsselung wird der letzte Block $m^*_r$ der Nachricht mit 00-Bytes auf die Blocklänge aufgefüllt (00-Padding).
Anschließend wird die Nachricht inkl. dem gepaddeten Block $m_r$ mit dem CBC-Verfahren (siehe \ref{CBC}) verschlüsselt.
Um wieder auf die ursprüngliche Länge der Nachricht zu kommen werden aus dem vorletzten Block $c_{r-1}$ des Geheimtextes die gleiche Anzahl Bytes entfernt, die zu $m^*_r$ hinzugefügt wurden.
Hierdurch ergibt sich die Geheimtextnachricht $c_1,...,c_{r-2},c^*_{r-1},c_r$, die die gleiche Länge wie $m$ hat.\\
Wenn die Länge der Nachricht $m$ ein Vielfaches des Blocklänge $l$ ist wird das normale CBC-Verschlüsselungsverfahren angewandt.
\subsubsection{CBC-CS2}
Bei der Variante 2 der CBC-CS-Verschlüsselung wird auf die gleiche Weise vorgegangen, wie bei Variante 1.
Allerdings werden, \textbf{falls} ein Padding notwendig ist nach der Verschlüsselung und dem Stealing die letzten beiden Blöcke vertauscht.
$$E-CBC-CS2_{k,IV}(m_1,...,m_{r-1},m^*_r) := (c_1,...,c_r,c^*_{r-1})$$
Wenn die Länge der Nachricht $m$ ein Vielfaches des Blocklänge $l$ ist wird das normale CBC-Verschlüsselungsverfahren angewandt.
\subsubsection{CBC-CS3}
Die Variante 3 der CBC-CS-Verschlüsselung unterscheidet sich nur darin von der Variante 2, dass immer die letzten beiden Blöcke vertauscht werden.
Dies geschieht ungeachtet davon, ob die Länge der Nachricht $m$ ein Vielfaches der Blocklänge $l$ ist.
\subsection{CTR (Counter)}
Im CTR-Modus wird ein Blockverschlüsselungsverfahren $E$ mit einem Schlüssel $k$ und einem Nonce-Wert $Ctr\in\mathscr M$ wie folgt verwendet:
$$\begin{aligned}
c_i :=&m_i+E_k(Ctr\boxplus(i-1))
E-CTR_{k,Ctr}(m_1,...,m_r):=&(c_1,...,c_r)
\end{aligned}$$
Der CTR-Modus definiert ein synchrones additives Stromverschlüsselungsverfahren (siehe \ref{synchron additive Stromverschlüsselung}).
Die Menge der $z_i=E_k(Ctr\boxplus(i-1))$ definiert hierbei den Schlüsselstrom.\\
Aufgrund dessen ist die Entschlüsselungsfunktion $D$ gleich der Verschlüsselungsfunktion $E$:
$$D-CTR_{k,Ctr}(c_1,...,c_r)=E-CTR_{k,Ctr}(c_1,...,c_r)$$
\includegraphics{CTR.png}