Dies ist eine alte Version des Dokuments!
III. Hashfunktionen und MACs
1. Hasfunktionen
1.1 Definition und Eigenschaften von Hashfunktionen
Eine Hashfunktion ist ein kryptografischer Algorithmus, der eine beliebige Eingabe (wie eine Datei, eine Nachricht oder ein Video) entgegennimmt und eine Ausgabe fester Länge erzeugt, die als Hashwert oder Digest bezeichnet wird. Dieser Prozess ist deterministisch: Dieselbe Eingabe wird immer denselben Hashwert generieren, doch selbst eine winzige Änderung in der Eingabe führt zu einer völlig anderen Ausgabe.
Hashfunktionen sind Einwegfunktionen: Es ist praktisch unmöglich, aus der Ausgabe (dem Hashwert oder Digest) die ursprüngliche Eingabe wiederherzustellen. Diese Eigenschaft macht sie zu einem vielseitigen und fundamentalen Baustein in der modernen Kryptografie.
Damit eine Hashfunktion im Kontext der Kryptographie eingesetzt werden kann, muss sie die folgenden Eigenschaften erfüllen:
- Es muss eine Einwegfunktion sein (Urbildresistenz): Bei einem gegebenen Hashwert ist es praktisch unmöglich, die ursprüngliche Eingabe zu finden, die diesen Hashwert erzeugt hat. Dies gilt jedoch nur, wenn der Eingaberaum groß und nicht vorhersagbar ist.
- Zweite Urbildresistenz (Second Preimage Resistance): Zu einer gegebenen Eingabe und ihrem Hashwert ist es praktisch unmöglich, eine andere Eingabe zu finden, die denselben Hashwert erzeugt.
- Kollisionsresistenz (Collision Resistance): Es ist praktisch unmöglich, zwei beliebige, unterschiedliche Eingaben zu finden, die denselben Hashwert ergeben.
Damit diese Eigenschaften in der Praxis gelten, muss die Ausgabelänge des Hashwerts gross genug sein. Für Kollisionsresistenz werden heute mindestens 256 Bit empfohlen, da dies eine Sicherheit von 128 Bit gegen sogenannte Geburtstagsangriffe bietet.
Aufgabe 1
Recherchiere, was ein Geburtstagsangriff ist und wie dieser mit dem sogenannten Geburtstagsparadoxon zusammenhängt.
Aufgabe 2 Finde heraus, in welchen Zusammenhängen aktuell Hash-Funktionen eingesetzt werden.
Aufgabe 3 Du lädst auf einer dubiosen Seite die Staffel 5 der Serie „Fargo“ runter und dort ist ein SHA256-Hash angegeben. Nachdem du den Film runtergeladen hast, berechnest du den SHA256-Hash und erhältst genau dasselbe. Was sagt dies aus? Welches Problem besteht immer noch?
Aufgabe 4 Welches Problem tritt auf, wenn Passwörter in Klartext gespeichert werden? Warum sollte man nicht unbedingt SHA256 verwenden, um Passwörter zu speichern? Welche Rolle spielen Brute-Force und Rainbow-Tables in diesem Zusammenhang? Was ist „Salz“ (Salt) und wozu setzt man es ein?
1.2 Wo werden Hashfunktionen eingesetzt?
Hashfunktionen sind in der Kryptografie allgegenwärtig und haben zahlreiche Anwendungsfälle:
1.2.1 Integritätsprüfung von Daten
Ein klassisches Beispiel ist die Überprüfung von heruntergeladenen Dateien. Eine Webseite bietet eine Datei zum Download an und veröffentlicht deren Hashwert. Nach dem Download kann der Benutzer den Hashwert der Datei selbst berechnen und mit dem veröffentlichten Wert vergleichen. Stimmen die Hashwerte überein, wurde die Datei nicht verändert. Durch dieses Prinzip kann ganz allgemein die Integrität einer Übertragung überprüft werden. Integrität bedeutet, dass die Daten bei der Übertragung nicht verändert wurden.
1.2.2 Commitment-Verfahren
Man kann sich auf eine Information festlegen (z.B. eine Vorhersage), ohne sie preiszugeben, indem man ihren Hashwert veröffentlicht. Zu einem späteren Zeitpunkt kann man die ursprüngliche Information offenlegen und jeder kann durch erneutes Hashen überprüfen, dass man sich tatsächlich auf diese Information festgelegt hatte. Dies kann z.B. für digitale Abstimmungen, Auktionen oder für „Zero Knowledge Proofs“ verwendet werden.
1.2.3 Kennwort-Hashing
Anstatt Passwörter im Klartext zu speichern, speichern Systeme die Hashwerte der Passwörter. Bei der Anmeldung wird das eingegebene Passwort gehasht und das Ergebnis mit dem gespeicherten Hashwert verglichen. Hierfür werden spezielle, absichtlich langsame Hashfunktionen wie Argon2 verwendet, um Brute-Force-Angriffe zu erschweren.
1.2.4 Grundlage für andere Kryptosysteme
Hashfunktionen sind ein fundamentaler Baustein für viele andere kryptografische Verfahren, beispielsweise werden Nachrichten bei der Digitalen Signatur typischerweise gehasht, bevor sie signiert werden. Dies ist effizienter und sicherer.
Nachrichtenauthentifizierungscodes (MACs): Konstruktionen wie HMAC verwenden Hashfunktionen zusammen mit einem geheimen Schlüssel, um die Authentizität und Integrität von Nachrichten sicherzustellen.
Auch in Kryptowährungen wie Bitcoin werden Adressen oft als Hash eines öffentlichen Schlüssels dargestellt.
2. Message Authentication Codes (MACs)
Ein Nachrichtenauthentifizierungscode (Message Authentication Code, MAC) ist ein kryptografisches Verfahren, das die Integrität und Authentizität von Daten schützt. D.h. das sicherstellt, dass die Daten nicht geändert wurden (Integrität) und dass sie tatsächlich vom Absender stammen (Authentizität). Man kann sich einen MAC wie eine Art private Hashfunktion vorstellen, die nur mit einem geheimen Schlüssel berechnet werden kann.
Ein MAC-Algorithmus verwendet zwei Eingaben: eine Nachricht und einen geheimen Schlüssel. Sie produziert dann mithilfe einer Hash-Funktion eine eindeutige Ausgabe, den Authentifizierungs-TAG.
Wie läuft dies konkret ab?
Haben also ein Sender und ein Empfänger denselben geheimen Schlüssel, so kann der Sender seiner Nachricht den Authentifizierungs-Tag mitschicken. Der Empfänger kann dann mit der Nachricht und dem Schlüssel diesen TAG neu berechnen und mit dem erhaltenen Tag vergleichen. Stimmt er überein, so weiss er, dass die Nachricht nicht verändert wurde (Integrität) und dass sie vom Absender mit dem privaten Schlüssel stammen muss (Authentizität).
2.1 Die Hauptanwendungsgebiete von MACs
- Authentifizierung von Nachrichten: MACs stellen sicher, dass eine Nachricht während der Übertragung nicht manipuliert wurde. Der Empfänger, der denselben geheimen Schlüssel besitzt, kann das Authentifizierungs-TAG für die empfangene Nachricht neu berechnen. Stimmt sein berechnetes Tag mit dem empfangenen überein, kann er sicher sein, dass die Nachricht authentisch und unverändert ist.
- Schutz der Integrität: Sie garantieren, dass Daten nachweislich vollständig und unverändert sind. Ein Beispiel hierfür ist der Schutz von zustandslosen Cookies auf einer Webseite. Indem ein Cookie mit einem MAC versehen wird, kann der Server verhindern, dass ein Benutzer die Cookie-Daten (z. B. seinen Benutzernamen) manipuliert, da er ohne den geheimen Schlüssel kein gültiges Authentifizierungs-TAG für die geänderten Daten erstellen kann.
Wichtige MAC-Implementierungen sind HMAC (Hash-basierter MAC), der oft mit SHA-2 verwendet wird, und KMAC, der auf SHA-3 basiert.
2.2 Unterschied zur digitalen Signatur (siehe nächstes Kapitel)
Obwohl sowohl MACs als auch digitale Signaturen die Integrität und Authentizität einer Nachricht sicherstellen, liegt der entscheidende Unterschied in der Art der verwendeten Schlüssel und dem damit verbundenen Vertrauensmodell. MACs verwenden symmetrische Kryptographie, d.h. Sender und Empfänger verwenden denselben geheimen Schlüssel um das Authentifizierungs-TAG zu erzeugen und zu überprüfen.
Digitale Signaturen basieren auf asymmetrischer Kryptografie (Public-Key-Kryptografie). Dabei wird ein Schlüsselpaar verwendet: ein privater Schlüssel zum Signieren und ein zugehöriger öffentlicher Schlüssel zum Überprüfen der Signatur.
2.3 Authentifizierung und Verbindlichkeit
Ein MAC beweist, dass eine Nachricht von jemandem stammt, der den geheimen Schlüssel besitzt. Da aber sowohl Sender als auch Empfänger diesen Schlüssel haben, kann der Empfänger nicht gegenüber einer dritten Partei beweisen, dass die Nachricht tatsächlich vom Sender stammt (und nicht von ihm selbst erstellt wurde). Aus diesem Grund bieten MACs keine Verbindlichkeit.
Eine digitale Signatur hingegen kann nur von der Person erstellt werden, die im Besitz des privaten Schlüssels ist. Da der öffentliche Schlüssel zur Überprüfung allgemein bekannt ist, kann der Empfänger die Urheberschaft der Nachricht gegenüber Dritten beweisen. Der Absender kann nicht leugnen, die Nachricht gesendet zu haben. Signaturen bieten also Verbindlichkeit und Nichtabstreitbarkeit.
2.5 Anwendungsfälle
MACs sind ideal, wenn zwei Parteien bereits einen gemeinsamen geheimen Schlüssel haben und ihre Kommunikation vor Manipulation schützen wollen, ohne dass Dritte involviert sind. Sie sind oft auch schneller als digitale Signaturen.
Digitale Signaturen sind unerlässlich, wenn die Authentizität einer Nachricht gegenüber jedermann nachweisbar sein muss. Ein zentraler Anwendungsfall ist der authentifizierte Schlüsselaustausch in Protokollen wie TLS, wo ein Server seine Identität durch die Signatur seines öffentlichen Schlüssels in einem Zertifikat beweist.