Chiffrement ZIP

Le chiffrement WinZip AES, expliqué en détail

Le schéma de chiffrement ZIP moderne associe AES à une fonction de dérivation de clé lente et à une authentification par entrée. Ensemble, ils rendent un mauvais mot de passe peu coûteux à écarter et un mot de passe robuste impraticable à deviner.

Comment WinZip AES transforme un mot de passe en clé et chiffre un fichier, avec un contrôle d'intégrité.
Pourquoi un mot de passe AES fort est lent à attaquer.

AES arrive dans le format ZIP

Le chiffrement ZIP traditionnel n'a jamais été robuste, aussi WinZip a-t-il introduit un schéma fondé sur AES que la plupart des outils d'archivage modernes prennent désormais en charge. Il remplace l'ancien algorithme, ZipCrypto, par l'Advanced Encryption Standard, ajoute une véritable fonction de dérivation de clé et attache une vraie vérification d'intégrité à chaque entrée. Le résultat est un chiffrement qui résiste à l'examen, au prix délibéré d'être lent à tester.

À quoi cela ressemble à l'intérieur du ZIP

Une entrée chiffrée en AES ne consigne pas sa véritable méthode de compression à l'endroit habituel. À la place, le champ de méthode est fixé à 99, un marqueur qui signifie « chiffré en AES », et la vraie méthode de compression est stockée ailleurs. Les détails résident dans un champ additionnel portant l'identifiant d'en-tête 0x9901. Ce champ contient une balise fournisseur de deux caractères, AE, un numéro de version qui est soit AE-1, soit AE-2, un octet de robustesse et la méthode de compression réellement utilisée sous le chiffrement.

L'octet de robustesse pilote le reste du schéma. Une valeur de 1 signifie AES-128, 2 signifie AES-192 et 3 signifie AES-256. À partir de ce seul octet, un outil connaît la longueur de la clé, la longueur du sel et la quantité de matériel de clé à dériver.

Dérivation de clé

Votre mot de passe n'est jamais utilisé directement comme clé. WinZip AES le fait passer par PBKDF2-HMAC-SHA1 avec 1000 itérations et un sel aléatoire stocké avec l'entrée. La longueur du sel dépend de la robustesse : 8 octets pour AES-128, 12 octets pour AES-192 et 16 octets pour AES-256. PBKDF2 étire le mot de passe en un bloc de matériel de clé, qui est divisé en trois parties : la clé de chiffrement AES, une clé d'authentification distincte de même longueur et une valeur de vérification de mot de passe de 2 octets.

Cette valeur de 2 octets est stockée dans l'entrée. Elle permet à un outil de rejeter un mauvais mot de passe presque immédiatement, sans rien déchiffrer, car le bon mot de passe reproduit les deux mêmes octets. Ce n'est qu'un filtre rapide, pas une preuve, puisque deux mots de passe différents pourraient en principe produire la même paire d'octets. La confirmation finale vient du code d'authentification.

Octet de robustesseLongueur de clé AESLongueur du selValeur de vérificationHMAC stocké
1AES-128 (16 octets)8 octets2 octets10 octets
2AES-192 (24 octets)12 octets2 octets10 octets
3AES-256 (32 octets)16 octets2 octets10 octets

Chiffrement et authentification

Les données du fichier sont chiffrées avec AES en mode CTR, ou compteur. Cela transforme le chiffrement par bloc en un flux de clé et permet de chiffrer une entrée de n'importe quelle longueur octet par octet. L'intégrité est gérée séparément. Après le chiffrement, un HMAC-SHA1 est calculé sur le texte chiffré à l'aide de la clé d'authentification, et les 10 premiers octets de ce HMAC sont stockés à la fin de l'entrée. C'est une conception « chiffrer puis authentifier » (encrypt-then-MAC) : le code d'authentification couvre les octets chiffrés, de sorte qu'un outil peut vérifier que le mot de passe et les données sont corrects avant même de tenter de décompresser.

Les deux versions diffèrent sur un détail. AE-1 conserve la somme de contrôle CRC-32 de l'entrée dans l'en-tête, ce qui autorise une seconde vérification d'intégrité, plus ancienne, après déchiffrement. AE-2 met le champ CRC à zéro et s'appuie entièrement sur le HMAC. Les deux utilisent le même algorithme et la même dérivation de clé ; la différence porte seulement sur la façon dont l'intégrité est enregistrée.

Deux vérifications, un seul résultat confirmé

ZipRecover compare d'abord la valeur de vérification de 2 octets pour écarter les mauvais candidats à moindre coût, puis recalcule le HMAC-SHA1 de 10 octets pour confirmer un survivant. Un mot de passe rapporté a passé la vérification définitive, pas seulement la rapide.

Pourquoi c'est robuste, et lent

Deux propriétés rendent WinZip AES résistant aux tentatives pour deviner le mot de passe. D'abord, AES lui-même n'a aucun raccourci pratique, de sorte qu'un attaquant ne peut pas récupérer la clé directement à partir du texte chiffré. Ensuite, les 1000 itérations de PBKDF2 sont là volontairement. Dériver une clé à partir d'un mot de passe candidat coûte mille opérations HMAC-SHA1 par bloc de sortie de 20 octets (environ quatre mille pour AES-256), de sorte que tester des mots de passe est environ 375 fois plus lent qu'avec un schéma sans étirement dans notre mesure sur un seul thread (voir combien de temps prend la récupération). Ce coût est négligeable pour quelqu'un qui connaît son mot de passe et le saisit une fois, mais il rend très coûteux de deviner à grande échelle.

En pratique, une archive chiffrée en AES et verrouillée avec un mot de passe robuste et généré aléatoirement est impossible à retrouver en devinant, quelle que soit la rapidité du matériel. La récupération n'a une vraie chance que lorsque le mot de passe est court, suit un schéma dont vous vous souvenez ou figure dans une liste de mots que vous pouvez fournir. Cette limite vient du schéma lui-même, et aucun outil de récupération, le nôtre compris, ne la contourne. La façon dont ZipRecover utilise conjointement la valeur de vérification et le HMAC est décrite dans comment ça marche. L'aperçu des fichiers ZIP chiffrés situe AES aux côtés du schéma hérité, et ZipCrypto et AES comparés met les deux côte à côte.

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

Un mot de passe WinZip AES robuste peut-il être récupéré ?

Pas en devinant. AES n'a aucun raccourci pratique, et PBKDF2 rend chaque essai lent, de sorte qu'un long mot de passe aléatoire est en pratique irrécupérable. La récupération n'a une vraie chance que lorsque le mot de passe est court ou suit un schéma dont vous vous souvenez.

Quelle est la différence entre AE-1 et AE-2 ?

AE-1 conserve le CRC-32 de l'entrée pour une vérification d'intégrité supplémentaire après déchiffrement. AE-2 met le champ CRC à zéro et s'appuie plutôt sur le HMAC-SHA1 de 10 octets. Les deux utilisent le même algorithme AES et la même dérivation de clé PBKDF2.

Pourquoi AES est-il tellement plus lent à tester que ZipCrypto ?

WinZip AES exécute 1000 itérations de PBKDF2-HMAC-SHA1 pour chaque mot de passe candidat, par conception. Dans notre mesure sur un seul thread, cet étirement délibéré a rendu le test d'un candidat AES environ 375 fois plus lent qu'avec le schéma hérité ZipCrypto, qui n'a pas cette étape ; voir combien de temps prend la récupération pour les chiffres.

Comment savoir quelle taille de clé AES utilise mon ZIP ?

L'octet de robustesse dans le champ additionnel 0x9901 le consigne : 1 signifie AES-128, 2 signifie AES-192 et 3 signifie AES-256. ZipRecover le lit automatiquement lorsque vous sélectionnez le fichier, vous n'avez donc pas à l'inspecter vous-même.

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