39 lines
2.8 KiB
TeX
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.
|