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:
- Vorhandene Hash-Funktionen unverändert einsetzen
in Hardware oder Software zur Verfügung
Code frei verfügbar
- Schnelligkeit der Hash-Funktionen ausnutzen.
- Schlüssel auf einfache Weise behandeln
- gut verstandene kryptographische Analyse des
Algorithmus
beruht auf vernünftigen Annahmen der zugrundeliegenden Hash-Funktionen
- Hashfunktion einfach ersetzen können
schnellere oder
sicherere Hashfunktionen gefunden/benötigt
|
| Verfahren basiert auf Sicherheit bekannter
Hash-Verfahren
|
| 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: |
|
- HMAC wird korrekt implementiert.
- Die Schlüssel werden rein zufällig bzw. mit einem kryptographischen
Zufallszahlengenerator erzeugt.
- Der Schlüsselaustauschmechanismus ist sicher.
- Die Schlüssel werden häufig ausgewechselt.
- 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! |
|
|