Durch die Hintertür - Methoden der Kryptanalyse

Seite 5: pkzip-Verschlüsselung gebrochen

Inhaltsverzeichnis

Pkzip verwendet eine Stromchiffrierung: Eine Folge von Schlüsselbytes K wird mit den Klartextbytes P per XOR zu Geheimtextbytes C verknüpft (die Dechiffrierung verläuft genauso). Nach jeder Chiffrierung eines Bytes wird K aktualisiert. Das Klartextbyte selbst und ein Schlüssel aus drei 32-Bit-Wörtern key0, key1 und key2 gehen dabei mit ein. Als C-Programm sähe das so aus:

C = P ^ K;
key0 = crc32(key0, P);
key1 = (key1 + (key0 & 0xff)) * 134775813 + 1;
key2 = crc32(key2, key1 >> 24);
tmp = key2 | 3;
K = (tmp * (tmp ^ 1)) >> 8;

tmp ist ein 16-Bit-Wert, crc32() eine leicht berechenbare CRC-Prüfsumme. Der Schlüssel ist immerhin 3**·**32 = 96 Bit lang, und sogar einige moderne Designprinzipien finden sich hier. Dennoch gibt es ein frei verfügbares Kryptanalyseprogramm, das mit Hilfe von 12 bekannten Klartextbytes spätestens nach wenigen Stunden das Archiv entziffert. Der erste ausgenutzte Angriffspunkt ist, dass von tmp die beiden niederwertigsten Bits bekannt sind. Bei bekanntem Schlüsselbyte K bleiben dadurch nur noch 64 mögliche Werte für tmp übrig -- und so geht es weiter. Für Liebhaber von Denksport wird das Ganze in [1] detailliert erklärt (Errata-Seite beachten! Auf der beigelegten CD ist auch das Crackprogramm enthalten).

Der Entwickler des Verfahrens hat offensichtlich nicht wie ein Kryptanalytiker gedacht, sondern nur etwas "möglichst Kompliziertes" entwerfen wollen. Übrigens arbeitet auch der Editor vim mit dieser Chiffrierung. Man sollte sie dort also nicht nutzen.