Le mot que vous connaissez déjà : crib drag sur un XOR à clé répétée

Cryptographie Niveau 4/4 ~7 min 11 octobre 2026

Le défi

L'outil de déploiement de Thornbury écrit une copie chiffrée du fichier d'environnement de chaque service à côté du fichier en clair, et quelqu'un a versionné le fichier chiffré du service ledger sans le fichier en clair. L'outil appelle cela du chiffrement. C'est un XOR à clé répétée, et la clé est un mot que personne n'a noté. Vous n'avez pas besoin de la clé pour commencer, car tous les fichiers d'environnement produits par cet outil débutent par les mêmes douze caractères, et le XOR vous rend tout ce que vous lui donnez et que vous n'y aviez pas mis. Récupérez la clé, puis lisez le mot de passe de la base de données.

Ce que tu vas apprendre

  • Expliquer pourquoi le XOR est sa propre inverse et ce que cela implique pour la récupération de la clé
  • Utiliser un préfixe de clair connu comme crib pour extraire une clé répétée
  • Reconnaître un motif répété dans la sortie comme confirmation que le crib était correct
  • Appliquer la clé récupérée pour déchiffrer l'ensemble du message
  • Identifier les formats de fichiers fixes qui rendent les cribs disponibles en pratique

Compétences testées

Cryptanalyse classiqueAttaque à clair connuConstruction de recette

Prérequis

  • Ce que fait le XOR bit par bit
  • Lecture de l'hexadécimal

Comment ça marche

Le XOR a une propriété qui explique tout ceci : appliquer deux fois la même valeur redonne l'original. Le chiffrement s'écrit ciphertext = plaintext XOR key, donc le déchiffrement s'écrit plaintext = ciphertext XOR key, et le troisième arrangement est celui qu'utilisent les attaquants : key = ciphertext XOR plaintext. Si vous pouvez deviner une portion quelconque du clair, vous obtenez gratuitement les octets de clé qui se trouvaient dessous.

Cette supposition s'appelle un crib, et elle est presque toujours disponible. Les données réelles ont des débuts fixes : un fichier d'environnement commence par un nom de variable, une réponse HTTP commence par HTTP/1.1, un PNG commence par sa signature, JSON commence par une accolade. Quand la clé se répète et qu'elle est plus courte que le crib, les octets récupérés se répètent aussi, et cette répétition est votre preuve : du bruit signifie que la supposition était fausse, un cycle visible signifie qu'elle était correcte et vous indique la longueur de la clé du même coup d'œil.

Un masque jetable évite tout cela en étant aussi long que le message et en n'étant jamais réutilisé. Une clé de six lettres appliquée en XOR sur tout un fichier n'est pas une version affaiblie de cette idée, c'est une chose entièrement différente : la clé est récupérable à partir de n'importe quel fragment correctement deviné, et après cela le fichier est en clair.

Erreurs fréquentes

  • Chercher une chaîne qui décode en une seule passe. Le premier XOR est une mesure, pas un déchiffrement. Vous exécutez l'outil deux fois avec des clés différentes.
  • Abandonner quand la sortie devient du bruit. Seule la portion couverte par le crib est significative. Tout ce qui suit est du charabia attendu.
  • Utiliser toute la chaîne répétée comme clé. PLOVERPLOVER est la clé écrite deux fois. N'en utilisez qu'une occurrence.
  • Oublier de décoder l'hexadécimal en premier. Le XOR opère sur des octets. Appliqué au texte hexadécimal lui-même, il ne produit rien d'utile.
  • Omettre le signe égal du crib. ENVIRONMENT fait onze caractères et ENVIRONMENT= en fait douze : un crib plus court fonctionne quand même ici, mais chaque caractère correct confirme un octet de clé supplémentaire.

Comment s'en protéger

Aucune des deux moitiés ne devrait exister : ni le chiffrement, ni le fichier.

  • Ne mettez pas de secrets dans le dépôt, chiffrés ou non. Injectez-les au moment du déploiement depuis un gestionnaire de secrets, pour qu'il n'y ait aucun artefact à committer.
  • Si des fichiers doivent être chiffrés au repos dans un dépôt, utilisez un véritable outil avec chiffrement authentifié et clés gérées. Un XOR fait maison n'est pas un chiffrement faible, c'est un encodage avec un argument en forme de mot de passe.
  • Scannez les commits à la recherche de blobs à haute entropie autant que de clés en clair. Ce fichier passerait n'importe quelle regex cherchant DB_PASS=.
  • Effectuez une rotation de l'identifiant maintenant. Il a été committé, donc traitez-le comme public dès l'instant du commit, et non depuis l'instant où quelqu'un s'en est aperçu.

Solution complète

Les membres Pro et Max débloquent la solution complète étape par étape.

Passer Pro

Statistiques de la communauté

117 résolutions
80% taux de réussite
RamaRoot Premier sang

Hacks du jour associés

32 000+ Hackers Vrais labs Gratuit
Commencer Gratuitement ou résolvez le hack du jour, sans compte