Qu'est-ce qui ne va pas avec le cryptage XOR?

j'ai écrit un court programme C++ pour faire le cryptage XOR sur un fichier, que je peux utiliser pour certains fichiers personnels (si elle se fissure ce n'est pas une grosse affaire - je protège juste contre les téléspectateurs occasionnels). Fondamentalement, je prends un mot de passe ASCII et XOR le mot de passe à plusieurs reprises avec les données dans le fichier.

Maintenant, je suis curieux, cependant: si quelqu'un voulait craquer ce, comment vont-ils aller? Serait-il beaucoup de temps? Est-ce que cela dépend de la longueur du mot de passe (c.-à-d. big-O)?

48
demandé sur Steven Sudit 2009-07-16 06:52:03

12 réponses

le problème avec le cryptage XOR est que pour les longs passages des mêmes caractères, il est très facile de voir le mot de passe. Ces longues courses sont le plus souvent des espaces dans des fichiers texte. Dites que votre mot de passe est 8 caractères, et le fichier texte a 16 Espaces Dans une ligne (par exemple, au milieu de la table ASCII-graphiques). Si vous vous contentez de XOR cela avec votre mot de passe, vous verrez que la sortie aura des séquences répétées de caractères. L'attaquant chercherait juste un tel, essayer de deviner le caractère dans le fichier original (l'espace serait le premier candidat à essayer), et dériver la longueur du mot de passe de la longueur des groupes de répétition.

les fichiers binaires peuvent être encore pire car ils contiennent souvent des séquences répétées de 0x00 octets. Évidemment, XORing avec ceux-ci est no-op, de sorte que votre mot de passe sera visible en texte clair dans la sortie! Un exemple d'un format binaire très commun qui a de longues séquences de nulls est .doc .

112
répondu Pavel Minaev 2009-07-16 02:56:37

je suis d'accord avec Pavel Minaev explication de XOR de faiblesses. Pour ceux qui sont intéressés, voici un aperçu de base de l'algorithme standard utilisé pour briser le cryptage trivial XOR en quelques minutes:

  1. déterminez la longueur de la clé. This est fait par XORing des données cryptées avec lui-même décalé divers numéros des lieux, et en examinant combien les octets sont les mêmes.

  2. si les octets qui sont égaux sont supérieure à un certain pourcentage (6% selon de Bruce Schneier Cryptographie appliquée seconde édition ), alors vous avez décalé le données par un multiple du keylength. en trouvant la plus petite quantité de déplacement qui en résulte dans une large montant de l'égalité des octets, vous trouverez les keylength.

  3. poste le texte chiffré par l' keylength, et XOR contre lui-même. Cela enlève la clé et vous laisse avec le texte en clair XORed avec le en clair décalé de la longueur de la clé. il devrait y avoir assez en clair pour déterminer le message contenu.

pour en savoir plus, lisez Encryption Matters, Part 1

66
répondu GeneQ 2017-05-23 12:17:45

XOR cryptage peut être raisonnablement * fort si les conditions suivantes sont remplies:

  • le texte en clair et le mot de passe sont à peu près de la même longueur.
  • le mot de passe n'est pas réutilisé pour chiffrer plus d'un message.
  • le mot de passe ne peut pas être deviné, C'est-à-dire par un dictionnaire ou un autre moyen mathématique. En pratique, cela signifie que les bits sont aléatoires.

* raisonnablement forte ce qui signifie qu'il ne peut pas être brisé par des moyens mathématiques triviaux, comme dans le post de GeneQ. Il n'est pas plus fort que votre mot de passe.

22
répondu SingleNegationElimination 2009-07-16 03:16:39

en plus des points déjà mentionnés, XOR encryption est complètement vulnérable aux attaques connues en clair:

cryptotext = plaintext XOR key
key = cryptotext XOR plaintext = plaintext XOR key XOR plaintext

où XORring les textes s'annulent l'un l'autre, ne laissant que la clé.

ne pas être vulnérable aux attaques connues en clair est une propriété nécessaire mais pas suffisante pour toute méthode de cryptage" sécurisée " où la même clé est utilisée pour plus d'un bloc en clair (c.-à-d. un bloc unique est toujours sécurisé).

12
répondu laalto 2009-07-16 17:51:54

façons de faire fonctionner XOR:

utilisez plusieurs touches avec chaque longueur de touche égale à un nombre premier, mais jamais la même longueur pour les touches. Utilisez le nom de fichier original comme une autre clé, mais n'oubliez pas de créer un mécanisme pour récupérer le nom de fichier. Puis créer un nouveau nom de fichier avec une extension qui vous permettra de savoir c'est un fichier crypté. La raison de l'utilisation de plusieurs clés de la longueur du nombre premier est qu'ils provoquent la clé XOR résultante d'être la clé A fois la clé B dans la longueur avant qu'elle ne se répète. Compresser les motifs répétés du fichier avant qu'il ne soit crypté. Générez un nombre aléatoire et XOR ce nombre chaque fois que X Offset (rappelez-vous, ce nombre doit également être recyclable. Vous pourriez utiliser une graine aléatoire de la longueur du fil.

après avoir fait tout cela, si vous utilisez 5 touches de longueur 31 et plus, vous finiriez avec une longueur de touche d'environ cent Meg!

pour les clés, Le nom du fichier étant un (y compris le chemin complet)), STR(Filesize) + STR(Filedate) + STR(Date) + STR (Time), clé de génération aléatoire, Votre Nom Complet, une clé privée créée une seule fois.

Une base de données pour stocker les clés utilisées pour chaque fichier crypté, mais de garder la DAT fichier sur une clé USB et NON sur l'ordinateur.

cela devrait empêcher le motif de répétition sur les fichiers comme les photos et la musique, mais les films, étant quatre gigs de longueur ou plus, peut encore être vulnérable, donc peut avoir besoin d'une sixième clé.

j'ai personnellement le fichier dat crypté lui-même sur la clé USB (fichier Dat à utiliser avec Microsoft Access). J'ai utilisé une méthode à 3 clés pour le chiffrer car il ne sera jamais aussi grand, étant un répertoire des fichiers avec les clés associées.

la raison pour plusieurs clés plutôt que de générer au hasard une très grande clé est que les nombres premiers les nombres premiers sont grands rapidement et j'ai un certain contrôle sur la création de la clé et vous savez qu'il n'y a vraiment pas chose comme une véritable numéro aléatoire. Si j'ai créé un grand nombre aléatoire, quelqu'un d'autre peut générer ce même nombre.

méthode pour utiliser les clés: chiffrez le fichier avec une clé, puis la prochaine, puis la prochaine jusqu'à ce que toutes les clés sont utilisées. Chaque clé est utilisée encore et encore jusqu'à ce que le fichier entier soit crypté avec cette clé.

parce que les touches sont de longueur différente, le chevauchement de la répétition est différent pour chaque touche et crée ainsi une touche dérivée longueur de la clé une fois la clé deux. Cette logique se répète pour le reste des touches. La raison pour les nombres premiers est que la répétition se produirait sur une division de la longueur de la clé donc vous voulez que la division soit 1 ou la longueur de la clé, hense, prime.

OK, d'accord, c'est plus qu'un simple XOR sur le fichier, mais le concept est le même.

Lance

6
répondu Lance Summers 2011-10-14 10:08:51

je suis seulement à les protéger contre les spectateurs occasionnels

tant que cette hypothèse tient, votre schéma de cryptage est correct. Les gens qui pensent Qu'Internet Explorer est "teh internets" ne sont pas capables de le briser.

si ce n'est pas le cas, utilisez simplement une bibliothèque cryptographique. Il existe déjà de nombreux bons algorithmes comme Blowfish ou AES pour la cryptographie symétrique.

3
répondu John Smith 2009-07-16 17:55:02

la cible d'un bon cryptage est de le rendre mathématiquement difficile à déchiffrer sans la clé.

Cela comprend le désir de protéger la clé elle-même.

La technique XOR est fondamentalement un cryptage très simple facilement brisé comme décrit ici.

il est important de noter que XOR est utilisé dans les algorithmes cryptographiques .

Ces algorithmes fonctionnent sur l'introduction de la difficulté mathématique autour de lui.

2
répondu nik 2009-07-16 03:16:48

L'anti-virus de Norton utilisé pour utiliser une technique de l'utilisation de la lettre non cryptée précédente comme la clé pour la lettre suivante. Il m'a fallu une demi-heure de plus pour comprendre, si je me souviens bien.

si vous voulez simplement arrêter le spectateur occasionnel, c'est suffisant; j'ai l'habitude de cacher des chaînes dans les exécutables. Il ne tiendra pas 10 minutes à quiconque tente réellement, cependant.

que tout dit, ces jours Il ya beaucoup de meilleures méthodes de cryptage facilement disponibles, alors pourquoi ne pas profiter de quelque chose de mieux. Si vous essayez de vous cacher de l'utilisateur "occasionnel", même quelque chose comme gzip ferait mieux ce travail.

2
répondu Chris Arguin 2009-07-16 03:37:36

une autre astuce consiste à générer un hachage md5() pour votre mot de passe. Vous pouvez le rendre encore plus unique en utilisant la longueur du texte protégé comme un offset ou en le combinant avec votre mot de passe pour fournir une meilleure distribution pour les phrases courtes. Et pour les phrases longues, faites évoluer votre hachage md5 () en combinant chaque bloc de 16 octets avec le hachage précédent -- rendant la touche XOR entière "aléatoire" et non répétitive.

2
répondu Phil M 2010-11-27 17:51:34

RC4 est essentiellement XOR encryption! Comme le sont de nombreux chiffrements de flux - la clé est la clé (pas de jeu de mots!) vous ne devez jamais réutiliser la clé. JAMAIS!

1
répondu Michael Howard-MSFT 2010-02-11 23:01:36

je suis un petit retard dans la réponse, mais depuis, personne n'a mentionné encore: il s'agit d'un chiffrement de Vigenère.

Wikipedia donne un certain nombre de attaques de cryptanalyse pour le casser; encore plus simple, cependant, puisque la plupart des formats de fichier ont un en-tête fixe, serait de XOR l'en-tête plaintext avec l'en-tête crypté, vous donnant la clé.

1
répondu BlueRaja - Danny Pflughoeft 2010-06-07 22:43:37

Que ">6%" GeneQ mentionne, c'est l'indice de coïncidence pour l'anglais telegraph texte - 26 lettres, signes de ponctuation et des chiffres énoncés. La valeur réelle pour les textes longs est de 0,0665.

<4% est l'indice de coïncidence aléatoire du texte dans un 26 caractères de l'alphabet, qui est 1/26, ou 0.385.

si vous utilisez une langue différente ou un alphabet différent, les valeurs spécifiques seront différentes. Si vous utilisez le jeu de caractères ASCII, Unicode, ou bytes binaires, les valeurs spécifiques seront très différentes. Mais la différence entre L'IC de plaintext et de texte aléatoire sera généralement présente. (Les binaires compressés peuvent avoir des Ci très proches de celle de random, et tout fichier crypté avec n'importe quel cryptage informatique moderne aura un CI qui est exactement celui de texte aléatoire.)

une fois que vous avez comparé le texte à lui-même, ce qu'il vous reste équivaut à un chiffrement automatique. Wikipédia est un bon exemple de briser un tel chiffre

http://en.wikipedia.org/wiki/Autokey_cipher

1
répondu Jeff Dege 2010-06-07 23:03:11