Rechnernetze
Home Nach oben

HMAC: Verschlüsseltes Hashing

Verfahren zur Authentisierung 
RFC 2104 
ohne ein Public Key-Verfahren 
Erzeugung eines Hashwerts von Schlüssel abhängig
Kennen zwei Parteien geheimen Schlüssel, 
Unverfälschtheit einer Nachricht beweisen

Aufgabe
erhaltenes Dokument auf Unverfälschtheit
bei Übertragung
bei Speicherung
vorsätzlich  
aktiver Angreifer
könnte Dokument verfälschen 
neuen Hashwert erzeugen
DSA usw. verschlüsseln Hashwert mit privatem Schlüssel
HMAC 
fügt in Dokument geheimen Schlüssel ein 
hashed das so entstandene neue Dokument
kann von Angreifer nicht nachvollzogen werden
könnte höchstens Hashwert fälschen
Authentisierung völlig gescheitert, 
gefälschtes Dokument nicht als echt anerkannt
Ist geheimer Schlüssel nur zwei Parteien bekannt
können mit Schlüssel Unverfälschtheit einer Nachricht garantieren

RFC 2104 nennt die folgenden Entwurfsziele:

  1. Vorhandene Hash-Funktionen unverändert einsetzen
    in Hardware oder Software zur Verfügung 
    Code frei verfügbar  
  2. Schnelligkeit der Hash-Funktionen ausnutzen.
  3. Schlüssel auf einfache Weise behandeln 
  4. gut verstandene kryptographische Analyse des Algorithmus 
    beruht auf vernünftigen Annahmen der zugrundeliegenden Hash-Funktionen 
  5. Hashfunktion einfach ersetzen können
    schnellere oder 
    sicherere Hashfunktionen gefunden/benötigt

 

Verfahren basiert auf Sicherheit bekannter Hash-Verfahren 
MD5, 
SHA-1 oder 
RIPEMD
Text Schlüssel hinzuzufügen
Fingerabdruck hängt nicht nur vom Text, 
sondern auch vom Schlüssel ab
Es werden die folgenden Werte eingeführt:
H: Hashalgorithmus,
B: Eingabeblocklänge des Hashalgorithmus H (z.B. 64 Bytes bei MD5 und SHA-1),
L: Länge des Haswerts (Fingerabdrucks) des Hashalgorithmus H (z.B. L=16 Bytes bei MD5 und L=20 Bytes bei SHA-1),
S: Schlüssel der Länge k<B,
K=S+(0016)B-k, oder falls k>B: K=H(S)+(0016)B-L
IPAD = (0011 01102)B = (3616)B, innerer Pad,
OPAD = (0101 11002)B = (5C16)B, äußerer Pad.
Schlüssel nicht länger als Länge eines Eingabeblocks
Schlüssel länger als B verwendet
Wert des Schlüssels mit H gehasht 
Fingerabdruck der Länge L als Schlüssel verwendet
Schlüssel kürzer als B verwendet
Schlüssel rechts mit 0-Bytes auffüllen
folgenden ist 
K=S+(0016)B-k bzw. 
falls k>B ist K=H(S)+(0016)B-L.
Der Algorithmus berechnet den folgenden Hashwert:
Digest = H(K xor OPAD + H(K xor IPAD + text)).
K mit IPAD verknüpft (xor) 
vor Text gehängt, 
Hashalgorithmus angewendet 
Ergebnis der Länge L an K xor OPAD gehängt 
dieser Wert noch einmal gehasht
Stärke des Algorithmus 
hängt von Stärke des Hashalgorithmus H ab
wenn Schlüssellänge nicht kürzer als L Bits 
beachte, 
Werte (K xor OPAD) und (K xor IPAD) 
können unabhängig von dem Text berechnet werden 
ausdrücklich von RFC 2104 empfohlen
Das RFC 2104 hält dieses Verfahren für sicher
falls folgende Voraussetzungen erfüllt:
  1. HMAC wird korrekt implementiert.
  2. Die Schlüssel werden rein zufällig bzw. mit einem kryptographischen Zufallszahlengenerator erzeugt.
  3. Der Schlüsselaustauschmechanismus ist sicher.
  4. Die Schlüssel werden häufig ausgewechselt.
  5. Die Schlüssel werden sicher aufbewahrt .
Man beachte
Brechen eines Schlüssels bei HMAC macht bisherigen Anwendungen nicht unsicher 
zukünftig 
neuer Hashalgorithmus oder 
neuer Schlüssel
RFC 2104 empfiehlt, Schlüssel häufiger zu ändern!