it-swarm.com.de

Wie und wann verwende ich HMAC?

Ich las HMAC auf Wikipedia und war über einige Punkte verwirrt.

  1. Wo verwende ich HMAC?
  2. Warum ist der Schlüssel Teil des Hash?
  3. Selbst wenn jemand erfolgreich einen "Längenerweiterungsangriff" verwendet hätte, wie wäre das für den Angreifer nützlich?
145
user5575

Ein Nachrichtenauthentifizierungscode (MAC) wird aus einer Nachricht und einem geheimen Schlüssel von einem MAC-Algorithmus erzeugt. Eine wichtige Eigenschaft eines MAC ist, dass es unmöglich ist¹, den MAC einer Nachricht und eines geheimen Schlüssels zu erzeugen, ohne den geheimen Schlüssel zu kennen. Ein MAC derselben Nachricht, der von einem anderen Schlüssel erzeugt wird, sieht nicht verwandt aus. Selbst wenn Sie den MAC anderer Nachrichten kennen, hilft dies nicht bei der Berechnung des MAC einer neuen Nachricht.

Ein HMAC ist ein MAC, der auf einem Hash-Funktion basiert. Die Grundidee besteht darin, den Schlüssel und die Nachricht zu verketten und zusammen zu hashen. Da es bei einem kryptografischen Hash unmöglich ist, herauszufinden, worum es sich bei dem Hash handelt, ist es nicht möglich, den Schlüssel zu finden, wenn man den Hash (oder sogar eine Sammlung solcher Hashes) kennt. Die Grundidee funktioniert nicht ganz, teilweise wegen Längenerweiterungsangriffe , so dass die eigentliche HMAC-Konstruktion etwas komplizierter ist. Weitere Informationen finden Sie im hmac-Tag bei Cryptography Stack Exchange , insbesondere Warum ist H (k || x) keine sichere MAC-Konstruktion? , Ist H. (k || Länge || x) eine sichere MAC-Konstruktion? und HMAC vs MAC-Funktionen . Es gibt andere Möglichkeiten, einen MAC zu definieren, z. B. MAC-Algorithmen, die auf Blockchiffren basieren, wie z. B. CMAC .

Ein MAC authentifiziert eine Nachricht. Wenn Alice eine Nachricht und einen MAC sieht und den zugehörigen geheimen Schlüssel kennt, kann sie überprüfen, ob der MAC von einem Principal erstellt wurde, der den Schlüssel kennt, indem sie die MAC-Berechnung selbst durchführt. Wenn eine Nachricht mit einem korrekten MAC geliefert wird, bedeutet dies, dass diese Nachricht irgendwann von einem Inhaber des geheimen Schlüssels gesehen wurde. Ein MAC ist eine Signatur , die auf einem geheimen Schlüssel basiert und ähnliche Sicherheiten bietet wie ein Signaturschema, das auf Kryptographie mit öffentlichem Schlüssel basiert, wie z. B. RSA-basierte Schemata, bei denen die Die Unterschrift muss von einem Auftraggeber erstellt worden sein, der im Besitz des privaten Schlüssels ist.

Angenommen, Alice behält ihren geheimen Schlüssel für sich und verwendet ihn immer nur zum Berechnen von MACs von Nachrichten, die sie auf einem Cloud-Server oder einem anderen unzuverlässigen Speichermedium speichert. Wenn sie später eine Nachricht zurückliest und einen korrekten MAC sieht, weiß sie, dass dies eine der Nachrichten ist, die sie in der Vergangenheit gespeichert hat.

Ein HMAC selbst bietet keine Nachrichtenintegrität. Es kann eine der Komponenten in einem Protokoll sein, das Integrität bietet. Angenommen, Alice speichert aufeinanderfolgende Versionen mehrerer Dateien zusammen mit ihren MACs auf einem unzuverlässigen Medium. (Wieder nehmen wir an, dass nur Alice den geheimen Schlüssel kennt.) Wenn sie eine Datei mit einem korrekten MAC zurückliest, weiß sie, dass das, was sie zurückliest, eine frühere Version einer von ihr gespeicherten Datei ist. Ein Angreifer, der die Kontrolle über das Speichermedium hat, kann weiterhin ältere Versionen der Datei oder eine andere Datei zurückgeben. Eine Möglichkeit, die Speicherintegrität in diesem Szenario bereitzustellen, besteht darin, den Dateinamen und eine Versionsnummer als Teil der Daten anzugeben, deren MAC berechnet wird. Alice müsste sich die neueste Versionsnummer jeder Datei merken, um zu überprüfen, ob sie keine veralteten Daten erhält. Eine andere Möglichkeit, die Integrität sicherzustellen, besteht darin, dass Alice sich den MAC jeder Datei merkt (aber dann würde ein Hash in diesem speziellen Szenario genauso gut funktionieren).

¹ "Unmöglich", da weitaus mehr Rechenleistung benötigt wird als realistisch möglich.

HMAC ist eine berechnete "Signatur", die häufig zusammen mit einigen Daten gesendet wird. Der HMAC wird verwendet, um zu überprüfen (zu authentifizieren), ob die Daten nicht geändert oder ersetzt wurden. Hier ist eine Metapher:

Sie werden Sarah ein Paket schicken, das ein Foto enthält. Sie erwarten, dass sie das Paket öffnet und das Foto ansieht. Irgendwann in naher Zukunft erwarten Sie, dass sie Ihnen das Paket mit dem Foto zurückschickt. Es ist wichtig, dass sie das gleiche Foto wieder in die Verpackung legt. Sie müssen absolut sicher sein, dass sie Ihnen ein verändertes Foto nicht einmal ein bisschen zurückschickt oder durch ein anderes ersetzt. Sie haben Hunderte dieser Pakete, die täglich mit verschiedenen Fotos ausgehen. Sie würden sich nie so detailliert an das Foto erinnern, dass Sie erkennen könnten, ob sie ein wenig davon geändert hat (als ob sie ein kleines Zit von ihrem Gesicht gespritzt hätte).

Folgendes können Sie tun: Bevor Sie ihr das Paket senden, legen Sie eine weitere Kopie des Fotos in eine kleine verschlossene Schachtel. Behalte den Schlüssel. Legen Sie die kleine verschlossene Schachtel zusammen mit dem Originalfoto, das Sie ihr zusenden, in die Verpackung. Angenommen, sie weiß, dass sie die verschlossene Box nicht aus der Verpackung entfernen soll. Wenn Sie das Paket von ihr zurückerhalten, öffnen Sie es und legen Sie das Foto auf den Tisch. Öffnen Sie die verschlossene Box, entfernen Sie die Kopie und vergleichen Sie die beiden. Wenn sie gleich sind, hat sie das Foto nicht verändert (es ist "authentisch"). Wenn sich die verschlossene Box nicht im Paket befindet oder Ihr Schlüssel sie nicht öffnet, nehmen Sie an, dass sie etwas Schändliches getan hat, und werfen Sie das gesamte Paket in den Papierkorb. Das Schöne daran ist, dass Sie sich an nichts "erinnern" müssen, was Sie ihr ursprünglich geschickt haben. Alles, was Sie benötigen, um die Legitimität des Fotos sicherzustellen, ist im Lieferumfang enthalten.

Im obigen Beispiel repräsentiert die kleine gesperrte Box einen HMAC. Ihr Schlüssel ist der Schlüssel des HMAC. Das Foto enthält die Daten, auf die Sie den HMAC anwenden.

Das Obige ist eine Roundtrip-Metapher, bei der nur Sie einen Schlüssel haben. Nehmen wir an, Sie senden in einer anderen Situation häufig Pakete an Tommy. Sie befürchten, dass die neugierigen Postboten Ihre Pakete öffnen und die Fotos ersetzen oder ändern könnten. Sie machen dasselbe mit der verschlossenen Box, außer dass Sie Tommy in diesem Fall eine Kopie des Schlüssels geben, damit er, wenn er ein Paket erhält, die mitgelieferte verschlossene Box öffnen und die Fotos selbst vergleichen kann. Wenn er nach Erhalt feststellt, dass die Fotos unterschiedlich sind, sein Schlüssel die Schachtel nicht öffnet oder die Schachtel fehlt, weiß er, dass etwas faul ist.

Die obigen Metaphern beschreiben, warum HMACs benötigt werden, aber nicht so sehr, wie sie funktionieren. Lassen Sie uns die Metapher noch einmal ändern, um näher an ihre Funktionsweise heranzukommen:

Behalten wir die mentale Bildsprache des Pakets mit dem Foto bei: Sie möchten es verschicken und dann wie zuvor wieder zurückerhalten, um sicherzustellen, dass das Foto nicht vom Empfänger oder während der Rundreise geändert oder ersetzt wurde.

Bevor Sie das Paket schließen und versenden, erstellen Sie eine Kopie des Fotos. Diesmal keine verschlossene Box, stattdessen streichen Sie die Kopie mit einer Mischung aus flüssigen Chemikalien über. Nur Sie kennen das Rezept (den Schlüssel) für diese Mischung, und jedes Mal, wenn Sie eine Kopie überstreichen, verwenden Sie genau die gleichen Pinselstriche. Die Mischung wird die Kopie des Fotos verwirbeln und zu etwas verwischen, das der modernen Kunst ähnelt. Nennen wir es einen HMAC. Sie sind sich nicht ganz sicher, wie es nach dem Trocknen aussehen wird, aber Sie wissen, dass die resultierenden HMACs gleich aussehen, wenn Sie zwei identische Fotos mit demselben Rezept und denselben Pinselstrichen bürsten. Also legen Sie den getrockneten HMAC zusammen mit dem Originalfoto in die Verpackung und senden ihn an Sarah.

Wenn Sie das Paket von Sarah zurückerhalten, enthält es hoffentlich das unveränderte Originalfoto sowie das von Ihnen erwartete und darin enthaltene HMAC. Nehmen Sie das Foto aus der Verpackung, kopieren Sie es und erstellen Sie mit dieser Kopie einen weiteren HMAC (wenden Sie Ihre Mischung/Pinselstriche an). Vergleichen Sie die soeben erstellte HMAC mit der HMAC, die im Paket enthalten ist. Wenn sie identisch sind, können Sie sicher sein, dass Sarah und die Postboten das Foto nicht verändert haben.

Wenn Sarah das Foto geändert hat, sind die HMACs nicht identisch. Wenn Sarah die HMAC geändert hat, sind die HMACs nicht identisch. Wenn Sarah das Foto geändert und versucht hat, eine neue HMAC zu erstellen, sind die HMACs nicht identisch (sie kennt Ihr Rezept nicht).

So wissen Sie, ob das Foto (Daten) authentisch ist oder nicht, genau dafür werden HMACs verwendet.

59
Dave

Die kurze Antwort lautet "HMAC stellt digitale Signaturen mit symmetrische Schlüssel anstelle von PKI bereit". Wenn Sie sich nicht mit der Komplexität öffentlicher/privater Schlüssel, der Vertrauensbasis und der Zertifikatsketten befassen möchten, können Sie mit HMAC dennoch über eine zuverlässige digitale Signatur verfügen. HMAC basiert auf Kryptografie mit symmetrischen Schlüsseln und vorinstallierten Geheimnissen anstelle von privaten/öffentlichen Paaren. Der Nachteil ist der gleiche wie bei der Kryptografie mit symmetrischen Schlüsseln im Allgemeinen. Sie müssen sich jetzt um die Verteilung und den Schutz Ihrer geheimen Schlüssel kümmern.

37
dtoubelis

1. Sie verwenden HMAC, wann immer Sie möchten Integrität der gepflegten Daten (und Authentizität)

2. Der Schlüssel ist Teil der HMAC, da es sich um ein gemeinsames Geheimnis handelt, das nur zwei Parteien bekannt ist und nur diese die HMAC und sonst niemanden erstellen können. (Gewährleistet Authentizität)

3 . Längenerweiterungsangriffe sind nicht möglich auf HMAC. MACs hingegen hängen einfach den Schlüssel an die Nachricht an, die dafür anfällig ist. HMAC wurde eingeführt, um diesen Angriff auf MACs zu überwinden.

14
sudhacker
  • HMACS werden verwendet, wenn Sie zwei "Integrität" und "Authentizität" überprüfen müssen. Beispiel: Stellen Sie sich ein Szenario vor, in dem Ihnen ein Datenelement zusammen mit seinem Hash gesendet wird. Sie können die Integrität der Nachricht überprüfen, indem Sie den Hash der Nachricht neu berechnen und mit dem erhaltenen Hash vergleichen. Sie wissen jedoch nicht genau, ob die Nachricht und der Hash von jemandem gesendet wurden, den Sie kannten/dem Sie vertrauten. Wenn Sie auf die Verwendung von HMACS zurückgegriffen haben, können Sie die HMAC mithilfe eines geheimen Schlüssels neu berechnen, den nur Sie und eine vertrauenswürdige Partei kennen, und ihn mit der HMAC vergleichen, die Sie gerade erhalten haben - im Sinne der "Authentizität".

  • Wie bereits erwähnt, stellt die Geheimhaltung des Schlüssels sicher, dass der HMAC von einer vertrauenswürdigen Partei berechnet wurde.

  • HMACS sind keine verschlüsselten Hashes. Längenerweiterungsangriffe sind möglich, wenn Sie verschlüsselte Hashes und nicht HMACS verwendet haben. Weitere Informationen finden Sie unter this .

[BEARBEITEN]

Antwort bearbeitet, um Kommentar unten zu beantworten: - "Ich verstehe immer noch nicht, warum der Schlüssel in der Nachricht ist? Kenne ich den öffentlichen Schlüssel der Partei nicht? Wenn ich den öffentlichen Schlüssel kenne, warum ist der Schlüssel in der Nachricht dann eher ich Verwenden des bereits bekannten Schlüssels? Wenn ich den Schlüssel nicht kenne, warum sollte ich dann dieser Partei vertrauen? "

  • Der Schlüssel ist nicht "in" der Nachricht. Der Schlüssel wird verwendet , um den HMAC aus einer Nachricht zu generieren. Der zum Generieren von HMACS verwendete Schlüssel ist kein "öffentlicher Schlüssel". Es ist eher ein gemeinsames Geheimnis zwischen zwei Parteien. Sie können die API-Authentifizierungsmethode REST für AWS-Inhalte) überprüfen, um besser zu verstehen, wie HMACS für die URL-Signatur verwendet wird.
5
user1187