\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.