Passwörter: Wie sie geknackt werden
Wie Passwörter gespeichert werden, Hashing in Python, Salt, Rainbow Tables und wie man starke Passwörter erstellt.
- Sie können die drei Authentifizierungsfaktoren (Wissen, Besitz, Merkmal) unterscheiden und die Zwei-Faktor-Authentifizierung erklären.Verstehen
- Sie können Strategien zur Erstellung sicherer Passwörter anwenden und die Rolle von Passwortmanagern erklären.Anwenden
- Sie können erklären, warum Passwörter als Hashwert gespeichert werden und welche Eigenschaften eine gute Hashfunktion haben muss (Kollisionsresistenz, Unumkehrbarkeit).Verstehen
Wie werden Passwörter eigentlich gespeichert? In diesem Modul lernst du wie Hashing funktioniert, warum Salt wichtig ist und wie Angreifer Passwörter knacken. Du implementierst Hash-Funktionen in Python und lernst was ein sicheres Passwort ausmacht.
Wie werden Passwörter gespeichert?
Wenn du dich bei einer Website anmeldest, sendest du dein Passwort an den Server. Aber wie speichert die Website dein Passwort? Hoffentlich nicht im Klartext!
Die schlechteste Idee: Klartext
Wenn eine Datenbank Passwörter im Klartext speichert und gehackt wird, hat der Angreifer sofort alle Passwörter. Das ist so, als würdest du deinen PIN-Code auf die Bankkarte schreiben.
Die Lösung: Hashing
Statt das Passwort zu speichern, wird nur der Hash-Wert gespeichert. Beim Anmelden wird das eingegebene Passwort gehasht und mit dem gespeicherten Hash verglichen.
So kennt sogar die Website dein Passwort nicht!
Hashing mit Python
Mit dem Modul hashlib kannst du in Python einfach Hash-Werte berechnen:
import hashlib
def hash_password(password):
return hashlib.sha256(password.encode()).hexdigest()
# Passwort speichern
pw_hash = hash_password("MeinGeheimesPasswort123")
print(f"Gespeicherter Hash: {pw_hash}")
# Beim Anmelden prüfen
eingabe = "MeinGeheimesPasswort123"
if hash_password(eingabe) == pw_hash:
print("Login erfolgreich!")
else:
print("Falsches Passwort!")Beachte: Aus dem Hash kann man nicht auf das ursprüngliche Passwort zurückschliessen.
Salt: Hashing sicherer machen
Ein Problem von einfachem Hashing: Wenn zwei Benutzer dasselbe Passwort haben, entsteht derselbe Hash. Angreifer können Rainbow Tables verwenden – riesige Tabellen mit vorberechneten Hashes für häufige Passwörter.
Lösung: Salt – ein zufälliger Wert, der vor dem Hashing an das Passwort angehängt wird:
import hashlib
import os
def hash_with_salt(password):
salt = os.urandom(32)
key = hashlib.pbkdf2_hmac(
'sha256',
password.encode('utf-8'),
salt,
100000 # Iterationen = langsamer = sicherer
)
return salt + key
def verify_password(stored, password):
salt = stored[:32]
stored_key = stored[32:]
new_key = hashlib.pbkdf2_hmac(
'sha256',
password.encode('utf-8'),
salt,
100000
)
return new_key == stored_key
hashed = hash_with_salt("Geheim123")
print(f"Richtiges PW: {verify_password(hashed, 'Geheim123')}")
print(f"Falsches PW: {verify_password(hashed, 'Falsch')}")Passwort-Stärke und Brute-Force
Wie lange braucht ein Angreifer, um ein Passwort zu knacken?
Brute-Force-Angriff
Einfach alle möglichen Kombinationen ausprobieren. Die Zeit hängt von der Anzahl möglicher Zeichen und der Länge ab:
| Passwort | Zeichen | Kombinationen | Zeit (1 Mrd/s) |
|---|---|---|---|
1234 | 10 Ziffern, 4 Stellen | 10'000 | weniger als 1 Sekunde |
abc123 | 36 Zeichen, 6 Stellen | 2.2 Milliarden | 2 Sekunden |
Sommer2024! | ~80 Zeichen, 11 Stellen | 8.4 × 10²⁰ | 26'666 Jahre |
kX#9mP!vR2sL | ~80 Zeichen, 12 Stellen | 6.9 × 10²² | 2.2 Mio Jahre |
Regeln für starke Passwörter
- Länge: Mindestens 12 Zeichen
- Vielfalt: Gross-/Kleinbuchstaben, Zahlen, Sonderzeichen
- Keine Wörter: Keine Namen, Daten, bekannte Muster
- Einzigartig: Für jeden Account ein anderes Passwort
Warum ist ein Salt wichtig beim Speichern von Passwörtern?
Wähle eine Antwort
Schreibe eine Python-Funktion check_password_strength(password), die ein Passwort überprüft und True zurückgibt, wenn es mindestens 8 Zeichen lang ist und mindestens einen Grossbuchstaben, einen Kleinbuchstaben und eine Zahl enthält.
Reflection
Zusammenfassung
- Passwörter werden nie im Klartext gespeichert – nur als Hash
- Salt macht Hashing sicherer gegen Rainbow Tables
- Starke Passwörter sind lang und zufällig
- Brute-Force wird durch Länge und Komplexität unpraktikabel
Merke: Die beste Verschlüsselung nützt nichts, wenn das Passwort 123456 ist.