Algorithme de cryptage DES : Data Encryption Standard

DES 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.

Historique du cryptage 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 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' sous le nom DEA.

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é.

Principes de l'algorithme de cryptage DES

DES est un algorithme symétrique, qui combine transpositions et substitutions :

  • La transposition est le fait de déplacer des éléments du fichier clair (plain text) dans le fichier crypté (cypher text). Les transpositions permettent d'éclater dans le fichier crypté la redondance présente dans le fichier clair.
    Dans le cas de l'algorithme DES, nous rencontrerons aussi le terme permutation au lieu de transposition.
  • La substitution est la transformation d'un élément du fichier clair en un autre élément dans le fichier chiffré. Les substitutions non linéaires permettent de compliquer la liaison entre le fichier crypté et les clés secrètes.

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.

Table des matières Haut

Chiffrement à l'aide de DES

Le fichier clair (plain text) est découpé en blocs de 64 bits, chaque bloc étant traité séparément.

Phase 1 : Transposition initiale du bloc de 64 bits

Chaque bloc subit une transposition initiale suivant la table suivante :

Table de transpositions initiales 
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.).

Phase 2 : 16 itérations

Division en blocs de 32 bits

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.

Expansion à 48 bits et transpositions

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) :

Expansions et transpositions 
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 |

Application de la clé de 48 bits

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.

Sélection (passage de 48 à 32 bits)

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).

Sélection : division et positionnement 
n° de vecteurValeur des bits extérieursValeurs des bits intérieurs
0123456789101112131415
00 (00) 1441312157783106125907
1 (01) 015741421311061219538
2 (10) 4114813621115129731050
3 (11) 1512824917511314100613
101518141163497213120510
13134715281412011069115
20147111041315812693215
31381013415211671205149
201009146315511312711428
11370934610285141211151
21364981530111212510147
31101306987415143115212
307131430691012851112415
11381156150347212310149
21069012117131513145284
33150610113894511127214
402124171011685315130149
11411212471315015103986
24211110137815912563014
31181271142136150910453
50121101592680133341475
11015427129561131401138
2914155281237041011316
34321295151011141760813
604112141508133129751061
11301174911014351221586
21411131237141015680592
36111381410795015142312
701328461511110931450127
11151381037412561101492
27114191214206101315358
32114741081315129035611

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.

Exemple

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).

Transpositions du bloc de 32 bits

Les blocs de 32 bits subissent ensuite une série de transpositions selon la table suivante :

Transpositions sur 32 bits 
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 |

Opérateur XOR

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.

Phase 3 : Transposition finale sur 64 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 :

Transposition finale 
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 |

Table des matières Haut

Génération des clés de DES

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 :

Bits de la partie gauche
de la clé
 
57 | 49 | 41 | 33 | 25 | 17 | 9 |
1 | 58 | 50 | 42 | 34 | 26 | 18 |
10 | 2 | 59 | 51 | 43 | 35 | 27 |
19 | 11 | 3 | 60 | 52 | 4 | 36 |
|
|
Bits de la partie droite
de la clé
 
63 | 55 | 47 | 39 | 31 | 23 | 15 |
7 | 62 | 54 | 46 | 38 | 30 | 22 |
14 | 6 | 61 | 53 | 45 | 37 | 29 |
21 | 13 | 5 | 28 | 20 | 12 | 44 |
|

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  :

Transpositions avec oubli 
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.

Table des matières Haut

Déchiffrement de DES

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).

Modes opératoires de DES

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.

  • ECB - Electronic Code Book : les blocs sont traités de manière indépendante, ce qui permet de rendre le chiffrement ou déchiffrement parallèle.Ce mode est souvent utilisé, mais il est sensible à une attaque par dictionnaire.

    y i = eK (x i )

  • CBC - Cipher Block Chaining  : moins utilisé, mais nettement plus sûr que ECB, ce mode opératoire utilise le bloc précédent lors du calcul d'un bloc, ce qui lie tous les blocs entre eux (une erreur dans l'émission empêche le déchiffrement de toutes les données).

    y 0 = valeur initiale y i = eK (y i -1 XOR x i ) avec i >= 1

  • CFB - Cipher FeedBack (chiffrement à rétroaction)  : Une clé partielle basée sur le bloc chiffré précédemment nous permet de chiffrer le bloc suivant.

    z i = eK(y i -1)

    y i = x i XOR z i avec i >= 1

  • OFB - OutPut FeedBack (chiffrement à rétroaction de sortie)  : les blocs ne sont pas liés entre eux (pourtant, deux blocs identiques en clair donnent deux blocs chiffrés différents). Cet aspect nous assure une certaine sécurité face aux erreurs de transmissions.

    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.

Table des matières Haut

Triple DES

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".

Chiffrement triple DES

Deux clés sont générées : K1 et K2.

  • Le fichier subit un premier chiffrement (encryption) à l'aide de la clé K1.
  • Le résultat subit un déchiffrement à l'aide de la clé K2. Comme le chiffrement a été réalisé à l'aide d'une autre clé, le fichier est modifié, mais pas déchiffré.
  • La troisième opération consiste à chiffrer le tout à l'aide de la clé K1.

Déchiffrement triple DES

Pour le déchiffrement triple DES, les opérations inverses sont réalisées :

  • Déchiffrement à l'aide de la clé K1.
  • Chiffrement à l'aide de la clé K2.
  • Déchiffrement à l'aide de la clé K1.

Compatibilité DES et triple DES

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).

Document créé le 24/06/2005, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/crypto-des.html

L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.

Notes

  1. a,b,c,d,e,f… 23 en plus… DES : Data Encryption Standard

  2. a,b NBS : National Bureau of Standard

  3.  DEA : Data Encryption Algorithm

Table des matières Haut