ZIP-Verschlüsselung

ZipCrypto: die ursprüngliche ZIP-Chiffre

Die traditionelle PKWARE-Verschlüsselung ist schnell und universell unterstützt, aber nach modernen Maßstäben schwach. Ein Known-Plaintext-Angriff aus dem Jahr 1994 rekonstruiert ihren internen Zustand, ohne das Passwort anzutasten, weshalb neue Archive AES verwenden sollten.

Warum das alte ZipCrypto-Verfahren ohne Erraten des Passworts gebrochen werden kann.
Warum das alte Verfahren ohne Passwortraten fallen kann.

Die ursprüngliche ZIP-Chiffre

ZipCrypto ist der Name, der üblicherweise der traditionellen Verschlüsselungsmethode gegeben wird, die PKWARE Ende der 1980er- bis Anfang der 1990er-Jahre in das ZIP-Format eingebaut hat. Viele Jahre lang war sie die einzige Möglichkeit, ein ZIP mit einem Passwort zu schützen, und weil sie Teil der ursprünglichen Spezifikation ist, kann sie praktisch jedes Archivwerkzeug lesen. Diese universelle Unterstützung ist der Hauptgrund, warum sie heute noch zu sehen ist, lange nachdem ihre Schwächen gut verstanden wurden.

Sie werden ihr unter mehreren Namen begegnen. Die ursprüngliche PKWARE-Spezifikation nennt sie traditionelle Verschlüsselung; einige Werkzeuge bezeichnen sie als ZipCrypto, andere schlicht als Standard oder Zip 2.0. Sie alle beziehen sich auf dieselbe hier beschriebene Chiffre, sodass die Bezeichnung, die ein bestimmtes Programm anzeigt, nichts daran ändert, wie sich der Schutz verhält oder wie er wiederhergestellt wird.

Wie sie funktioniert

ZipCrypto ist eine Stromchiffre. Sie hält einen kleinen internen Zustand aus drei 32-Bit-Werten, initialisiert aus Ihrem Passwort und dann fortlaufend aktualisiert mit derselben CRC-32-Funktion, die das ZIP-Format ohnehin für Prüfsummen verwendet. Für jedes Datenbyte erzeugt der Zustand ein pseudozufälliges Byte, das mit dem Klartext kombiniert wird, um den Chiffretext zu erzeugen. Die Entschlüsselung erzeugt denselben Bytestrom in derselben Reihenfolge und kombiniert ihn mit dem Chiffretext statt mit dem Klartext.

Vor den eigentlichen Daten eines Eintrags stellt ZipCrypto einen 12-Byte-Verschlüsselungsheader voran. Diese zwölf Bytes werden wie der Rest des Eintrags verschlüsselt und dienen dazu, den Chiffrezustand weiter zu randomisieren, sodass zwei mit demselben Passwort geschützte Einträge keine identischen Schlüsselströme erzeugen.

Die schnelle Passwortprüfung

Der Verschlüsselungsheader bietet außerdem eine schnelle Möglichkeit, ein falsches Passwort abzulehnen. Wenn der Header entschlüsselt wird, wird sein letztes Byte, und in einigen Versionen die letzten zwei Bytes, mit einem Wert verglichen, den das Werkzeug bereits kennt. Normalerweise ist dieser Wert das höchstwertige Byte der CRC-32-Prüfsumme des Eintrags. Wenn das Archiv im Streaming-Verfahren geschrieben wurde und seine Prüfsumme in einem nachfolgenden Data Descriptor speichert, wird stattdessen das hohe Byte der DOS-Änderungszeit der Datei verwendet.

Diese Prüfung ist nur ein Filter. Ein einzelnes Byte stimmt zufällig etwa einmal in 256 Versuchen überein, sodass bei einer langen Suche auch viele falsche Passwörter sie bestehen. Ein zuverlässiges Werkzeug bestätigt einen überlebenden Kandidaten, indem es den Eintrag vollständig entschlüsselt und seine CRC-32 überprüft. ZipRecover tut das bei Einträgen ab 4 Bytes, die gespeichert (Store) oder mit Deflate komprimiert sind, und das betrifft fast alle Archive; lässt sich nur ein kürzerer Eintrag prüfen, weist das Ergebnis darauf hin, dass das Passwort nur eine schnelle Prüfung bestanden hat. Einen Eintrag, der mit einem anderen Verfahren komprimiert ist, etwa BZip2, LZMA oder Deflate64 (Optionen in Werkzeugen wie 7-Zip), kann es nicht bestätigen: Dort vergleicht es nur die entschlüsselte Länge mit der im Archiv gespeicherten Größe, und die passt bei einer komprimierten Datei fast nie. Verwenden alle verschlüsselten Dateien ein solches Verfahren, endet eine Suche deshalb meist ohne Treffer, selbst wenn das richtige Passwort geprüft wird. Die vollständige Abfolge beschreibt die Seite So funktioniert es.

Schnell zu testen, schwach von Natur aus

Da die Schlüsseleinrichtung nur ein kurzer Durchlauf über das Passwort und den 12-Byte-Header ist, ohne bewusste Verlangsamung, können ZipCrypto-Passwörter extrem schnell getestet werden. Eine moderne Maschine kann sehr große Mengen an Kandidaten pro Sekunde ausprobieren. Diese Geschwindigkeit ist während der Wiederherstellung bequem, aber sie ist auch genau das, was das Schema schwach macht: Niemandem, der raten will, werden Kosten auferlegt.

Das tiefere Problem ist struktureller Natur. 1994 veröffentlichten Eli Biham und Paul Kocher einen Known-Plaintext-Angriff auf die PKZIP-Stromchiffre. Wenn Sie mindestens 12 Bytes eines verschlüsselten Eintrags so kennen, wie er gespeichert ist, also nach einer etwaigen Kompression, davon 8 zusammenhängend, kann der Angriff den internen Zustand der Chiffre direkt wiederherstellen, ganz ohne Passwörter auszuprobieren. Solche bekannten Bytes gibt es, wenn ein Archiv eine unkomprimierte Datei mit einem vorhersehbaren Header enthält oder eine Datei, deren Kopie auch anderswo im Klartext existiert und sich auf dieselbe Weise erneut komprimieren lässt. Sobald der interne Zustand wiederhergestellt ist, kann jeder mit demselben Passwort verschlüsselte Eintrag entschlüsselt werden.

Schwach bedeutet nicht weit offen

Ein ZipCrypto-Archiv ist nicht von einem beiläufigen Beobachter lesbar, und sein Inhalt liegt nicht einfach offen. Der Punkt ist, dass der Schutz dünn ist: Er widersteht einer neugierigen Person, nicht einer entschlossenen mit dem richtigen bekannten Klartext.

Ein Vergleich und eine Empfehlung

Eigenschaft für Eigenschaft steht der vollständige Vergleich von ZipCrypto und WinZip AES in der Übersicht über verschlüsselte ZIP-Dateien, und wie sicher passwortgeschützte ZIPs sind erklärt, was dieser Abstand in der Praxis bedeutet.

Für jedes neue Archiv bevorzugen Sie WinZip AES, das die Stromchiffre durch AES ersetzt, eine langsame PBKDF2-Schlüsselableitung hinzufügt und jeden Eintrag mit einem HMAC authentifiziert. Wenn Sie nur versuchen, ein Archiv zu öffnen, das Sie bereits haben, arbeitet die Geschwindigkeit von ZipCrypto zu Ihren Gunsten, und ZipRecover erkennt das Schema automatisch, sobald Sie die Datei laden.

Nur autorisierte Nutzung

Verwenden Sie dieses Tool nur für ZIP-Archive, die Ihnen gehören oder für die Sie autorisiert sind. Der Versuch, Dateien ohne Erlaubnis zu öffnen, kann geltende Gesetze verletzen. Siehe unsere Richtlinie zur akzeptablen Nutzung und unsere Nutzungsbedingungen.

Häufig gestellte Fragen

Ist ZipCrypto sicher zu verwenden?

Es ist bequem und universell unterstützt, aber kryptografisch schwach. Ein Known-Plaintext-Angriff von 1994 kann es brechen, wenn mindestens 12 Bytes eines Eintrags wie gespeichert (nach Kompression) bekannt sind, 8 davon am Stück, etwa wenn Sie noch eine unverschlüsselte Kopie einer Datei aus Ihrem eigenen Archiv haben, und seine schnelle Schlüsseleinrichtung bietet keinen Widerstand gegen das Raten. Bevorzugen Sie WinZip AES für neue Archive.

Wozu dient der 12-Byte-Header?

ZipCrypto stellt jedem Eintrag einen 12-Byte-Verschlüsselungsheader voran, um den Chiffrezustand zu randomisieren, sodass Einträge mit demselben Passwort keine identischen Schlüsselströme erzeugen. Sein letztes Byte wirkt außerdem als schnelle Passwortprüfung, abgeleitet aus der CRC-32 des Eintrags oder, bei einem Data Descriptor, aus der Änderungszeit der Datei.

Warum ist ZipCrypto so viel schneller zu testen als AES?

ZipCrypto hat keine bewusste Schlüsselstreckung; das Einrichten des Schlüssels ist ein kurzer Durchlauf über das Passwort und den Header. WinZip AES führt 1000 PBKDF2-Iterationen pro Versuch aus, was es in unserer Messung mit einem Thread etwa 375-mal langsamer zu testen machte (siehe die Seite Dauer der Wiederherstellung).

Bedeutet ein passendes Header-Byte, dass das Passwort korrekt ist?

Nicht mit Sicherheit. Das Header-Byte stimmt zufällig etwa einmal in 256 Versuchen überein, es ist also nur ein Filter. Bei einem Eintrag ab 4 Bytes, der gespeichert (Store) oder mit Deflate komprimiert ist, und das betrifft fast alle Archive, bestätigt ZipRecover einen Kandidaten, indem es den Eintrag entschlüsselt und seine CRC-32 prüft, bevor es das Passwort meldet. Sind alle prüfbaren Dateien kürzer als 4 Bytes, ist diese Prüfung so kurz, dass ein falsches Passwort sie bestehen kann, und das Ergebnis weist darauf hin, dass das Passwort nur eine schnelle Prüfung bestanden hat. Verwenden alle verschlüsselten Dateien ein anderes Verfahren, etwa BZip2, LZMA oder Deflate64, kann ZipRecover das Passwort nicht bestätigen, und eine Suche endet meist ohne Treffer, selbst wenn das richtige Passwort geprüft wird.

Bereit, Ihr ZIP-Passwort wiederherzustellen?

Alles läuft lokal in Ihrem Browser. Ihr Archiv verlässt niemals Ihr Gerät.

Tool öffnen