web-dev-qa-db-fra.com

Pourquoi XOR est-il utilisé en cryptographie?

Pourquoi seulement XOR est-il utilisé dans les algorithmes cryptographiques et d'autres portes logiques comme OR, AND et NOR ne sont pas utilisées?)

66
Bhaskar

Il n'est pas tout à fait vrai de dire que l'opération logique XOR est la seule utilisée dans toute la cryptographie, mais c'est le seul cryptage bidirectionnel où il est utilisé exclusivement.

Voici cela expliqué:

Imaginez que vous ayez une chaîne de chiffres binaires 10101 et vous XOR la chaîne 10111 avec elle vous obtenez 00010

maintenant votre chaîne d'origine est encodée et la deuxième chaîne devient votre clé si vous XOR votre clé avec votre chaîne encodée vous récupérez votre chaîne d'origine.

XOR vous permet de crypter et décrypter facilement une chaîne, contrairement aux autres opérations logiques.

Si vous avez une chaîne plus longue, vous pouvez répéter votre clé jusqu'à ce qu'elle soit suffisamment longue, par exemple si votre chaîne était 1010010011 alors vous écririez simplement votre clé deux fois et elle deviendrait 1011110111 et XOR avec la nouvelle chaîne

Voici un lien wikipedia sur le code XOR.


66
Stephen Lacy

Je peux voir 2 raisons:

1) (Raison principale) XOR ne divulgue pas d'informations sur le texte en clair d'origine.

2) (Raison d'avoir) XOR est une fonction involutoire , c'est-à-dire que si vous appliquez XOR deux fois, vous récupérer le texte en clair d'origine (c'est-à-dire XOR(k, XOR(k, x)) = x, où x est votre texte en clair et k est votre clé). Le XOR est le chiffrement et l'extérieur XOR est le déchiffrement, c'est-à-dire que la même fonction XOR peut être utilisée à la fois pour le chiffrement et le déchiffrement).

Pour illustrer le premier point, considérons les tables de vérité de AND, OR et XOR:

Et

0 ET 0 = 0

0 ET 1 = 0

1 ET 0 = 0

1 ET 1 = 1 (fuite!)

Ou

0 OR 0 = 0 (fuite!)

0 OR 1 = 1

1 OR 0 = 1

1 OR 1 = 1

XOR

0 XOR 0 = 0

0 XOR 1 = 1

1 XOR 0 = 1

1 XOR 1 = 0

Tout sur la première colonne est notre entrée (c'est-à-dire le texte brut). La la deuxième colonne est notre clé et la la dernière colonne est le résultat de votre entrée "mélangée" (cryptée) avec la clé en utilisant l'opération spécifique (c.-à-d. Le texte chiffré).

Maintenant, imaginez qu'un attaquant ait accès à un octet chiffré, par exemple: 10010111 , et il souhaite obtenir l'octet en clair d'origine.

Disons que l'opérateur AND a été utilisé afin de générer cet octet chiffré à partir de l'octet de texte brut d'origine. Si ET a été utilisé, alors nous savons avec certitude que chaque fois que nous voyons le bit "1" dans l'octet crypté, l'entrée (c'est-à-dire la première colonne, le texte brut) DOIT également être "1" selon la table de vérité de ET. Si le bit chiffré est un "0" à la place, nous ne savons pas si l'entrée (c'est-à-dire le texte brut) est un "0" ou un "1". Par conséquent, nous pouvons conclure que le texte brut d'origine est: 1 _ _ 1 _ 111. Ainsi, 5 bits du texte brut d'origine ont été divulgués (c'est-à-dire accessibles sans clé).

En appliquant la même idée à OR, nous voyons que chaque fois que nous trouvons un "0" dans l'octet chiffré, nous savons que l'entrée (c'est-à-dire le texte brut) doit également être un "0". Si nous trouvons un "1", nous ne savons pas si l'entrée est un "0" ou un "1". Par conséquent, nous pouvons conclure que le texte brut en entrée est: _ 00 _ 0 _ _ _. Cette fois, nous avons pu divulguer 3 bits de l'octet de texte brut d'origine sans rien savoir de la clé.

Enfin, avec XOR, nous ne pouvons obtenir aucun bit de l'octet de texte brut d'origine. Chaque fois que nous voyons un "1" dans l'octet chiffré, ce "1" pourrait avoir été généré à partir d'un "0" ou d'un "1". Même chose avec un "0" (cela peut provenir à la fois de "0" ou de "1"). Par conséquent, pas un seul bit n'est divulgué de l'octet de texte brut d'origine.

34
Tiago

La raison principale est que si une variable aléatoire avec une distribution inconnue R1 est XOR avec une variable aléatoire R2 avec une distribution uniforme, le résultat est une variable aléatoire avec une distribution uniforme, donc fondamentalement vous pouvez randomiser une entrée biaisée facilement ce qui n'est pas possible avec d'autres opérateurs binaires.

32
Anurag Uniyal

La sortie de XOR dépend toujours des deux entrées. Ce n'est pas le cas pour les autres opérations que vous mentionnez.

26
recursive

Je pense que parce que XOR est réversible. Si vous voulez créer du hachage, alors vous voudrez éviter XOR.

6
Denis Masyukov

XOR est la seule porte utilisée directement car, quelle que soit l'une des entrées, l'autre entrée a toujours un effet sur la sortie.

Cependant, ce n'est pas la seule porte utilisée dans les algorithmes cryptographiques. Cela pourrait être vrai de la cryptographie à l'ancienne, du type impliquant des tonnes de shuffles de bits et de XOR et de tampons rotatifs, mais pour la cryptographie basée sur des nombres premiers, vous avez besoin de toutes sortes de mathématiques qui ne sont pas implémentées via XOR.

6
jprete

XOR agit comme un interrupteur à bascule où vous pouvez activer et désactiver des bits spécifiques. Si vous voulez "brouiller" un nombre (un motif de bits), vous XOR avec un nombre. Si vous prenez ce nombre brouillé et XOR il à nouveau avec le même numéro, vous récupérez votre numéro d'origine.

210 XOR 145 gives you  67  <-- Your "scrambled" result
 67 XOR 145 gives you 210  <-- ...and back to your original number

Lorsque vous "brouillez" un nombre (ou du texte ou n'importe quel motif de bits) avec XOR, vous avez la base d'une grande partie de la cryptographie.

4
Robert Cartaino

XOR utilise moins de transistors ( 4 portes NAND ) que des opérations plus compliquées (par exemple ADD, MUL), ce qui rend la mise en œuvre matérielle intéressante lorsque le nombre de portes est important . En outre, un XOR est son propre inverse, ce qui le rend bon pour appliquer le matériel de clé (le même code peut être utilisé pour le cryptage et le décryptage) Le très simple AddRoundKey le fonctionnement d'AES en est un exemple.

3
Jeff Moser

La propriété XOR (a xor b) xor b = a est très utile pour les chiffrements de flux: pour crypter des données sur un bit, une séquence pseudo-aléatoire de n bits est généré à l'aide de la clé de chiffrement et de l'algorithme de chiffrement.

 Expéditeur: 
 Données: 0100 1010 (0x4A) 
 Séquence pseudo aléatoire: 1011 1001 (0xB9) 
 ------------ ------ 
 données chiffrées 1111 0011 (0xF3) 
 ------------------ 
 
 Récepteur: 
 Données chiffrées 1111 0011 (0xF3) 
 Séquence pseudo aléatoire: 1011 1001 (0xB9) (le récepteur a une clé et calcule la même séquence) 
 ------- ----------- 
 0100 1010 (0x4A) Données après déchiffrement 
 ------------------ 
2
Babu Srinivasan

Considérons les trois opérateurs logiques au niveau du bit communs

Disons que nous pouvons choisir un certain nombre (appelons-le le masque) et le combiner avec une valeur inconnue

  • ET consiste à forcer certains bits à zéro (ceux qui sont mis à zéro dans le masque)
  • OU consiste à forcer certains bits à un (ceux qui sont définis sur un dans le masque)

XOR est plus subtil, vous ne pouvez pas savoir avec certitude la valeur de n'importe quel bit du résultat, quel que soit le masque que vous choisissez. Mais si vous appliquez votre masque deux fois vous récupérez votre valeur initiale.

En d'autres termes, le but de AND et OR est de supprimer certaines informations, et ce n'est certainement pas ce que vous voulez dans les algorithmes cryptographiques (chiffrement symétrique ou asymétrique, ou signature numérique). Si vous perdez des informations, vous ne sera pas en mesure de le récupérer (déchiffrer) ou la signature tolérera des changements infimes dans le message, ce qui ira à l'encontre de son objectif.

Cela dit, c'est vrai pour les algorithmes cryptographiques, pas pour leurs implémentations. La plupart des implémentations d'algorithmes cryptographiques utilisent également de nombreux ET, généralement pour extraire des octets individuels de 32 ou 64 registres internes.

Vous obtenez généralement du code comme ça (il s'agit d'un extrait presque aléatoire de aes_core.c)

rk[ 6] = rk[ 0] ^
 (Te2[(temp >> 16) & 0xff] & 0xff000000) ^
 (Te3[(temp >>  8) & 0xff] & 0x00ff0000) ^
 (Te0[(temp      ) & 0xff] & 0x0000ff00) ^
 (Te1[(temp >> 24)       ] & 0x000000ff) ^
 rcon[i];
rk[ 7] = rk[ 1] ^ rk[ 6];
rk[ 8] = rk[ 2] ^ rk[ 7];
rk[ 9] = rk[ 3] ^ rk[ 8];

8 XOR et 7 AND si je compte bien

2
kriss

Pour la crypto symétrique, les seules opérations de choix réelles qui mélangent les bits avec le chiffre et n'augmentent pas la longueur sont les opérations ajouter avec report, ajouter sans report (XOR) et comparer (XNOR). Toute autre opération perd des bits, se développe ou n'est pas disponible sur les CPU.

2
Joshua

XOR est un calcul mathématique en cryptographie. C'est une opération logique. Il existe d'autres opérations logiques: AND, OR, NOT, Modulo Function etc. XOR est la plus importante et la plus utilisée.

enter image description here

Si c'est pareil, c'est 0.

Si c'est différent, c'est 1.

Exemple:

Message: Bonjour

Version binaire de Hello: 01001000 01100101 01101100 01101100 01101111

Flux de clés: 110001101010001101011010110011010010010111

Chiffrer le texte en utilisant XOR: 10001110 11000110 00110110 10100001 01001010

Applications: le pavé à usage unique/chiffrement Vern-am utilise la fonction exclusive ou dans laquelle le récepteur a le même flux de clés et reçoit le texte chiffré sur un canal de transport secret. Le récepteur Xor puis le texte chiffré avec le flot de clés afin de révéler le texte en clair de Bonjour. Dans One Time Pad, le flux de clés doit être au moins aussi long que le message.

Réalité: Le One Time Pad est le seul cryptage vraiment incassable.

Exclusif Ou utilisé dans la structure Feistel qui est utilisée dans le chiffrement par bloc DES algo.

Remarque: XOR a 50% de chances de sortir 0 ou 1.

enter image description here

1
Rajesh Prajapati

Je pense que c'est simplement parce qu'un ensemble donné de nombres binaires aléatoires qu'un grand nombre d'opérations "OU" tendra vers tous les "1", de même qu'un grand nombre d'opérations "ET" tendra vers tous les zéros. Partout où un grand nombre de "XOR" produit une sélection aléatoire de uns et de zéros.

Cela ne veut pas dire que ET et OR ne sont pas utiles - juste que XOR est plus utile).

La prévalence de OR/AND et XOR en cryptographie est pour deux raisons: -

Ce sont des instructions rapides comme l'éclair.

Deux, ils sont difficiles à modéliser à l'aide de formules mathématiques conventionnelles

1
James Anderson