« Tor, conception, fonctionnement et limites » : différence entre les versions

Aller à la navigation Aller à la recherche
Ligne 477 : Ligne 477 :


=== Advanced Encryption Standard ===
=== Advanced Encryption Standard ===
*A VENIR*
 
L'algorithme symétrique utilisé par Tor pour protéger les données est l'Advanced Encryption Standard, plus communément appellé AES. C'est l'un des algorithmes les plus robustes qui existe à ce jour. Accessoirement, c'est aussi l'algorithme qui sécurise vos échanges de données quand vous allez sur Psychoactif. AES fonctionne de la façon suivante. Supposons que je veuille chiffrer le mot suivant : "Acide Lysergique". Les caractères en informatique sont codés via la table ASCII qui permet d'associer des nombres (de 0 à 255) à 256 symboles, ces nombres étant codés sur 8 bits (1 octet). Par exemple le L majuscule correspond à 76 (01001100 en binaire) dans la table ASCII. Donc :
 
A  c  i  d  e      L  y  s  e  r  g  i  q  u  e
65 99 105 100 101 32 76 121 115 101 114 103 105 113 117 101
 
L'algorithme AES travaille sur des blocs de 4*4 éléments qui font 128 bits (126/16 = 8 bits, on retrouve bien nos 8 bits qui codent les lettres). Là, j'ai bien choisi mon mot pour qu'il y aie pile poil 16 caractères. Mais si il faut chiffrer plus de données, AES crée d'autre blocs à la suite et remplit les blocs incomplets avec des données bidon.
 
Du coup, voici mon bloc :
 
65  99  105 100
101 32  76  121
115 101 114 103
105 113 117 101
 
 
La clé de AES est une clé maîtresse de 128, 192 ou 256 bits en fonction de la force de l'algorithme, et à partir de laquelle seront déduites des sous-clés de 128 bits. Ces sous-clés auront le même format qu'un bloc. Qu'elles se présenteront sous la forme d'une matrice aléatoire de 4*4.
 
Et du coup, voici une sous-clé créée pour l'occasion qui est constituée de nombres aléatoires compris entre 0 et 255 :
 
177 75  103 21
136 203 117 146
43  199 147 187
250 194 10  172
 
Ensuite, AES se déroule "tours" comportant 4 étapes plus un tour préliminaire.
 
Tour préliminaire (AddRoundKey) :
 
Il s'agit ici d'appliquer la fonction XOR (OU exclusif) entre chaque nombres du bloc à coder et chaque nombres de la clé. Pour bien comprendre, il faut passer en binaire. La fonction XOR renvoie 1 si les 2 bits en entrée sont différents et 0 s'ils sont identiques. Par exemple prenons notre première lettre (65) et le premier nombre de notre clé (177) :
 
    65 01000001
XOR 177 =  XOR 10110001 = 11110000 = 240
 
A ce stade, notre matrice devient donc :
 
240 40  14  113
237 235 57  235
88  162 225 220
147 179 255 201
 
 
Tours :
 
1ère étape (Générique) : SubBytes
 
On applique à chaque élément du bloc à chiffrer une fonction non-linéaire prédéfinie. L'idée de cette étape, c'est de changer drastiquement tous les éléments du bloc. En cryptographie, on appelle cette propriété la confusion, et les transformations non-linéaires sont parfaites pour ça (si vous voulez les détails technique, ça consiste à prendre l'inverse de ces éléments dans un corps de Galois GF(256) et d'y appliquer une relation affine). Concrètement, étant donné que cette étape est générique, on peut établir une table de conversion qu'on appelle une S-box (Substitution box) et qui est disponible ici en hexadécimal (https://en.wikipedia.org/wiki/Rijndael_S-box). Du coup, mon bloc devient :
 
240 40  14  113 140 52  171 163
237 235 57  235 85  233  18 233
88  162 225 220 106 58  248 134
147 179 255 201 220 109  22 221
 
 
Deuxième étape (Générique) : ShiftRows :
 
C'est très simple, on décale les lignes de la matrice suivant l'exemple donné ci dessous. L'idée, cette fois ci, est d'assurer ce qu'on appelle en cryptographie la diffusion. C'est à dire que le moindre changement dans le message de départ se répercutera de façon considérable dans l'algorithme et aboutira à un chiffré radicalement différent.
 
140 52  171 163 140  52 171 163
85  233  18 233 233  18 233  85
106 58  248 134 248 134 106  58
220 109  22 221 221 220 109  22
 
 
 
3ème étape (Générique) : MixColumns
 
Il s'agit cette fois ci de multiplier chaque colonne de la matrice par une matrice spéciale appellée MDS (Maximum Distance Separable). Cette matrice a été calculée pour optimiser la propriété de diffusion citée ci dessus. Concrètement, tous les éléments de la colonne vont s'influencer les uns les autres. Cette matrice est la suivante :
 
2 3 1 1
1 2 3 1
1 1 2 3
3 1 1 2
 
Exemple avec la première colonne. La multiplication s'effectue dans un corps de Galois GF(2⁸)
 
140
233
248
221
 
2 3 1 1 (2x140 XOR 3x233 XOR 1x248 XOR 1x221) = 50
1 2 3 1 (1x140 XOR 2x233 XOR 3x248 XOR 1x221) = 139
1 1 2 3 (1x140 XOR 1x233 XOR 2x248 XOR 3x221) = 242
3 1 1 2 (3x140 XOR 1x233 XOR 1x248 XOR 2x221) = 63
 
Donc la matrice devient :
 
140  52 171 163 50  4 106 142
233  18 233  85 139  93 177  81
248 134 106  58 242  78  21 184
221 220 109  22 63 107 191 135
 
 
4ème étape (Dépendante de la clé) : AddRoundKey
 
Il s'agit de la même chose que le tour préliminaire avec la fonction XOR, mais à partir d'une nouvelle sous-clé aléatoire déduite de la clé maîtresse (Une sous-clé aléatoire différente par tour), mettons :
 
184 116 102 114 50  4 106 142 138 112  12 252
222 163  60  91 139  93 177  81 85 254 113  10
145  53  23  15 XOR 242  78  21 184 = 99 123  2 183
181 222  21  75 63 107 191 135 138 181 170 204
 
 
Ensuite, on recommence toutes ces étapes 10, 12 ou 14 fois en fonction de la taille de la clé maîtresse (AES 128/192/256 bits). A cette étape, si on reprend notre table ASCII, notre message initial (Acide Lysergique) ressemblerait à :
 
138 112  12 252 85 254 113  10  99 123    2 183 138 181 170 204
Š    p *FF*  ü  U  þ  q *LF*  c  { *STX*  ·  Š  µ  ª  Ì
 
Šp*FF*üUþq*LF*c{*STX*·ŠµªÌ


== Références ==
== Références ==
<references/>
<references/>