HMAC Algorithmus



  • Hallo,

    wie funktioniert eigenltich der HMAC-MD5 Algorithmus?

    Sender und Empfänger müssen die gleichen Keys besitzen. Sender verwendet seinen Key um eine Nachricht zu verschlüsseln und schickt diese an den Empfänger - wie kann jetzt dieser an die eigentliche Nachricht gelangen?

    MD5 ist ja ein Hash-Algorithmus, so dass beide Seiten die gleichen Schlüssel besitzen müssen und auch den Klartext, damit beide die gleiche Berechnung durchführen können und somit vergleichen können ob beide Male das gleiche rauskommt?

    Wie funkioniert das genau beim HMAC-MD5? Wie kommt der Empfänger an die verschlüsselte Nachricht und welche Nachricht wird z.B. über so eine HMAC Funktion übermittelt?

    Gruß
    Lara



  • die buchstaben MAC in HMAC bedeuten ja 'message authentication code', also damit kann man sich beim empfänger ausweisen, ob man berechtigt war, die message zu verschicken und ob dieser MAC zu dieser message gehört. das ist sowas wie 'ne digitale unterschrift. die nachricht selber kann man nicht aus dem MAC wieder erzeugen.
    🙂



  • Ich denke du hast da was falsch verstanden. Zumindest laut Wikipedia ist HMAC ein Verfahren um Nachrichten zu authentifizieren, nicht zu verschlüsseln.

    http://en.wikipedia.org/wiki/HMAC

    D.h. die Nachricht wird Klartext übertragen, allerdings kann der Empfänger prüfen ob sie "authentisch" ist, d.h. ob sie wirklich vom angeblichen Verfasser stammt.

    Dazu muss zusätzlich zur eigentlichen Nachricht der HMAC (Hash Message Authentication Code) übertragen werden.

    Wenn du Daten verschlüsseln willst musst du was anderes verwenden, z.B. einen Block-Cipher ( http://en.wikipedia.org/wiki/Block_cipher ) ala AES ( http://en.wikipedia.org/wiki/Advanced_Encryption_Standard ). Diesen wendest du dann in einer bestimmten Art und Weise auf deinen Input an ( http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation ). Welches Verfahren (welcher "Modus") am Besten geeignet ist kommt auf die jeweilige Anwendung an. Aber selber lesen & denken macht schlau 😉

    EDIT: ok, da war wohl wer schneller. auch gut 🙂



  • crypto-freak schrieb:

    die buchstaben MAC in HMAC bedeuten ja 'message authentication code', also damit kann man sich beim empfänger ausweisen, ob man berechtigt war, die message zu verschicken und ob dieser MAC zu dieser message gehört. das ist sowas wie 'ne digitale unterschrift. die nachricht selber kann man nicht aus dem MAC wieder erzeugen.
    🙂

    Im Prinzip hab ich das schon verstanden. Aber der Sender muss ja eine Nachricht mit einem Key verschlüsseln und dann los-schicken -> der Empfänger hat den gleichen Key wie der Sender. Aber er benötigt doch auch die gleiche Nachricht, die der Sender verschlüsselt hat - woher weiß der Empfänger dies?

    Wenn lediglich MD5 eingesetzt wird, ist es mir klar, da beide die gleichen Schlüssel besitzen und somit voneinander unabhängig den gleichen Hash erzeugen können und somit gegeneinander vergleichen können.

    Gruß
    Lara



  • Also mal ganz einfach.

    Meine nachricht ist "12345678".
    Der Key ist "1212"

    Nun verknüpfen wir Nachricht und Key (z.B. einfach mit Addition der einzelnen Ziffern mit "wrap around" auf 0, und den Key wiederholen wir einfach, da er ja kürzer ist als die Nachricht). Ergebnis: "24466880".
    Als Hashcode nehmen wir nicht MD5, sondern der anschaulichkeit halber einfach die Quersumme der Ziffern: 2+4+4+6+6+8+8+0 = 38.

    Nun übertragen wir "12345678", "38".

    Der Empfänger kennt nun den Key "1212" (muss er schon kennen), und die Nachricht "12345678" (hab ich ihm geschickt), und den "message authentication code" der hier "38" ist (hab ich ihm auch geschickt).

    Da der Empfänger das verwendete Verfahren, die Nachricht und den Key kennt, kann er den "message authentication code" selbst auch nochmal ausrechnen.
    Er macht die selbe Rechnung wie oben, und bekommt auch "38" raus.
    Der vom Empfänger selbst errechnete Code und der von mir mitgesendete sind gleich, also kann der Empfänger davon ausgehen dass die Nachricht wirklich von mir ist (bzw. genauer: von jemandem der "meinen" Key kennt).

    Wenn nun jmd. versucht eine Nachricht zu fälschen, aber den Key nicht kennt, kann er den passenden "message authentication code" nicht errechnen. Er muss also raten.

    Natürlich ist das nur als Beispiel zu verstehen, sollte klar sein dass eine einfache Ziffernsumme nicht ausreicht um irgendeine Sicherheit zu gewährleisten.



  • vielen dank für das beispiel, jetzt hab ich`s verstanden...
    🙂



  • hustbaer schrieb:

    Der vom Empfänger selbst errechnete Code und der von mir mitgesendete sind gleich, also kann der Empfänger davon ausgehen dass die Nachricht wirklich von mir ist (bzw. genauer: von jemandem der "meinen" Key kennt).

    und der code genau zu der einen nachricht gehört. der HMAC schägt zwei fliegen mit einer klappe: echtheitsprüfung und dateintegrität. letzteres sollte man nicht unterschlagen.
    🙂



  • huch. ja. natürlich.
    ist aber irgendwie bei allen authentifizierungs-verfahren so, da eine "nicht integre" nachricht ja nichtmehr die originale nachricht ist, also quasi als fälschung anzusehen ist. bzw. einfach als solche erkannt wird - der unterschied zwischen "fake" und "bloss kaputt" ist ja nicht erkennbar.



  • hustbaer schrieb:

    der unterschied zwischen "fake" und "bloss kaputt" ist ja nicht erkennbar.

    richtig, aber das ist ohne belang. in beide fällen gehört die nachricht in den mülleimer.
    🙂


Anmelden zum Antworten