DC_Zusammenfassung/chapters/MAC-Verfahren.tex
2020-09-18 19:26:43 +02:00

39 lines
2.8 KiB
TeX

\chapter{MAC-Verfahren}
Der \textit{Message Authentication Code} (MAC) stellt einen \say{digitalen Fingerabdruck} einer Nachricht dar.
Dieser hängt von der Nachricht $m$ und einem Schlüssel $k$ ab.
Die Abbildung $M:\mathscr K \times \mathscr M \rightarrow {\mathbb{Z}_2}^l$ mit einem konstanten $l\in\mathbb{N}$ wird als MAC-Verfahren bezeichnet,
falls ohne einen Schlüssel $k\in\mathscr K$ die Berechnung des MAC-Wertes $t=M_k(m):=M(k,m)$ für kein $m\in\mathscr M$ möglich ist.
Dies soll auch dann nicht möglich sein, falls andere ($m_i$,$t_i$)-Paare bekannt sind.
\section{HMAC}
Jede Hashfunktion (siehe \ref{Hashfunktionen}) $H$ lässt sich in ein MAC-Verfahren $M=\text{HMAC-}H$ umwandeln durch:
$$M_k(m):=H\left( (k\oplus\text{opad}) || H((k\oplus ipad)||m) \right)$$
opad und ipad sind fest definierte Bytearrays der Bytelänge $r/8$.
\section{CMAC, CBC-MAC}
Im Folgenden wird auf zwei MAC-Konstruktionen eingegangen, die auf der Basis von Blockverschlüsselungsverfahren (siehe \ref{Blockverschlüsselungsverfahren}) definiert sind:
\subsection{CMAC}
Die Berechnung des MAC-Wertes $M_k(m)=M(k,m)$ mithilfe eines Blockverschlüsselungsverfahrens $E:\mathscr K \times ({\mathbb{Z}_2}^8)^n \rightarrow({\mathbb{Z}_2}^8)^n$ erfolgt,
indem die durch ein Bytearray gegebene Nachricht $m$ wie folgt verändert wird:
\begin{enumerate}
\item $m$ wird durch ein Padding von der Form \say{80 00 ... 00} auf ein Vielfaches der Blocklänge $n$ gebracht:
$$\tilde{m}:=\begin{cases}
m & \text{falls }l(m)\mod n=0 \text{ und } l(m)\ne 0\\
m||\underbrace{80 00 ... 00}_{n-(l(m)\mod n)} & \text{falls }l(m)\mod n\ne 0 \text{ oder } l(m)=0
\end{cases}$$
\item $\tilde{m}$ wird in Blöcke der Länge $n$ zerlegt
\item der letzte Block $\tilde{m}_r$ wird wie folgt XOR-Verschlüsselt:
$$m_r:=\begin{cases}
\tilde{m}_r\oplus k_1 &\text{falls }l(m)\mod n = 0 \text{ und }l(m)\ne 0\\
\tilde{m}_r\oplus k_2 &\text{falls }l(m)\mod n \ne 0 \text{ oder }l(m)= 0
\end{cases}$$
$k_1$ und $k_2$ sind Modifikationen von $k_0 := E_k(0)$
\item Die Blöcke inkl. des Verschlüsselten Blocks $m_r$ werden mit $IV=0$ CBC-Verschlüsselt (siehe \ref{CBC})
\item Das Ergebnis wird als MAC-Wert ausgegeben
\end{enumerate}
\subsection{CBC-MAC}
Falls die Nachrichtenmenge nur Nachrichten mit einer festen Bytelänge, die ein Vielfaches der Blocklänge ist, enthält,
kann das CBC-Verfahren (siehe \ref{CBC}) direkt als MAC-Verfahren verwendet werden.