HMAC

In der Geheimschrift ist HMAC (Kuddelmuddel-basierter Nachrichtenbeglaubigungscode) ein spezifischer Aufbau, für einen Nachrichtenbeglaubigungscode (MAC) zu berechnen, der eine kryptografische Kuddelmuddel-Funktion in die Kombination mit einem heimlichen Schlüssel einschließt. Als mit jedem MAC kann es verwendet werden, um gleichzeitig sowohl die Datenintegrität als auch die Echtheit einer Nachricht nachzuprüfen. Jede kryptografische Kuddelmuddel-Funktion, wie MD5 oder SHA-1, kann in der Berechnung eines HMAC verwendet werden; der resultierende MAC Algorithmus wird HMAC-MD5 oder HMAC-SHA1 entsprechend genannt. Die kryptografische Kraft des HMAC hängt von der kryptografischen Kraft der zu Grunde liegenden Kuddelmuddel-Funktion, der Größe seiner Kuddelmuddel-Produktionslänge in Bit, und auf der Größe und Qualität des kryptografischen Schlüssels ab.

Eine wiederholende Kuddelmuddel-Funktion zerbricht eine Nachricht in Blöcke einer festen Größe und wiederholt über sie mit einer Kompressionsfunktion. Zum Beispiel funktionieren MD5 und SHA-1 auf 512-Bit-Blöcken. Die Größe der Produktion von HMAC ist dasselbe als diese der zu Grunde liegenden Kuddelmuddel-Funktion (128 oder 160 Bit im Fall von MD5 oder SHA-1, beziehungsweise), obwohl es, wenn gewünscht, gestutzt sein kann.

Die Definition und Analyse des HMAC Aufbaus wurden zuerst 1996 von Mihir Bellare veröffentlicht, hat Canetti und Hugo Krawczyk Geführt, der auch RFC 2104 geschrieben hat. Dieses Papier hat auch eine Variante genannt NMAC definiert, der, selten wenn jemals verwendet, ist. FIPS BAR 198 verallgemeinert und standardisiert den Gebrauch von HMACs. HMAC-SHA-1 und HMAC-MD5 werden innerhalb des IPsec und der TLS Protokolle verwendet.

Definition (von RFC 2104)

Lassen Sie:

  • H (·) seien Sie eine kryptografische Kuddelmuddel-Funktion
  • K, ein heimlicher Schlüssel ausgepolstert nach rechts mit Extranullen zum Eingang sein, blockieren Größe der Kuddelmuddel-Funktion oder das Kuddelmuddel des ursprünglichen Schlüssels, wenn es länger ist als diese Block-Größe
  • M, die Nachricht sein, die zu beglaubigen
ist
  •  zeigen Verkettung an
  •  zeigen exklusiv oder (XOR) an
  • opad, das Außenpolstern (0x5c5c5c … 5c5c, ein Block lange hexadecimal Konstante) sein
  • seien Sie das innere Polstern (0x363636 … 3636, ein Block lange hexadecimal Konstante)

Dann wird HMAC (K, m) durch mathematisch definiert

:HMAC (K, m) = H (K  opad)  H (K  iPad)  M.

Durchführung

Der folgende Pseudocode demonstriert, wie HMAC durchgeführt werden kann. Blocksize ist 64 (Bytes), wenn er eine der folgenden Kuddelmuddel-Funktionen verwendet: SHA-1, MD5, RIPEMD-128/160.

fungieren Sie hmac (Schlüssel, Nachricht)

wenn (Länge (Schlüssel)> blocksize) dann

Schlüssel = Kuddelmuddel (Schlüssel)

enden Sie wenn

wenn (Länge (Schlüssel)

enden Sie wenn

o_key_pad = [0x5c * blocksize]  Schlüssel

i_key_pad = [0x36 * blocksize]  Schlüssel

geben Sie Kuddelmuddel (o_key_pad  Kuddelmuddel (i_key_pad  Nachricht)) zurück

beenden Sie Funktion

Der folgende ist eine Pythonschlange-Durchführung von HMAC-MD5:

  1. !/usr/bin/env-Pythonschlange

von hashlib importieren md5

trans_5C = "".join ([chr (x ^ 0x5c) für x in xrange (256)])

trans_36 = "".join ([chr (x ^ 0x36) für x in xrange (256)])

blocksize = md5 .block_size

def hmac_md5 (Schlüssel, msg):

wenn len (Schlüssel)> blocksize:

Schlüssel = md5 (Schlüssel).digest

Schlüssel + = chr (0) * (blocksize - len (Schlüssel))

o_key_pad = key.translate (trans_5C)

i_key_pad = key.translate (trans_36)

geben Sie md5 (o_key_pad + md5 (i_key_pad + msg).digest ) zurück

wenn __ __ == "__ wichtig __" nennen:

h = hmac_md5 ("Schlüssel", "Springt der schnelle braune Fuchs über den faulen Hund")

drucken Sie h.hexdigest

#80070713463e7749b90c2dc24911e275 </Quelle>

Beispiel-Gebrauch

Ein Geschäft, das unter Angreifern leidet, die betrügerische Internetaufträge erteilen, kann darauf bestehen, dass alle seine Kunden einen heimlichen Schlüssel mit ihnen ablegen. Zusammen mit einer Ordnung muss ein Kunde die HMAC Auswahl der Ordnung, das geschätzte Verwenden des symmetrischen Schlüssels des Kunden liefern. Das Geschäft, den symmetrischen Schlüssel des Kunden wissend, kann dann nachprüfen, dass an der Ordnung, die vom festgesetzten Kunden hervorgebracht ist, und nicht herumgebastelt worden ist.

Designgrundsätze

Das Design der HMAC Spezifizierung wurde durch die Existenz von Angriffen auf mehr triviale Mechanismen motiviert, für einen Schlüssel mit einer Kuddelmuddel-Funktion zu verbinden. Zum Beispiel könnte man dieselbe Sicherheit annehmen, die HMAC zur Verfügung stellt, konnte mit MAC = H (Schlüssel  Nachricht) erreicht werden. Jedoch leidet diese Methode unter einem ernsten Fehler: Mit den meisten Kuddelmuddel-Funktionen ist es leicht, Daten an der Nachricht anzuhängen, ohne den Schlüssel zu wissen und einen anderen gültigen MAC ("Angriff der Länge-Erweiterung") zu erhalten. Die Alternative, den Schlüssel mit MAC = H (Nachricht  Schlüssel) anhängend, leidet unter dem Problem, dass ein Angreifer, der eine Kollision in der (unverschlüsselten) Kuddelmuddel-Funktion finden kann, eine Kollision im MAC hat (weil zwei Nachrichten m1 und m2, die dasselbe Kuddelmuddel nachgeben, dieselbe Anfang-Bedingung der Kuddelmuddel-Funktion zur Verfügung stellen werden, bevor der angehangene Schlüssel hashed ist, folglich wird das Endkuddelmuddel dasselbe sein). Das Verwenden von MAC = H (Schlüssel  Nachricht  Schlüssel) ist jedoch besser verschiedene Sicherheitspapiere haben Verwundbarkeit mit dieser Annäherung vorgeschlagen, selbst wenn zwei verschiedene Schlüssel verwendet werden.

Keine bekannten Erweiterungsangriffe sind gegen die HMAC aktuelle Spezifizierung gefunden worden, die als H definiert wird (key1  H (key2  Nachricht)), weil die Außenanwendung der Kuddelmuddel-Funktion das Zwischenergebnis des inneren Kuddelmuddels maskiert. Die Werte des iPad und opad sind zur Sicherheit des Algorithmus nicht kritisch, aber wurden auf solche Art und Weise definiert, um eine große Entfernung von Hamming von einander zu haben, und so werden die inneren und Außenschlüssel weniger Bit gemeinsam haben.

Sicherheit

Die kryptografische Kraft des HMAC hängt von der Größe des heimlichen Schlüssels ab, der verwendet wird. Der allgemeinste Angriff gegen HMACs ist rohe Gewalt, um den heimlichen Schlüssel aufzudecken. HMACs werden durch Kollisionen wesentlich weniger betroffen als ihre zu Grunde liegenden hashing Algorithmen allein.

Deshalb leidet HMAC-MD5 unter denselben Schwächen nicht, die in MD5 gefunden worden sind.

2006 haben Jongsung Kim, Alex Biryukov, Bart Preneel und Seokhie Hong gezeigt, wie man HMAC mit reduzierten Versionen von MD5 und SHA-1 oder vollen Versionen von HAVAL, MD4 und SHA-0 von einer zufälligen Funktion oder HMAC mit einer zufälligen Funktion unterscheidet. Differenzial distinguishers erlaubt einem Angreifer, einen Fälschungsangriff auf HMAC auszudenken. Außerdem können Differenzial und Rechteck distinguishers zu Angriffen des zweiten Vorimages führen. HMAC mit der vollen Version von MD4 kann mit diesen Kenntnissen geschmiedet werden. Diese Angriffe widersprechen dem Sicherheitsbeweis von HMAC nicht, aber gewähren Einblick in auf vorhandenen kryptografischen Kuddelmuddel-Funktionen gestützten HMAC.

Mindestens theoretisch konnte ein Timing-Angriff durchgeführt werden, um eine HMAC Ziffer durch die Ziffer herauszufinden.

Beispiele von HMAC (MD5, SHA1, SHA256)

Hier sind einige leere HMAC-Werte -

HMAC_MD5 ("" "",) = 0x74e6f7298a9c2d168935f58c001bad88

HMAC_SHA1 ("" "",) =

0xfbdb1d1b18aa6c08324b7d64b71fb76370690e1d

HMAC_SHA256 ("" "",) =

0xb613679a0814d9ec772f95d778c35fc5ff1697c493715653c6c712144292c5ad

Hier sind einige nichtleere HMAC-Werte -

HMAC_MD5 ("Schlüssel", "Springt der schnelle braune Fuchs über den faulen Hund"), = 0x80070713463e7749b90c2dc24911e275

HMAC_SHA1 ("Schlüssel", "Springt der schnelle braune Fuchs über den faulen Hund"), =

0xde7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9

HMAC_SHA256 ("Schlüssel", "Springt der schnelle braune Fuchs über den faulen Hund"), =

0xf7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8

Zeichen: Eingang data+key ist des einzelnen Bytes ANSI Vielfalt und nicht Zwei-Byte-UCS-2 hat Charaktere von Unicode verschlüsselt.

Außenverbindungen

Zeichen
  • Mihir Bellare, hat Canetti und Hugo Krawczyk Geführt, Kuddelmuddel-Funktionen für die Nachricht Beglaubigung, GEHEIM-1996, pp1-15 (PS oder PDF) Eingebend.
  • Mihir Bellare, hat Canetti und Hugo Krawczyk, Nachrichtenbeglaubigung mit Kuddelmuddel-Funktionen Geführt: Der HMAC Aufbau, CryptoBytes 2 (1), Frühling 1996 (PS oder PDF).

KA9Q / Schlüsselübertragungsurkunde
Impressum & Datenschutz