DES(Data Encryption Standard) est un algorithme de cryptage extrêmement rapide au niveau du chiffrement/déchiffrement. Même si actuellement l'utilisation de DES comme seul moyen de cryptage n'est plus fiable, il est encore utilisé en combinaison avec d'autres systèmes, ou sous sa forme triple DES.
Feistal Horst, un chercheur des laboratoires IBM, propose dans les années '60 un algorithme de cryptage très fiable dont la simplicité permet un codage aisé sur un circuit électronique. Ce projet est retenu sous le nom de code LUCIFER.
En 1972, le NBS (National Bureau of Standard) lance un appel d'offre pour un algorithme de cryptage. Comme le cahier des charges de la demande est fort proche des possibilités qu'offre le projet LUCIFER, IBM y apporte quelques modifications qu'il réponde à la norme demandée.
L'algorithme de IBM est donc retenu en 1977 par le NBS sous le nom DES : Data Encryption Standard.
DES est validé en 1978 par l'ANSI sous le nom DEA (Data Encryption Algorithm).
Le plus petit changement dans le plaintext (fichier en clair) ou dans la clé produit un grand changement dans le ciphertext (fichier crypté). Ce phénomène porte le nom d'effet d'avalanche.
DES est un algorithme à clé symétrique, c'est-à-dire que nous appliquons la même clé pour chiffrer et pour déchiffrer. Ceci suppose que la personne qui chiffre et celle qui déchiffre possèdent la même clé et que celle-ci ait été échangée par un moyen sécurisé.
DES est un algorithme symétrique, qui combine transpositions et substitutions :
Le processus de cryptage nécessite 16 étapes numérotées de 0 à 15, comprenant chacune des transpositions et substitutions.
Le fichier clair (plain text) est découpé en blocs de 64 bits.
Nous utiliserons une clé de 8 octets (64 bits) dont seuls 56 bits serviront au codage. Les 8 bits restant (les bits 8, 16, 24, 32, 40, 48, 56, et 64) étant des bits de parités. Cette clé initiale donnera naissance aux 16 clés de 48 bits nécessaires, chaque niveau de clé se basant sur la clé de niveau supérieur.
Le fichier clair (plain text) est découpé en blocs de 64 bits, chaque bloc étant traité séparément.
Chaque bloc subit une transposition initiale suivant la table suivante :
| 58 | 50 | 42 | 34 | 26 | 18 | 10 | 2 |
| 60 | 52 | 44 | 36 | 28 | 20 | 12 | 4 |
| 62 | 54 | 46 | 38 | 30 | 22 | 14 | 6 |
| 64 | 56 | 48 | 40 | 32 | 24 | 16 | 8 |
| 57 | 49 | 41 | 33 | 25 | 17 | 9 | 1 |
| 59 | 51 | 43 | 35 | 27 | 19 | 11 | 3 |
| 61 | 53 | 45 | 37 | 29 | 21 | 13 | 5 |
| 63 | 55 | 47 | 39 | 31 | 23 | 15 | 7 |
Nous sommes toujours en possession d'un bloc de 64 bits, mais dont les éléments ont changé de place (par exemple, le bit 1 se retrouve à la place du bit 40, le bit 40 se retrouve à la place du bit 28, etc.).
Ce bloc de 64 bits est découpé en deux blocs de 32 bits, L0 (Left zero) et R0 (Right zero). Chaque bloc est placé dans une mémoire tampon (buffer) car nous en aurons besoin ultérieurement.
Chaque bloc (L0 et R0) est traité simultanément, mais dans nos explications, nous n'allons en traiter qu'un seul.
Comme la clé correspondant à cette étape (K0) est composée de 48 bits et que notre bloc est composé de 32 bits, nous allons le soumettre à une nouvelle table de transposition dans laquelle un bit peut se trouver deux fois (par exemple, le bit 1 de la sortie de notre table précédente se retrouve à la position 2, et en même temps à la position 48) :
| 32 | 1 | 2 | 3 | 4 | 5 |
| 4 | 5 | 6 | 7 | 8 | 9 |
| 8 | 9 | 10 | 11 | 12 | 13 |
| 12 | 13 | 14 | 15 | 16 | 17 |
| 16 | 17 | 18 | 19 | 20 | 21 |
| 20 | 21 | 22 | 23 | 24 | 25 |
| 24 | 25 | 26 | 27 | 28 | 29 |
| 28 | 29 | 30 | 31 | 32 | 1 |
Comme nous sommes maintenant en présence de blocs de 48 bits (du bloc R ou L 0), ces derniers sont soumis avec les 48 bits de la clé K0 à un opérateur logique XOR, ce qui nous donne un bloc de 48 bits en sortie.
Vous pouvez consulter la partie sur la génération des clés dans la prochaine section.
Notre bloc de 48 bits est ensuite divisé en 8 vecteurs de 6 bits, chaque vecteur étant finalement traité dans une table de sélection qui permet 4 bits en sortie. Nous avons donc à nouveau un bloc de 32 bits (8 vecteurs de 4 bits).
| n° de vecteur | Valeur des bits extérieurs | Valeurs des bits intérieurs | |||||||||||||||
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | ||
| 0 | 0 (00) | 14 | 4 | 13 | 1 | 2 | 15 | 77 | 8 | 3 | 10 | 6 | 12 | 5 | 9 | 0 | 7 |
| 1 (01) | 0 | 15 | 7 | 4 | 14 | 2 | 13 | 1 | 10 | 6 | 12 | 1 | 9 | 5 | 3 | 8 | |
| 2 (10) | 4 | 1 | 14 | 8 | 13 | 6 | 2 | 11 | 15 | 12 | 9 | 7 | 3 | 10 | 5 | 0 | |
| 3 (11) | 15 | 12 | 8 | 2 | 4 | 9 | 1 | 7 | 5 | 11 | 3 | 14 | 10 | 0 | 6 | 13 | |
| 1 | 0 | 15 | 1 | 8 | 14 | 11 | 6 | 3 | 4 | 9 | 7 | 2 | 13 | 12 | 0 | 5 | 10 |
| 1 | 3 | 13 | 4 | 7 | 15 | 2 | 8 | 14 | 12 | 0 | 1 | 10 | 6 | 9 | 11 | 5 | |
| 2 | 0 | 14 | 7 | 11 | 10 | 4 | 13 | 1 | 5 | 8 | 12 | 6 | 9 | 3 | 2 | 15 | |
| 3 | 13 | 8 | 10 | 1 | 3 | 4 | 15 | 2 | 11 | 6 | 7 | 12 | 0 | 5 | 14 | 9 | |
| 2 | 0 | 10 | 0 | 9 | 14 | 6 | 3 | 15 | 5 | 1 | 13 | 12 | 7 | 11 | 4 | 2 | 8 |
| 1 | 13 | 7 | 0 | 9 | 3 | 4 | 6 | 10 | 2 | 8 | 5 | 14 | 12 | 11 | 15 | 1 | |
| 2 | 13 | 6 | 4 | 9 | 8 | 15 | 3 | 0 | 11 | 1 | 2 | 12 | 5 | 10 | 14 | 7 | |
| 3 | 1 | 10 | 13 | 0 | 6 | 9 | 8 | 7 | 4 | 15 | 14 | 3 | 11 | 5 | 2 | 12 | |
| 3 | 0 | 7 | 13 | 14 | 3 | 0 | 6 | 9 | 10 | 1 | 2 | 8 | 5 | 11 | 12 | 4 | 15 |
| 1 | 13 | 8 | 11 | 5 | 6 | 15 | 0 | 3 | 4 | 7 | 2 | 12 | 3 | 10 | 14 | 9 | |
| 2 | 10 | 6 | 9 | 0 | 12 | 11 | 7 | 13 | 15 | 1 | 3 | 14 | 5 | 2 | 8 | 4 | |
| 3 | 3 | 15 | 0 | 6 | 10 | 1 | 13 | 8 | 9 | 4 | 5 | 11 | 12 | 7 | 2 | 14 | |
| 4 | 0 | 2 | 12 | 4 | 1 | 7 | 10 | 11 | 6 | 8 | 5 | 3 | 15 | 13 | 0 | 14 | 9 |
| 1 | 14 | 11 | 2 | 12 | 4 | 7 | 13 | 1 | 5 | 0 | 15 | 10 | 3 | 9 | 8 | 6 | |
| 2 | 4 | 2 | 1 | 11 | 10 | 13 | 7 | 8 | 15 | 9 | 12 | 5 | 6 | 3 | 0 | 14 | |
| 3 | 11 | 8 | 12 | 7 | 1 | 14 | 2 | 13 | 6 | 15 | 0 | 9 | 10 | 4 | 5 | 3 | |
| 5 | 0 | 12 | 1 | 10 | 15 | 9 | 2 | 6 | 8 | 0 | 13 | 3 | 3 | 4 | 14 | 7 | 5 |
| 1 | 10 | 15 | 4 | 2 | 7 | 12 | 9 | 5 | 6 | 1 | 13 | 14 | 0 | 11 | 3 | 8 | |
| 2 | 9 | 14 | 15 | 5 | 2 | 8 | 12 | 3 | 7 | 0 | 4 | 10 | 1 | 13 | 1 | 6 | |
| 3 | 4 | 3 | 2 | 12 | 9 | 5 | 15 | 10 | 11 | 14 | 1 | 7 | 6 | 0 | 8 | 13 | |
| 6 | 0 | 4 | 11 | 2 | 14 | 15 | 0 | 8 | 13 | 3 | 12 | 9 | 7 | 5 | 10 | 6 | 1 |
| 1 | 13 | 0 | 11 | 7 | 4 | 9 | 1 | 10 | 14 | 3 | 5 | 12 | 2 | 15 | 8 | 6 | |
| 2 | 1 | 4 | 11 | 13 | 12 | 3 | 7 | 14 | 10 | 15 | 6 | 8 | 0 | 5 | 9 | 2 | |
| 3 | 6 | 11 | 13 | 8 | 1 | 4 | 10 | 7 | 9 | 5 | 0 | 15 | 14 | 2 | 3 | 12 | |
| 7 | 0 | 13 | 2 | 8 | 4 | 6 | 15 | 11 | 1 | 10 | 9 | 3 | 14 | 5 | 0 | 12 | 7 |
| 1 | 1 | 15 | 13 | 8 | 10 | 3 | 7 | 4 | 12 | 5 | 6 | 11 | 0 | 14 | 9 | 2 | |
| 2 | 7 | 11 | 4 | 1 | 9 | 12 | 14 | 2 | 0 | 6 | 10 | 13 | 15 | 3 | 5 | 8 | |
| 3 | 2 | 1 | 14 | 7 | 4 | 10 | 8 | 13 | 15 | 12 | 9 | 0 | 3 | 5 | 6 | 11 | |
Chaque vecteur (ligne) de la table d'expansion et transitions est numéroté, et est composé de 6 bits.
Le premier bit et le dernier bit nous fournissent le numéro de ligne, entre 0 et 3, et les 4 bits intermédiaires nous fournissent le numéro de colonne.
Pour notre exemple, prenons au hasard une série de 6 bits : 011001
Nous sommes dans le premier vecteur (ligne 0).
Les bits extérieurs (01) nous indiquent la deuxième ligne (ligne 1).
Les bits intérieurs (1100) nous indiquent la 12ème colonne.
Dans la table de division et positionnement, l'intersection entre la ligne 1 du vecteur 0 et la colonne 12 nous donne la valeur 9, qui sera codée sur 4 bits de manière binaire normale : 1001.
Si nous procédons de la même manière pour chacun des 8 vecteurs, nous nous trouvons à nouveau en possession d'un bloc de 32 bits (8 vecteurs de 4 bits).
Les blocs de 32 bits subissent ensuite une série de transpositions selon la table suivante :
| 16 | 17 | 20 | 21 |
| 29 | 12 | 28 | 17 |
| 1 | 15 | 23 | 26 |
| 5 | 18 | 31 | 10 |
| 2 | 8 | 24 | 14 |
| 32 | 27 | 3 | 9 |
| 19 | 13 | 30 | 6 |
| 22 | 11 | 4 | 25 |
Imaginons que nous étions occupés à traiter le bloc de 32 bits R0, nous devons à présent le soumettre avec le bloc L0 (qui a été mémorisé plus tôt) à l'opérateur logique XOR. Cette opération nous renvoie un tableau de 32 bits.
Nous devons exécuter au total 16 fois les opérations de la phase 2.
A la 16ème itération, les deux blocs de 32 bits de gauche et de droite sont réunis en un bloc de 64 bits dans la table suivante :
| 40 | 8 | 48 | 16 | 56 | 24 | 64 | 32 |
| 39 | 7 | 47 | 15 | 55 | 23 | 63 | 31 |
| 38 | 6 | 46 | 14 | 54 | 22 | 62 | 30 |
| 37 | 5 | 45 | 13 | 53 | 21 | 61 | 29 |
| 36 | 4 | 44 | 12 | 52 | 20 | 60 | 28 |
| 35 | 3 | 43 | 11 | 51 | 19 | 59 | 27 |
| 34 | 2 | 42 | 10 | 50 | 18 | 58 | 26 |
| 33 | 1 | 41 | 9 | 49 | 17 | 57 | 25 |
Comme nous l'avons vu précédemment, la clé secrète utilisée dans l'algorithme DES est une clé de 64 bits, dont 56 servent au chiffrement, et 8 servent de bits de parités (les bits 8, 16, 24, 32, 40, 48, 56, et 64) .
Nous devrons générer 16 clés depuis ce bloc de 56 bits, une pour chaque itération.
Le bloc clé de 56 bits subit une première série de transpositions et une division en 2 blocs de 28 bits selon les tables suivantes :
|
|
Les deux blocs subiront chacun un décalage vers la gauche, en fonction du niveau d'itération (le numéro d'étape, de 0 à 15), selon l'ordre suivant : 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1.
Ensuite, les 2 blocs de 28 bits sont rassemblés en un bloc de 56 bits. Ce bloc de 56 bits est mémorisé car il nous servira pour générer la clé suivante, puis il subira une série de transpositions avec oubli pour obtenir un bloc de 48 bits selon cette table :
| 14 | 17 | 11 | 24 | 1 | 5 |
| 3 | 28 | 15 | 6 | 21 | 10 |
| 23 | 19 | 12 | 4 | 26 | 8 |
| 16 | 7 | 27 | 20 | 13 | 2 |
| 41 | 52 | 31 | 37 | 47 | 55 |
| 30 | 40 | 51 | 45 | 33 | 48 |
| 44 | 49 | 39 | 56 | 34 | 53 |
| 46 | 42 | 50 | 36 | 29 | 32 |
Nous sommes en possession d'une clé de 48 bits que nous pourrons soumettre à une porte logique XOR avec les 48 bits du message.
La clé du niveau suivante est générée de la même manière, mais en partant du bloc de 56 bits que nous venons d'obtenir en réunissant les 2 blocs de 28 bits.
L'algorithme de cryptage DES est symétrique, ce qui signifie que nous allons utiliser les mêmes étapes, en utilisant les mêmes clés, mais en inversant l'ordre des clés (de la clé 15 à la clé 0).
Le mode opératoire est la manière dont les blocs sont présentés à l'algorithme.
Considérons x i les blocs en clair, y i les blocs chiffrés et E k la fonction d'encryption avec une clé K.
y i = eK (x i )
y 0 = valeur initiale y i = eK (y i -1 XOR x i ) avec i >= 1
z i = eK(y i -1)
y i = x i XOR z i avec i >= 1
Une valeur initiale z0 sert à créer des clés telles que z i = Ek (z i-1 ).
Cette valeur sert à créer des blocs chiffrés tels que y i = x i XOR z i.
En 1979, IBM découvre que la longueur de clé de 56 bits est devenue insuffisante pour assurer un niveau de sécurité acceptable lors d'une utilisation isolée de DES. Il était possible d'augmenter la longueur des clés, mais les dispositifs de cracking pour des clés plus longues étaient déjà présents.
La parade utilisée (et qui est toujours efficace à l'heure actuelle) est d'effectuer trois codages successifs à l'aide de 2 clés différentes, d'où le nom "triple DES".
Deux clés sont générées : K1 et K2.
Pour le déchiffrement triple DES, les opérations inverses sont réalisées :
Pour assurer la compatibilité entre DES et triple DES, il suffit de rentrer deux fois la même clé dans l'algorithme triple DES. La compatibilité est ainsi assurée en chiffrement ou en déchiffrement, mais au détriment du niveau de sécurité (nous retombons au niveau de DES simple).
La base de données est temporairement indisponible
Le site rencontre momentanément quelques problèmes...
La base de données est temporairement indisponible (), ce qui explique que de nombreuses fonctions ne soient temporairement pas accessibles (par exemple les liens de navigation, les sommaires, etc.) et que l'affichage des pages soit beaucoup plus lent.
Veuillez réessayer dans quelques minutes (les tests automatiques sont effectués toutes les 15 minutes).
Je vous présente mes excuses pour le désagrément que cela engendre.
Steph.
Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher les interactions avec les réseaux sociaux sur ces pages.
Recherche (afficher)
Utilisateur (afficher)
Navigation (masquer)
Apparence (afficher)
Stats (afficher)
Citation (masquer)