Chiffrement ZIP

ZipCrypto : le chiffrement ZIP d'origine

Le chiffrement PKWARE traditionnel est rapide et universellement pris en charge, mais faible selon les standards modernes. Une attaque à texte clair connu de 1994 retrouve son état interne sans toucher au mot de passe, raison pour laquelle les nouvelles archives devraient utiliser AES.

Pourquoi l'ancien schéma ZipCrypto peut être cassé sans deviner le mot de passe.
Pourquoi l'ancien schéma peut tomber sans deviner le mot de passe.

Le chiffrement ZIP d'origine

ZipCrypto est le nom couramment donné à la méthode de chiffrement traditionnelle que PKWARE a intégrée au format ZIP entre la fin des années 1980 et le début des années 1990. Pendant de nombreuses années, ce fut le seul moyen de protéger un ZIP par mot de passe, et parce qu'il fait partie de la spécification d'origine, pratiquement tous les outils d'archivage peuvent le lire. Cette prise en charge universelle est la principale raison pour laquelle on le rencontre encore aujourd'hui, longtemps après que ses faiblesses ont été clairement établies.

Vous le verrez sous plusieurs noms. La spécification PKWARE d'origine l'appelle chiffrement traditionnel ; certains outils l'étiquettent ZipCrypto, d'autres simplement Standard ou Zip 2.0. Tous désignent le même algorithme décrit ici, de sorte que l'étiquette affichée par un programme particulier ne change ni le comportement de la protection ni la façon de la récupérer.

Comment ça fonctionne

ZipCrypto est un chiffrement par flux. Il conserve un petit état interne de trois valeurs de 32 bits, initialisé à partir de votre mot de passe puis mis à jour en continu à l'aide de la même fonction CRC-32 que le format ZIP utilise déjà pour les sommes de contrôle. Pour chaque octet de données, l'état produit un octet pseudo-aléatoire, qui est combiné au texte clair pour produire le texte chiffré. Le déchiffrement effectue le même processus à l'envers.

Avant les données réelles d'une entrée, ZipCrypto ajoute un en-tête de chiffrement de 12 octets. Ces douze octets sont chiffrés comme le reste de l'entrée et servent à rendre encore plus aléatoire l'état du chiffrement, de sorte que deux entrées protégées par le même mot de passe ne produisent pas des flux de clé identiques.

La vérification rapide du mot de passe

L'en-tête de chiffrement fournit aussi un moyen rapide de rejeter un mauvais mot de passe. Lorsque l'en-tête est déchiffré, son dernier octet, et dans certaines versions les deux derniers octets, est comparé à une valeur que l'outil connaît déjà. Normalement, cette valeur est l'octet de poids fort du CRC-32 de l'entrée. Lorsque l'archive a été écrite en flux continu et stocke sa somme de contrôle dans un descripteur de données à la fin, c'est l'octet de poids fort de l'heure de modification DOS du fichier qui est utilisé à la place.

Cette vérification n'est qu'un filtre. Un seul octet concorde par hasard environ une fois sur 256 essais, si bien qu'au cours d'une longue recherche de nombreux mauvais mots de passe le passent aussi. Un outil fiable confirme un candidat survivant en déchiffrant entièrement l'entrée et en vérifiant son CRC-32. ZipRecover le fait pour les entrées d'au moins 4 octets stockées ou compressées avec Deflate, soit la quasi-totalité des archives ; quand seule une entrée plus courte peut être testée, le résultat indique que le mot de passe n'a réussi qu'une vérification rapide. Il ne peut pas confirmer une entrée compressée avec une autre méthode, comme BZip2, LZMA ou Deflate64 (options proposées par des outils comme 7-Zip) : pour celles-ci, il compare seulement la longueur déchiffrée à la taille enregistrée dans l'archive, et ces deux valeurs ne coïncident presque jamais pour un fichier compressé. Ainsi, quand tous les fichiers chiffrés utilisent une telle méthode, une recherche se termine en général sans correspondance, même quand le bon mot de passe a été essayé. La séquence complète est décrite dans comment ça marche.

Rapide à tester, faible par conception

Comme l'initialisation de la clé n'est qu'un court passage sur le mot de passe et l'en-tête de 12 octets, sans ralentissement délibéré, les mots de passe ZipCrypto peuvent être testés extrêmement rapidement. Une machine moderne peut essayer de très grands nombres de candidats par seconde. Cette vitesse est pratique pendant la récupération, mais c'est aussi exactement ce qui rend le schéma faible : aucun coût n'est imposé à quiconque veut deviner.

Le problème plus profond est structurel. En 1994, Eli Biham et Paul Kocher ont publié une attaque à texte clair connu sur le chiffrement par flux de PKZIP. Si vous connaissez au moins 12 octets d'une entrée chiffrée telle qu'elle est stockée, c'est-à-dire après une éventuelle compression, dont 8 consécutifs, l'attaque peut récupérer directement l'état interne du chiffrement, sans essayer aucun mot de passe. Ces octets connus existent lorsqu'une archive contient un fichier non compressé à l'en-tête prévisible, ou un fichier dont une copie existe aussi en clair ailleurs et peut être recompressée de la même façon. Une fois l'état interne récupéré, chaque entrée chiffrée avec le même mot de passe peut être déchiffrée.

Faible ne veut pas dire grand ouvert

Une archive ZipCrypto n'est pas lisible par un observateur occasionnel, et son contenu n'est pas simplement exposé. L'important, c'est que la protection est mince : elle résiste à un curieux, pas à quelqu'un de déterminé disposant du bon texte clair connu.

Une comparaison, et une recommandation

Propriété par propriété, la comparaison complète de ZipCrypto et de WinZip AES se trouve dans l'aperçu des fichiers ZIP chiffrés, et la sécurité des ZIP protégés par mot de passe explique ce que cet écart signifie en pratique.

Pour toute nouvelle archive, préférez WinZip AES, qui remplace le chiffrement par flux par AES, ajoute une dérivation de clé PBKDF2 lente et authentifie chaque entrée avec un HMAC. Si vous cherchez seulement à ouvrir une archive que vous possédez déjà, la vitesse de ZipCrypto joue en votre faveur, et ZipRecover détecte le schéma automatiquement lorsque vous chargez le fichier.

Utilisation autorisée uniquement

Utilisez cet outil uniquement sur des archives ZIP que vous possédez ou que vous êtes autorisé à ouvrir. Tenter d'ouvrir des fichiers sans autorisation peut enfreindre les lois applicables. Consultez notre Politique d'utilisation acceptable et nos Conditions d'utilisation.

Questions fréquentes

ZipCrypto est-il sûr à utiliser ?

Il est pratique et universellement pris en charge, mais cryptographiquement faible. Une attaque à texte clair connu de 1994 peut le casser quand au moins 12 octets d'une entrée sont connus tels que stockés (après compression), dont 8 consécutifs, par exemple si vous gardez une copie non chiffrée d'un fichier de votre propre archive, et son initialisation de clé rapide n'offre aucune résistance à qui cherche le mot de passe en devinant. Préférez WinZip AES pour les nouvelles archives.

À quoi sert l'en-tête de 12 octets ?

ZipCrypto ajoute un en-tête de chiffrement de 12 octets au début de chaque entrée pour rendre l'état du chiffrement aléatoire, afin que des entrées partageant un mot de passe ne produisent pas des flux de clé identiques. Son dernier octet sert aussi de vérification rapide du mot de passe, dérivée du CRC-32 de l'entrée ou, avec un descripteur de données, de l'heure de modification du fichier.

Pourquoi ZipCrypto est-il tellement plus rapide à tester qu'AES ?

ZipCrypto n'a aucun étirement de clé délibéré ; l'initialisation de la clé est un court passage sur le mot de passe et l'en-tête. WinZip AES exécute 1000 itérations PBKDF2 par essai, ce qui, dans notre mesure sur un seul thread, l'a rendu environ 375 fois plus lent à tester (voir combien de temps prend la récupération).

Un octet d'en-tête concordant signifie-t-il que le mot de passe est correct ?

Pas avec certitude. L'octet d'en-tête concorde par hasard environ une fois sur 256 tentatives, ce n'est donc qu'un filtre. Pour une entrée d'au moins 4 octets stockée ou compressée avec Deflate, soit la quasi-totalité des archives, ZipRecover confirme un candidat en déchiffrant l'entrée et en vérifiant son CRC-32 avant de rapporter le mot de passe. Quand tous les fichiers qu'il peut tester font moins de 4 octets, ce contrôle est assez court pour qu'un mauvais mot de passe le passe, et le résultat indique alors que le mot de passe n'a réussi qu'une vérification rapide. Quand tous les fichiers chiffrés utilisent une autre méthode, comme BZip2, LZMA ou Deflate64, ZipRecover ne peut pas confirmer le mot de passe : une recherche se termine alors en général sans correspondance, même quand le bon mot de passe a été essayé.

Prêt à récupérer votre mot de passe ZIP ?

Tout s'exécute localement dans votre navigateur. Votre archive ne quitte jamais votre appareil.

Ouvrir l'outil