ef:kryptographie:hash

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
ef:kryptographie:hash [2025/09/25 08:28] lehmannref:kryptographie:hash [2025/09/29 16:06] (aktuell) lehmannr
Zeile 2: Zeile 2:
 <WRAP center 1200px> <WRAP center 1200px>
 ====== III. Hashfunktionen und MACs ====== ====== III. Hashfunktionen und MACs ======
-===== 1. Hasfunktionen ===== +====== 1. Hasfunktionen ====== 
-==== 1.1 Definition und Eigenschaften von Hashfunktionen ====+===== 1.1 Definition und Eigenschaften von Hashfunktionen =====
 <WRAP nicebox blue>  <WRAP nicebox blue> 
 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. 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.
Zeile 17: Zeile 17:
   - **Kollisionsresistenz (Collision Resistance)**: Es ist praktisch unmöglich, zwei **beliebige, unterschiedliche** Eingaben zu finden, die denselben Hashwert ergeben.   - **Kollisionsresistenz (Collision Resistance)**: Es ist praktisch unmöglich, zwei **beliebige, unterschiedliche** Eingaben zu finden, die denselben Hashwert ergeben.
 </WRAP> </WRAP>
-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.+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. Das aktuell am häufigsten eingesetzte Hashverfahren trägt den Namen SHA-256 aus der SHA2-Famile
  
 <WRAP nicebox green> <WRAP nicebox green>
Zeile 34: Zeile 34:
 </WRAP> </WRAP>
  
-==== 1.2 Wo werden Hashfunktionen eingesetzt? ====+===== 1.2 Wo werden Hashfunktionen eingesetzt? =====
  
 Hashfunktionen sind in der Kryptografie allgegenwärtig und haben zahlreiche Anwendungsfälle: Hashfunktionen sind in der Kryptografie allgegenwärtig und haben zahlreiche Anwendungsfälle:
  
-=== 1.2.1 Integritätsprüfung von Daten ===+==== 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.  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 ===+==== 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. 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.
  
-==== Kennwort-Hashing ==== +==== 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. 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.
  
-==== Grundlage für andere Kryptosysteme ==== +==== 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. 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.
  
Zeile 56: Zeile 56:
  
  
-===== Message Authentication Codes (MACs) =====+====== 2. Message Authentication Codes (MACs) ======
  
 <WRAP nicebox blue> <WRAP nicebox blue>
-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 **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**, um eine eindeutige Ausgabe zu erzeugen, den **Authentifizierungs-TAG**.+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)
 </WRAP> </WRAP>
  
-==== Die Hauptanwendungsgebiete von MACs ==== +==== 2.1 MACs bieten Authentizität und Integrität ==== 
-  **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+**Authentizität** 
-  **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.+ 
 +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 vom Absender stammt, der den privaten Schlüssel besitzt
 + 
 +**Integrität** 
 + 
 +MACs garantieren, dass die Daten vollständig und unverändert sind. Wurden die Daten bei der Übertragung verändert, so erhält der Empfänger bei seiner Berechnung nicht denselben Wert wie der Absender. 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. Wichtige MAC-Implementierungen sind **HMAC** (Hash-basierter MAC), der oft mit SHA-2 verwendet wird, und **KMAC**, der auf SHA-3 basiert.
  
-====Unterschied zur digitalen Signatur (siehe nächstes Kapitel)====+==== 2.2 Unterschied zur digitalen Signatur (siehe nächstes Kapitel)====
  
 <WRAP nicebox blue> <WRAP nicebox blue>
Zeile 78: Zeile 87:
 </WRAP> </WRAP>
  
-==== Authentifizierung und Verbindlichkeit ====+==== 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**. 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**.
Zeile 84: Zeile 93:
 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**. 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**.
  
-==== Anwendungsfälle ====+==== 2.5 Anwendungsfälle und Abgrenzung zu Digitalen Signaturen ====
  
 **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. **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.
 +Mit **MACs** kann der Sender jeweils sicher sein, dass die Nachricht vom Empfänger stammt und umgekehrt, da nur sie den privaten Schlüssel kennen, um den MAC zu erstellen.
 +
 +Aber wenn eine ** Drittperson ** sicher sein soll, dass die Meldung vom Sender stammt, **eignen sich MACs nicht**. Denn die Drittperson kann den MAC nicht prüfen, da sie den geheimen Schlüsseln icht kennt. Selsbt wenn Sender/Empfänger der Drittperson den Schlüssel aushändigen würde, könnte sie nicht nachweisen, ob die Nachricht vom Sender oder vom Empfänger stammte, da ja beiden denselben privaten Schlüssel verwenden.
 +
 +Um sich gegenüber anderen Parteien zu authentifizieren, verwendet man deshalb ein anderes Konzept: **Digitale Signaturen** (vgl. das nächste Kapitel). Diese basieren auf asymmetrischer Kryptographie.
 +
 +===== 3. AEAD-Algorithmen =====
 +Bis vor kurzer Zeit (bis zum Standard TLS 1.2) wurden die Daten symmetrisch mit einer Blockchiffre verschlüsselt (z.B: mit AES im CBS-Modus) und dann zusätzlich mit einem MAC versehen (z.B. HMAC-SHA256), um die Integrität und Authentizität zu gewährleisten. Von der Reihenfolge her gab es beide Varianten: Encrypt-then-MAC oder MAC-then-encrypt, wobei letzeres als anfällig für Hackerangriffe gilt.  
 +
 +Ab TLS 1.3 wurden diese beiden Schritte in einem Protokoll kombiniert. Die sogenannten **AEAD-Algorithmen (Authenticated Encryption with Associated Data)** machen also beides: **sie verschlüsseln die Daten symmmetrisch** und fügen dann einen MAC hinzu, um die Integrität und Authentizität zu gewährleisten. Die zwei AEAD-Algorithmen, die man aktuell antrifft, sind AES-GCM (verwendet AES für die Verschlüsselung und GMAC für den Message Authentication Code) oder ChaCha-Poly1305 (verwendet ChaCha für die symmetrische Verschlüsselung und Poly1305 als MAC). 
 +
 +In den Protokollen wird häufig noch die Hashfunktion angegeben, welche verwendet werden. Dies ist vorallem beim Handshake relevant. Der gesamte Handshake wird in einer sogenannten Finished-Nachricht gehashed, damit Server und Client vergleichen können, dass beide denselben Handshake vorgenommen haben). Dadurch werden Man-in-the-middle-Attacken verhindert. Aber auch die Signaturen (siehe späteres Kapitel) werden zuerst damit gehashed und dann mit dem privaten Schlüssel des Ausstellers signiert.
 +
  
-**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.+[[ef:start|Zurück zur Übersicht]] 
  
 </WRAP> </WRAP>
  • ef/kryptographie/hash.1758781730.txt.gz
  • Zuletzt geändert: 2025/09/25 08:28
  • von lehmannr