85 lines
6.4 KiB
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} |