English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

Gast
1 / ?

Was eine Speicherformat wiederherstellbar macht

Vier Speicherformate, nach Wiederherstellbarkeit geordnet:

FormatWiederherstellbar?BeispielWiederherstellungsmethode
KlartextJapassword: hunter2Datei lesen
Base64JacGFzc3dvcmQ=base64 --decode
Reversibler Cipher (AES)JaENC[AES256:...]Mit Schlüssel entschlüsseln
Einweg-Hash (bcrypt)Nein$2b$12$...Kann nicht umgekehrt werden; Brute-Force erforderlich

Klartext, Base64 und reversibler Cipher: alles wiederherstellbar. Ein einzelner Dump der Anmeldedaten-Datenbank gibt einem Angreifer alle Passwörter im Klartext für alle Benutzer gleichzeitig. Ein Vorfall; totale Offenlegung.

Das Mailman 2.x-Beispiel

Mailman 2.x (GNU-Mailinglisten-Manager): speicherte Abonnenten-Passwörter im Klartext. Monatliche Passworterinnerungs-E-Mail: sendete allen Abonnenten ihr Passwort im Klartext. Zwei separate Mängel, beide MOAD-0006:

1. Speicherung: Klartext in der Listen-Datenbank. Ein Server-Kompromittierung legt alle Abonnenten-Passwörter offen.

2. Broadcast: Die monatliche E-Mail sendet das Klartext-Passwort über SMTP an den E-Mail-Server des Abonnenten. E-Mails werden im Klartext über mehrere SMTP-Hops übertragen.

Das Mailman-Team hat beide Verhaltensweisen entworfen. Die Wiederherstellung war das Feature: Abonnenten konnten vergessene Passwörter abrufen. Der Name Glass Safe kommt daher: der Safe hält Anmeldedaten in sichtbarer Form. Jeder, der den Safe erreicht, kann alle Inhalte gleichzeitig lesen.

Das Already-Stolen-Prinzip

Eine Anmeldedaten, die in wiederherstellbarer Form gespeichert sind, sind bereits gestohlene Anmeldedaten. Der Angreifer ist noch nicht eingetroffen. Die Sicherheitsverletzung hat noch nicht stattgefunden. Aber die Architektur garantiert: Wenn eine Sicherheitsverletzung auftritt, fallen alle Anmeldedaten gleichzeitig. Keine Sicherheitsverletzung erfolgt isoliert; jede Anmeldedaten in wiederherstellbarer Speicherung wird in derselben Operation an den Angreifer übertragen.

MOAD-0006 vs MOAD-0004

MOAD-0004 (Logged Secret): Anmeldedaten, die versehentlich in Protokolle geschrieben wurden. Das Schreiben in das Protokoll war nicht beabsichtigt; es war eine Nebenwirkung der Aktivierung der Header-Protokollierung für das Debugging.

MOAD-0006 (Glass Safe): Anmeldedaten, die absichtlich in wiederherstellbarer Form gespeichert wurden. Die Wiederherstellung war die Absicht. Das Passwort-Erinnerungs-Feature erforderte die Speicherung des Passworts. Das Anzeige-Passwort-Feature erforderte die Speicherung. Das architektonische Bekenntnis zur Wiederherstellung hat den Defekt verursacht.

Einzeilige Unterscheidung: MOAD-0004 legt Anmeldedaten versehentlich in Protokollen ab; MOAD-0006 speichert Anmeldedaten absichtlich in wiederherstellbarer Form. Die Korrekturen erfolgen auf unterschiedlichen Ebenen.

Strukturell vs. Zufällig

Die architektonische Unterscheidung zwischen MOAD-0006 und MOAD-0004 bestimmt die Fix-Strategie. Ein versehentlicher Log-Schreibvorgang: die Serialisierungsschicht korrigieren. Ein für die Wiederherstellung konzipierter Speicher: das Feature, das die Wiederherstellung erforderte, neu gestalten.

Warum unterscheidet sich ein Glass Safe strukturell von MOAD-0004? Eine Zeile beschreibt jeden Defekt. Was bedeutet das für den Fix?

Warum bcrypt funktioniert

Eine Einweg-Hash-Funktion nimmt ein Passwort entgegen und erzeugt einen Digest fester Länge. Aus dem Digest kann das ursprüngliche Passwort nicht wiederhergestellt werden. Nicht „schwer wiederherzustellen“: unmöglich umzukehren. Die Funktion läuft nur in eine Richtung.

Drei Eigenschaften sind für die Speicherung von Zugangsdaten erforderlich:

1. Einweg-Funktion (Preimage-Resistenz). Bei gegebenem hash(password) darf kein Algorithmus das password schneller als durch Brute-Force wiederherstellen. bcrypt, scrypt und argon2 erfüllen alle diese Eigenschaft.

2. Salt. Ein zufälliger Wert, der dem Passwort vor dem Hashing vorangestellt wird. Gleiches Passwort, unterschiedlicher Salt, unterschiedlicher Hash. Zweck: Schutz vor Rainbow Tables (vorkalkulierte Hash-Wörterbücher). Ohne Salt: ein Angreifer berechnet hash('password123') einmal und prüft alle 1 Million Benutzer gleichzeitig. Mit Salt: jeder Benutzer hat einen eindeutigen Hash, selbst bei gleichem Passwort.

3. Absichtlich langsam. bcrypt akzeptiert einen Work-Faktor. Höherer Work-Faktor: mehr Iterationen, mehr Rechenzeit pro Hash-Versuch. Login: 300 ms für einen Hash. Akzeptabel. Brute-Force: 300 ms pro Versuch. Bei 1 Milliarde Versuchen: 9,5 Jahre pro Passwort. Für einen Angreifer unakzeptabel. Die Langsamkeit ist ein Feature, kein Defekt.

import bcrypt

# Speichern: Einweg-Hash mit Salt
def store_password(plaintext: str) -> bytes:
return bcrypt.hashpw(plaintext.encode(), bcrypt.gensalt(rounds=12))

# Verifizieren: Kandidaten hashen & Digests vergleichen
def verify_password(plaintext: str, stored_hash: bytes) -> bool:
return bcrypt.checkpw(plaintext.encode(), stored_hash)

# NIEMALS gespeichert: das Klartext-Passwort
# NIE wiederhergestellt: der Klartext aus dem Hash
# Passwort-Reset, kein Passwort-Erinnerung

Der Kompromiss

Einweg-Hashing macht die Passwort-Wiederherstellung unmöglich. Ein Benutzer, der sein Passwort vergisst, kann es nicht zurückerhalten. Eine Passwort-Erinnerungs-E-Mail kann nicht existieren. Die Benutzererfahrung ändert sich: „Passwort vergessen? Zurücksetzen.“ Keine Verschlechterung: eine Sicherheitsgrenze. Das System, das ein Passwort nicht wiederherstellen kann, kann kein Passwort preisgeben.

Ein Datenbank-Breach, der bcrypt-Hashes offenlegt: alle Hashes sichtbar, keine Passwörter sichtbar. Ein Angreifer muss jeden Hash einzeln brute-forcen, mit 300 ms pro Versuch, wobei der pro-Benutzer-Salt vorab berechnete Tabellen verhindert. Ein Breach, der Klartext-Passwörter offenlegt: totale sofortige Offenlegung.

Starke Verschlüsselung reicht nicht aus

Ein Sicherheitsaudit identifiziert ein Anmeldeinformations-Speichersystem. Passwörter werden mit AES-256-CBC-Verschlüsselung und einem serverseitigen Schlüssel gespeichert. Der Audit-Bericht kennzeichnet dies als Glass-Safe-Defekt.

Das Engineering-Team antwortet: „AES-256 ist der stärkste symmetrische Cipher, der verfügbar ist. Der Schlüssel befindet sich in einem Hardware-Security-Modul. Kein Angreifer kann diese Passwörter entschlüsseln.“

Warum bleibt dies auch mit starker Verschlüsselung MOAD-0006? Was ist die korrekte Lösung?