Sie tippen ein Passwort in ein Archivprogramm, und einen Augenblick später öffnet sich eine Datei. Zwischen diesen beiden Momenten liegt eine kurze Kette von Schritten, die entscheidet, wie stark der Schutz ist und woran ein Programm ein richtiges Passwort von einem falschen unterscheidet. Genau so funktioniert der ZIP-Passwortschutz, und wer der Kette vom eingetippten Passwort bis zur entsperrten Datei folgt, sieht, woher die Stärke kommt.

Ein ZIP-Passwort verschlüsselt nie etwas direkt. Das Tool macht daraus Schlüsselmaterial, entweder indem es die drei internen Schlüssel von ZipCrypto damit initialisiert oder indem es für WinZip AES PBKDF2 ausführt. Dieser Schlüssel verschlüsselt die komprimierten Bytes jeder Datei. Kleine gespeicherte Werte, ein Prüfbyte oder ein Verifizierungswert, lassen einen Leser falsche Passwörter günstig verwerfen, bevor ein Bestätigungsschritt das richtige akzeptiert.

Vom Passwort zum Schlüssel

Beide Verfahren beginnen mit derselben Eingabe, den Bytes Ihres Passworts (in modernen Tools UTF-8). Was danach mit diesen Bytes geschieht, trennt die beiden.

ZipCrypto: drei Schlüssel, keine Streckung

ZipCrypto, das traditionelle PKWARE-Verfahren, hält seinen gesamten Zustand in drei 32-Bit-Schlüsseln. Sie starten bei festen Konstanten, und jedes Byte des Passworts aktualisiert sie der Reihe nach: Der erste Schlüssel durchläuft eine CRC-32-Tabellenaktualisierung mit dem Passwortbyte, der zweite nimmt das niedrige Byte des ersten auf und wird mit einer Konstante multipliziert, und der dritte durchläuft eine CRC-32-Aktualisierung mit dem hohen Byte des zweiten. Das ist die ganze Schlüsselableitung.

Es gibt kein Salt und keine Streckung. Zwei Archive mit demselben Passwort starten mit identischem Schlüsselzustand, und ein Kandidat kostet beim Testen nur eine Handvoll Rechenoperationen. Die Known-Plaintext-Schwächen, die aus diesem Aufbau folgen, behandelt die Erklärung zu ZipCrypto.

WinZip AES: PBKDF2 mit einem Salt pro Eintrag

WinZip AES behandelt das Passwort als Eingabe einer absichtlich langsamen Funktion. Ein Tool liest zuerst ein Stärke-Byte aus dem Extra-Feld des Eintrags: 1 steht für AES-128, 2 für AES-192 und 3 für AES-256. Dieses Byte legt die Schlüssellänge auf 16, 24 oder 32 Bytes und die Salt-Länge auf 8, 12 oder 16 Bytes fest.

Dann führt das Tool PBKDF2-HMAC-SHA1 mit 1000 Iterationen über das Passwort und ein zufälliges Salt aus, das bei diesem Eintrag gespeichert ist. Das Ergebnis wird in drei Teile zerlegt: den AES-Verschlüsselungsschlüssel, einen separaten Authentifizierungsschlüssel gleicher Länge und einen 2-Byte-Passwort-Verifizierungswert. Weil jeder Eintrag sein eigenes Salt trägt, liefert dasselbe Passwort in verschiedenen Einträgen verschiedene Schlüssel, sodass vorberechnete Tabellen nichts nützen. Die 1000 Iterationen wiederholen sich für jeden 20-Byte-Block Schlüsselmaterial, sodass ein einzelner Versuch mit Absicht zwischen zweitausend HMAC-SHA1-Berechnungen (AES-128) und viertausend (AES-256) kostet, dreitausend bei AES-192. Die Seite zu WinZip AES behandelt die eigentliche Verschlüsselung im CTR-Modus sowie die Varianten AE-1 und AE-2.

Woran ein Tool erkennt, dass das Passwort richtig ist

Für jeden Kandidaten eine ganze Datei zu entschlüsseln und zu entpacken wäre Verschwendung, deshalb speichern beide Formate einen kleinen Wert, den ein Leser zuerst prüfen kann. Diese Prüfung ist ein Filter, kein Beweis. Wer sie besteht, durchläuft anschließend einen vollständigen Bestätigungstest. Dafür genügt ein einziger Eintrag; ZipRecover bevorzugt den kleinsten verschlüsselten Eintrag, der groß genug ist, um ein Passwort eindeutig zu bestätigen (unter den Einträgen bis 256 MB komprimiert), was jede Bestätigung günstig hält. Sind alle prüfbaren Einträge ZipCrypto-Dateien unter 4 Bytes, weist das Ergebnis darauf hin, dass das Passwort nur eine schnelle Prüfung bestanden hat. Nutzt der einzige prüfbare Eintrag ein anderes Kompressionsverfahren als Store oder Deflate, kann das Tool nur die entschlüsselte Länge vergleichen, an der meist auch das richtige Passwort scheitert, und eine Suche endet meist ohne Treffer. Sind alle verschlüsselten Einträge komprimiert größer als 256 MB, meldet das Tool einen Fehler, statt zu suchen.

Verfahren Schnelle erste Prüfung Bestätigung
ZipCrypto Den 12-Byte-Verschlüsselungsheader entschlüsseln und sein letztes Byte mit einem bekannten Prüfbyte vergleichen (dem hohen Byte des gespeicherten CRC-32 oder, wenn ein Datendeskriptor verwendet wird, dem der Änderungszeit): ein Filter von etwa 1 zu 256 Den Rest des Eintrags entschlüsseln, entpacken und CRC-32 und Größe des Ergebnisses mit den Werten im zentralen Verzeichnis vergleichen
WinZip AES Den von PBKDF2 erzeugten 2-Byte-Verifizierungswert mit dem direkt hinter dem Salt gespeicherten vergleichen: ein Filter von etwa 1 zu 65.536 HMAC-SHA1 über den Chiffretext mit dem Authentifizierungsschlüssel neu berechnen und die ersten 10 Bytes mit dem gespeicherten Authentifizierungscode vergleichen

Die beiden Filter sind nicht gleichwertig. Etwa 1 falsches Passwort von 256 rutscht am ZipCrypto-Prüfbyte vorbei, und der Schritt aus Entschlüsseln und CRC muss es abfangen; dieser Schritt ist eine Prüfsumme und kein kryptografischer Beweis, auch wenn ein falsches Passwort, das sich obendrein sauber auf die richtige Größe und den richtigen CRC-32 entpackt, bei echten Dateien extrem unwahrscheinlich ist. Bei AES überlebt etwa 1 falsches Passwort von 65.536 den Verifizierungswert, und der dahinterliegende HMAC-SHA1-Schritt ist kryptografisch endgültig: Ein bestätigtes AES-Passwort ist nie ein Fehltreffer.

Achten Sie darauf, wo die Kosten anfallen. Bei ZipCrypto sind beide Stufen billig. Bei AES läuft der teure Teil, PBKDF2, vor dem Filter, sodass der Filter nur den HMAC einspart und das Verfahren es sich leisten kann, jeden Versuch langsam zu machen.

Was das für ein vergessenes Passwort bedeutet

Kein Schritt dieser Kette lässt sich überspringen. Ein Archiv kann man nicht nach seinem Passwort fragen; ein Tool kann nur Kandidaten vorschlagen und jeden durch die obigen Schritte schicken. Die Wiederherstellung hängt daher davon ab, wie groß der zu durchsuchende Raum ist und wie schnell sich jeder Kandidat testen lässt.

Eine illustrative Rechnung zeigt die Größenordnung. Nehmen Sie ein Passwort aus 12 Zeichen mit Groß- und Kleinbuchstaben sowie Ziffern: 62^12, etwa 3,2 × 10^21 Kandidaten. Mit der Ein-Kern-Rate für AES-256, die die Website mit ihrem Proof-Skript gemessen hat, etwa 640 Versuche pro Sekunde, dauert es 3,2 × 10^21 ÷ 640, also rund 5 × 10^18 Sekunden oder ungefähr 1,6 × 10^11 Jahre (160 Milliarden Jahre), diesen Raum auszuschöpfen. Selbst mit der ebenso gemessenen ZipCrypto-Rate, etwa 240.000 Versuche pro Sekunde, braucht derselbe Raum in der Größenordnung von 4 × 10^8 Jahren. Beide Zahlen sind aus diesen gemessenen Raten modelliert, nicht an einer bestimmten Datei gemessen, und zusätzliche Kerne teilen sie nur linear.

Verkleinern Sie nun den Raum mit dem, woran Sie sich erinnern. Wenn Sie wissen, dass das Passwort aus sechs Kleinbuchstaben bestand, sind das 26^6, etwa 309 Millionen Kandidaten, die dieselben 640 pro Sekunde in rund 5,6 Tagen auf einem Kern abarbeiten, oder in etwa 17 Stunden verteilt auf acht Worker-Threads (wieder illustrativ). Ein bekanntes Präfix, eine erinnerte Länge oder eine persönliche Wortliste verkleinern die Suche weit stärker als schnellere Hardware. Der Leitfaden dazu, wie lange die Wiederherstellung eines ZIP-Passworts dauert, geht diese Raten ausführlicher durch.

Alles oben betrifft den Inhalt jedes Eintrags. Namen, Größen und Zeitstempel im zentralen Verzeichnis bleiben in einem standardmäßig verschlüsselten ZIP lesbar; der Leitfaden dazu, was eine verschlüsselte ZIP-Datei schützt, behandelt diese Container-Sicht und wie Sie das verwendete Verfahren erkennen.

Wenn das Archiv Ihnen gehört und das Passwort verloren ist, notieren Sie zuerst, was Sie über seine Form wissen, und starten Sie dann eine private Wiederherstellung Ihres ZIP-Passworts im Browser. Das Tool liest das Stärke-Byte, bevorzugt den kleinsten verschlüsselten Eintrag, der groß genug ist, um ein Passwort eindeutig zu bestätigen (unter den Einträgen bis 256 MB komprimiert), und wendet genau die hier beschriebene Kette aus Filter und Bestätigung an, ausschließlich auf Ihrem Gerät.

Quellen