## 🧠 GRUNDLAGEN DER HASHFUNKTIONEN
### Was ist eine Hashfunktion?
- Einwegfunktion: beliebig lange Eingabe → fester Hashwert (Ausgabe).
- Ziel: Aus Hashwert **kann nicht** auf Eingabe geschlossen werden.
- Ein Hashwert = „digitaler Fingerabdruck“.
### Eigenschaften einer **kryptografisch sicheren Hashfunktion**
1. **Einweg-Eigenschaft**: h(M) einfach berechenbar, aber M aus h(M) unberechenbar.
2. **Kollisionsresistenz**:
    - _Schwach_: Für gegebenes x ist es schwer, x′ ≠ x mit h(x) = h(x′) zu finden.
    - _Stark_: Es ist schwer, zwei beliebige x ≠ x′ mit h(x) = h(x′) zu finden.
---
## 🛠️ ANWENDUNGEN
- **Passwort-Speicherung** (nur Hash, kein Klartext)
- **Signaturen**: Signiere h(M), nicht M.
- **Integritätsprüfung**: Prüfsummen, Manipulationserkennung (MIC, MDC)
- **Authentifizierung**: MAC, HMAC
---
## 🔐 HASH-FUNKTIONSTYPEN
|Typ|Beschreibung|
|---|---|
|UHF|Unkeyed Hash Function: h(M)|
|KHF / MAC|Keyed Hash Function: h(M, k) oder h(M, s)|
---
## 📌 MDC & MAC UNTERSCHEIDUNG
### MDC – Manipulation Detection Code
- **OWHF**: One-Way Hash Function = Einweg + schwache Kollision
- **CRHF**: Collision Resistant Hash Function = schwache + starke Kollision
### MAC – Message Authentication Code
- nutzt Schlüssel + Nachricht
- Anforderungen:
    - einfache Berechnung
    - Kompression
    - resistent gegen Manipulation
---
## 🔁 AUFBAU EINER HASHFUNKTION
1. Nachricht in Blöcke fester Länge teilen.
2. Padding auf Vielfaches der Blocklänge.
3. Iterative Verarbeitung mit Kompressionsfunktion.
4. Ergebnis: finaler Hashwert.
---
## 📚 HASH-ALGORITHMEN IM VERGLEICH
|Algorithmus|Hashlänge|Status / Schwächen|
|---|---|---|
|**MD2/MD4**|128 Bit|Veraltet, unsicher|
|**MD5**|128 Bit|Kollisionen bekannt, nicht mehr sicher|
|**SHA-1**|160 Bit|Kollisionen möglich (ab 2005), deprecated|
|**SHA-2**|224–512 Bit|Aktuell sicher|
|**SHA-3**|224–512 Bit|Alternative zu SHA-2 (Keccak)|
|**RIPEMD-160**|160 Bit|Sicher, europäische Alternative|
|**WHIRLPOOL**|512 Bit|Sicher, aber wenig untersucht|
---
## 🔁 HMAC (Hash-based MAC)
- **Verwendet Hash + geheimen Schlüssel**
- Schritte:
    1. Schlüssel ggf. kürzen/padden auf Blockgröße
    2. Zwei Pads: `ipad = 0x36`, `opad = 0x5C`
    3. HMAC = H(opad ⊕ k ∥ H(ipad ⊕ k ∥ M))
- Einsatz in TLS, IPsec etc.
- **Sichert Authentizität & Integrität**, **keine digitale Signatur**
---
## 💥 ANGRIFFE
### Geburtstagsparadoxon
- Wahrscheinlichkeit für Kollision steigt stark mit Anzahl an Inputs.
- 50%-Kollisionschance bei ca. √(2^n) = 2^(n/2)
### Angriffstypen
|Typ|Beschreibung|
|---|---|
|**Pre-Image**|Gegeben h(x), finde ein x|
|**Second Pre-Image**|Gegeben x, finde x′ ≠ x mit h(x) = h(x′)|
|**Collision**|Finde x, x′ ≠ x mit h(x) = h(x′)|
---
## ❌ SICHERHEITSSCHWÄCHEN
### MD5
- Viele Kollisionen gefunden (z. B. durch Dobbertin, Wang, Stach)
- Nicht mehr vertrauenswürdig
### SHA-1
- Kollisionen mit 2^63 Berechnungen möglich (statt 2^80)
- Seit 2010 in den USA und vom BSI abgelehnt
---
## 📌 MERKREGELN FÜR DIE KLAUSUR
- **Hash = Fingerabdruck**, nicht rückrechenbar
- **Kollision = 2 verschiedene Eingaben → gleicher Hash**
- **MDC = prüft Integrität**, **MAC = prüft Integrität + Authentizität**
- **SHA-2 & SHA-3 = derzeit sicher**
- **HMAC ≠ Signatur**, da symmetrisch!