Cryptography Reference
In-Depth Information
HMAC
Es gibt mehrere einfache Methoden, um aus einer kryptografischen Hashfunk-
tion eine schlüsselabhängige Hashfunktion zu konstruieren (
k
ist im Folgenden
der Schlüssel,
U
das Urbild,
H
eine kryptografische Hashfunktion und
h
der
Hashwert). Von diesen einfachen Methoden gilt folgende als die beste:
h
=
H
(
k
,
U
,
k
). Der Schlüssel wird also sowohl vor dem Urbild als auch dahinter plat-
ziert. Allerdings hat diese Methode theoretische Schwächen [PreOor], weshalb
sie oft gemieden wird.
Als sicher gilt dagegen eine Methode namens
HMAC
(»H« steht hierbei für
Hashfunktion; »MAC« ist, wie erwähnt, ein anderes Wort für eine schlüsselab-
hängige Hashfunktion). Die HMAC-Methode ist mehrfach standardisiert
[RFC2104, RFC2202, FIPS-198]. Sie lässt sich mit jeder beliebigen kryptografi-
schen Hashfunktion realisieren, vorteilhaft ist jedoch eine Funktion, die auf die
gängige Art mit einem Status arbeitet. Ist
b
die Blocklänge der Hashfunktion,
dann muss die Schlüssellänge ebenfalls
b
betragen (falls notwendig wird ein kür-
zerer Schlüssel mit Null-Bits aufgefüllt). Zur Definition von HMAC benötigen
wir außerdem die beiden Variablen
opad
und
ipad
. Beide sind Bit-Folgen der
Länge
b
.
opad
besteht aus lauter Bytes mit dem Wert 01011100,
ipad
aus lauter
Bytes mit dem Wert 00110110. Eine HMAC-Funktion ist nun wie folgt definiert
(»||« steht für die Konkatenation):
h
=
H
((
k
⊕
opad)||H
((
k
⊕
ipad
)
||U)
)
Die verwendete kryptografische Hashfunktion kommt also doppelt zum Einsatz.
Dieser Nachteil lässt sich kompensieren, wenn derselbe Schlüssel für unterschied-
liche Urbilder verwendet wird und ein mit Status arbeitendes Verfahren wie SHA-
1 verwendet wird. In diesem Fall hat
k
opad
immer denselben Wert, wodurch
die Initialisierung des Status für eine der beiden Abarbeitungen der Hashfunktion
vorberechnet werden kann. Durch diese Besonderheit sind HMAC-Funktionen
relativ performant. Obendrein gelten sie als sicher. Kein Wunder, dass sie in der
Praxis häufig eingesetzt werden.
⊕
CBC-MAC
Es gibt zahlreiche Möglichkeiten, aus einem symmetrischen Verschlüsselungsver-
fahren eine schlüsselabhängige Hashfunktion zu generieren. Die wichtigste
davon hat den Namen
CBC-MAC
. Diese Methode ist mit jeder beliebigen Block-
chiffre (z.B. AES) anwendbar. Sie sieht vor, dass Alice das Urbild im CBC-Modus
verschlüsselt (mit
k
als Schlüssel). Der letzte Block des Geheimtexts ist der Hash-
wert. Als Initialisierungsvektor wird meist eine Folge von Null-Bits verwendet,
zudem ist ein Padding des Urbilds notwendig.
Die Idee des CBC-MAC ist schon recht alt. Bereits 1985 wurde diese
Methode in Form des (inzwischen nicht mehr gültigen) US-Standards FIPS-113
standardisiert. Als symmetrisches Verschlüsselungsverfahren ist dabei der DES