web-dev-qa-db-fra.com

Comment savoir si un fichier est déchiffré ou non

Pour l'école, je dois faire un exercice dans lequel je dois décrypter des fichiers par attaque par force brute.

Il existe de nombreux fichiers différents dans différents formats de fichiers. Les fichiers ont été chiffrés en utilisant XOR ou l'algorithme César.

Je sais comment essayer toutes les clés possibles pour déchiffrer les fichiers, mais comment savoir si le fichier est déchiffré avec la bonne clé ou non?

35
juan michelle

Vous ne pouvez vraiment pas, si vous chiffrez/déchiffrez simplement du texte.

Si vous savez que la chaîne chiffrée est "kdo" et que la méthode de chiffrement est un décalage Caesar, le texte en clair pourrait tout aussi bien être "IBM" que "HAL". Vous devez avoir une idée de ce à quoi ressemble le texte en clair. Par exemple, si vous savez que le texte en clair est le nom d'un personnage de Stanley Kubrick, vous auriez une idée décente de ce qu'il devrait être.

Si vous avez une chaîne plus longue, il est beaucoup plus facile de réduire les choses. Un fichier texte volumineux a beaucoup moins de résultats intelligibles que l'exemple à trois caractères ci-dessus. Mais vous devrez toujours déterminer s'il est déchiffré vous-même.

D'un autre côté, si vous déchiffrez un fichier entier dans un format spécifique (.docx, etc.), vous pouvez être raisonnablement sûr que le fichier est déchiffré si le programme d'analyse (Word, etc.) peut le lire.

51
Dan Ambrogio

Vous pouvez absolument dire avec différents degrés de certitude si un fichier, ou même une chaîne, a été décrypté avec succès. La plupart des défis des cryptopals en dépendent . J'ai commencé à créer un outil de bruteforce et d'analyse de texte chiffré qui automatise cette tâche. Vous pouvez le trouver ici si vous voulez y jeter un œil.
(il a besoin de beaucoup de nettoyage, ne me jugez pas)

Mon objectif à l'origine dans ce projet était d'améliorer mon efficacité dans les défis de cryptographie CTF avec un simple outil de force brute, mais je commence à travailler sur la mise en œuvre de beaucoup plus d'analyses. En l'état, il peut forcer tous les césars, XOR à un octet, atbash et quelques encodages, avec la touche de répétition XOR développé mais pas encore intégré.

La façon dont cela fonctionne maintenant

  • prend une chaîne de texte chiffré d'entrée ou un fichier de chaînes de texte chiffré délimité par des sauts de ligne
  • tente de décrypter avec l'espace de clés entier des chiffres pris en charge
  • après chaque tentative de décryptage, exécute une fonction de détection en texte clair pour déterminer si le texte décrypté est en anglais
  • affiche les suppositions les plus probables

La seule chose qui rend ce processus délicat est la façon dont les seuils de détection en anglais doivent être ajustés en fonction de la longueur du chiffrement. Par défaut, 60% du texte en clair doivent être des mots et 75% du texte en clair des lettres pour enregistrer une correspondance. Ce paramètre donne rarement des faux positifs, et encore moins fréquemment des faux négatifs, sur des textes en clair de longueur moyenne à longue (n'importe quoi sur quelques chaînes). Cependant, lorsqu'il est utilisé sur des textes chiffrés de courte durée, certains faux positifs apparaissent et de nombreux faux négatifs s'en tirent. Lors des tests, j'ai dû abaisser les seuils de 30% ou plus pour détecter une correspondance sur certaines chaînes courtes et, dans le processus, générer beaucoup plus de faux positifs que je dois parcourir pour trouver la vraie correspondance.

Je recommande fortement de travailler sur les défis des cryptopals dès le début si vous êtes intéressé à en savoir plus sur la fabrication d'oracles et la rupture de la crypto. Cela commence facilement et progresse en attaques du monde réel, comme faire une Bleichenbacher Oracle , une partie de ce qui fait que l'attaque NOIE fonctionne.

tl; dr

vous devez créer un module qui détecte l'anglais et l'appliquer au résultat de chaque tentative de décryptage. ou juste fork mine et améliorez-le.
dans les cas où le texte clair ne sera pas l'anglais ou une autre langue, une analyse plus approfondie est nécessaire.

18
cremefraiche

Si vous avez une idée de ce qu'est le texte clair, vous pouvez utiliser cette supposition de connaissance lorsque vous avez peut-être craqué le texte chiffré.

Si vous pensez que le texte en clair est anglais, par exemple, commencez à chercher des mots anglais dans votre tentative de décryptage.

Si vous pensez que le texte en clair est un fichier Zip, les fichiers Zip ont une signature au début du fichier. Recherchez cette signature.

Si vous pensez que le texte clair est un e-mail, recherchez les en-têtes d'e-mail révélateurs.

En général, vous pouvez essayer de rechercher le "contenu d'information" de la tentative de décryptage. Le texte en clair a normalement un contenu d'informations inférieur à celui du texte chiffré, bien que ce ne soit pas vrai pour un chiffrement césar simple.

Mais vous devez commencer par encrer ce que le texte en clair peut contenir, même si (comme ci-dessus) c'est simplement "un score de contenu d'information inférieur au texte chiffré".

10
Steve Sether

Les autres réponses ici sont excellentes pour le cas général. Pour un devoir de classe, je soupçonne que les professeurs veulent qu'il soit très facile de dire quand vous avez déchiffré le fichier.

Par exemple, les fichiers que vous déchiffrez sont-ils des fichiers texte qui affichent un message lorsqu'ils sont correctement déchiffrés? Si c'est le cas, vous pouvez prendre un dictionnaire dans votre langue et vérifier si une grande partie des mots du message se trouvent dans le dictionnaire. Si vous utilisez l'anglais, je suppose qu'un seuil de 50% de mots dans un dictionnaire anglais est un bon nombre à utiliser - un fichier incorrectement décrypté sera presque complètement du charabia, mais vous ne voulez pas ignorer le texte en clair correct s'il contient quelques mots, comme des noms propres ou du jargon technique, qui ne se trouvent pas dans votre dictionnaire.

7
Kevin

Si le fichier crypté est un texte, vous devez vérifier si les phrases à l'intérieur du fichier ont un sens ou non, mais si vous devez découvrir quelque chose qui n'est pas un mot ou une phrase (par exemple, mot de passe ou lettres aléatoires), vous devez tout essayer différentes possibilités. Par exemple, j'ai un mot de passe de connexion (lettres aléatoires) crypté avec le chiffre César. Je dois essayer, dans le pire des cas, toutes les 26 possibilités (en supposant que nous utilisons l'alphabet international en minuscules) pour vérifier si le mot de passe est correct.

2
Cricco95

De nombreux formats de fichiers commencent par un nombre magique (une séquence d'octets) que vous pouvez rechercher. Wikipedia a une liste.

1
Filip Haglund

D'autres réponses ont couvert la plupart des aspects, mais un autre point est que, si vous avez accès à l'API qui a créé les fichiers cryptés, vous pouvez crypter votre propre fichier conn et le forcer brutalement (ici vous avez quelque chose contre comparer).

Une fois que vous avez obtenu la clé, utilisez-la sur les autres fichiers.

0
Felipe Pereira