Quel est le problème avec le cryptage XOR?
J'ai écrit un court programme en C++ pour faire de cryptage XOR sur un fichier, que je peut utiliser pour certains fichiers personnels (s'il fait craqué c'est pas grave - je suis seulement à les protéger contre les spectateurs occasionnels). En gros, je prends un mot de passe ASCII et à plusieurs reprises XOR le mot de passe avec les données dans le fichier.
Maintenant, je suis curieux, cependant: si quelqu'un voulait crack cela, comment pourraient-ils le faire? Serait-il beaucoup de temps? Cela dépend-il de la longueur du mot de passe (c'est à dire, quel est le big-O)?
- Ou vous pouvez simplement briser et d'utiliser quelque chose comme TrueCrypt...
Vous devez vous connecter pour publier un commentaire.
Le problème avec le cryptage XOR, c'est que pour les longues courses caractères de même, il est très facile de voir le mot de passe. Ces longues courses sont le plus souvent des espaces dans des fichiers texte. Dire votre mot de passe est de 8 caractères, et le fichier texte a 16 places dans une certaine ligne (par exemple, dans le milieu de l'ASCII-table graphique). Si vous venez de XOR avec votre mot de passe, vous verrez que la sortie de répétition des séquences de caractères. L'attaquant serait juste regarder pour tout, d'essayer de deviner le caractère dans le fichier d'origine (l'espace serait le premier candidat à essayer) et calculer la longueur du mot de passe de la longueur de la répétition de groupes.
Fichiers binaires peuvent être encore pire car ils contiennent souvent de la répétition des séquences de
0x00
octets. Évidemment, XORing avec celles-ci est sans objet, de sorte que votre mot de passe sera visible en texte brut dans la sortie! Un exemple d'un très commun en format binaire qui a de longues séquences de zéros est.doc
.Je suis d'accord avec Pavel Minaev de l' explication de XOR de faiblesses. Pour ceux qui sont intéressés, voici un aperçu de base de l'algorithme utilisé pour briser le trivial cryptage XOR dans quelques minutes:
De déterminer combien de temps est la clé. Ce
est fait par XORing les données chiffrées
avec lui-même décalé divers numéros
de lieux, et d'examiner la façon dont beaucoup de
les octets sont les mêmes.
Si les octets sont égaux sont
supérieure à un certain pourcentage
(6% accoridng à de Bruce Schneier
Cryptographie appliquée seconde
edition), alors vous avez déplacé la
données par un multiple de la keylength.
Par trouver la plus petite quantité de
déplacement qui en résulte dans une large
montant de l'égalité des octets, vous trouverez les
keylength.
Maj 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 l'
en clair décalé de la longueur de la
clé. Il devrait y avoir assez
en clair pour déterminer le message
contenu.
Lire plus à Le Chiffrement Des Questions, Partie 1
XOR de chiffrement peut être raisonnablement* forte que si les conditions suivantes sont remplies:
*Raisonnablement solide sens ne peut être rompu par trivial, mathématiques comme GeneQ post. Il n'est pas plus fort que votre mot de passe.
Outre les points déjà mentionnés, le cryptage XOR est totalement vulnérable à connu des attaques de plain-texte:
où XORring la plaintexts annuler les uns les autres, en laissant juste la clé.
Ne pas être vulnérables à connu des attaques de plain-texte est nécessaire mais non suffisante de la propriété pour tous "sécurisé" méthode de cryptage où la même clé est utilisée pour plus d'un bloc de texte en clair (c'est à dire un one-time pad est encore sûr).
Façons de faire XOR travail:
Utiliser plusieurs touches avec chaque clé de longueur égale à un nombre premier mais jamais de la même longueur pour les clés.
Utiliser le nom de fichier d'origine comme une autre clé, mais n'oubliez pas de créer un mécanisme permettant de 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 pour l'utilisation de plusieurs touches du premier numéro de la longueur, c'est qu'ils provoquent de l'résultant XOR clé à la Clé UNE FOIS la Clé de B dans la longueur avant de se répéter.
Compresser de répéter les motifs du fichier avant qu'il soit chiffré.
Générer un nombre aléatoire et XOR ce nombre tous les X Offset (Rappelez-vous, ce numéro doit également être recreatable. Vous pouvez utiliser une valeur ALÉATOIRE de la Filelength.
Après avoir fait tout cela, si vous utilisez des 5 touches de longueur de 31 et plus, vous vous retrouvez avec une longueur de clé de près d'Une Centaine de Meg!
Pour les clés, le nom du fichier en cours (y compris le chemin d'accès complet), STR(Taille) + STR(Filedate) + STR(Date) + STR(Temps), Génération Aléatoire de la Clé, 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.
Ce qui devrait éviter le motif répété sur des fichiers comme des Images et de la Musique mais films, quatre concerts de longueur ou plus, peut-être encore vulnérable, alors peut-être besoin d'un sixième de la clé.
Personnellement, j'ai le fichier dat chiffrées sur le bâton de mémoire (fichier Dat pour une utilisation avec Microsoft Access). J'ai utilisé un 3-méthode Clé pour chiffrer de cause, il ne sera jamais QUE les grandes, étant un répertoire de fichiers avec les touches associées.
La raison pour laquelle plusieurs touches plutôt que de générer aléatoirement une clé très importante, c'est que les nombres premiers nombres premiers temps obtenir de grandes rapide et j'ai un certain contrôle sur la création de la clé et vous SAVEZ qu'il n'y a vraiment aucune une telle chose comme une véritable numéro aléatoire. Si j'ai créé un grand nombre au hasard, quelqu'un d'autre peut générer le même nombre.
De la méthode à utiliser les touches: Crypter le fichier avec une clé, puis la suivante, puis la suivante jusqu'à ce que toutes les clés sont utilisés. Chaque clé est utilisé maintes et maintes fois jusqu'à la totalité du fichier est crypté avec la 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 clé dérivée de la longueur de la Clé moment Clé les deux. Cette logique se répète pour le reste des touches. La raison des nombres premiers est que la répétition se ferait sur une division de la longueur de la clé si vous voulez la section 1 ou de la longueur de la clé, hense, le premier.
OK, d'accord, c'est plus qu'un simple XOR sur le fichier, mais le concept est le même.
Lance
Aussi longtemps que cette hypothèse tient, votre schéma de chiffrement est ok. Les gens qui pensent qu'Internet Explorer est "teh internets" ne sont pas capables de le casser.
Si non, il suffit d'utiliser certains librairie de cryptographie. Il y a déjà beaucoup de bons algorithmes comme Blowfish AES ou pour symétrique crypto.
La cible d'un bon cryptage est de rendre mathématiquement difficile à déchiffrer sans la clé.
Cela comprend le désir de protéger la clé elle-même.
Le XOR technique est fondamentalement très simple de chiffrement facilement cassé, comme décrit ici.
Il est important de noter que le XOR est utilisé dans les algorithmes de chiffrement.
Ces algorithmes de travail sur l'introduction de la difficulté de mathématique autour d'elle.
Norton Anti-virus utilisé pour utiliser une technique d'aide à la précédente non chiffrés lettre comme la clé pour la prochaine lettre. Qui m'a pris une demi-heure à comprendre, si je me souviens bien.
Si vous voulez arrêter le spectateur occasionnel, c'est assez bon; je l'ai utilisé pour masquer des chaînes de caractères dans des fichiers exécutables. Il ne résiste pas 10 minutes à n'importe qui, en fait, essaie, cependant.
Que tout est dit, ces jours, il ya beaucoup de meilleures méthodes de cryptage disponibles facilement, alors pourquoi ne pas profiter de quelque chose de mieux. Si vous essayez de juste se cacher dans le "casual" de l'utilisateur, même quelque chose comme gzip permettrait de faire un meilleur travail.
Une autre astuce consiste à générer un md5() de hachage pour votre mot de passe. Vous pouvez la rendre encore plus unique, en utilisant la longueur du texte protégé par un décalage ou de le combiner avec votre mot de passe pour fournir une meilleure distribution pour de courtes phrases. Et pour de longues phrases, de faire évoluer votre md5() hachage par la combinaison de chacun des 16 octets du bloc avec la précédente hachage -- de l'ensemble du XOR touche "random" et non répétitive.
RC4 est essentiellement le cryptage XOR! Comme le sont de nombreux chiffrements de flux - la clé est la clé (pas de jeu de mots!) vous devez ne JAMAIS réutiliser la clé. JAMAIS!
Je suis un peu retard dans la réponse, mais depuis, personne n'a mentionné encore: il s'agit d'un chiffrement de Vigenère.
Wikipédia donne un certain nombre de les attaques de cryptanalyse de le casser; encore plus simple, puisque la plupart des fichiers aux formats un en-tête fixe, ce serait XOR le texte en clair-d'en-tête avec la chiffré à en-tête, vous donnant la clé.
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 longs textes est 0.0665.
Le <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 autre langue ou un autre alphabet, les valeurs seront différentes. Si vous utilisez le jeu de caractères ASCII, Unicode, ou la forme d'octets binaires, les valeurs spécifiques seront très différentes. Mais la différence entre les IC de texte en clair et le texte aléatoire sera généralement présents. (Compressé les fichiers binaires peuvent avoir ICs très proche de celle de l'aléatoire, et un fichier chiffré avec n'importe quel ordinateur moderne cipher ont un IC qui est exactement celle du texte aléatoire.)
Une fois que vous avez XORed le texte contre lui-même, ce que vous avez à gauche est l'équivalent d'une autokey de chiffrement. Wikipédia est un bon exemple de briser un tel chiffrement
http://en.wikipedia.org/wiki/Autokey_cipher