Ce document a été proposé comme sujet de projet informatique pour les élèves du tronc commun de l'Ecole Polytechnique en 1998-99. Sa difficulté est "facile" (*).

DFC - un Algorithme de Chiffrement

Auteur: Serge Vaudenay
Ecole Normale Supérieure - CNRS

1. Préambule

Dans ce projet, on cherche à implémenter le procédé de chiffrement et de déchiffrement DFC. L'implémentation sera de préférence faite en langage Java, mais d'autres langages pourront être envisagés.

On décrit dans un premier temps une fonction DFC qui permet de chiffrer une chaîne arbitraire de 128 bits au moyen d'une clef représentée par une chaîne de bits de longueur au plus 256.

2. Description de DFC

2.1. Notations

Les objets manipulés sont des chaînes de bits ou des entiers. Les chaînes sont représentées en notation hexadécimale (lorsque leur longueur est multiple de 4, sinon, on complète à gauche par des zéros en précisant la véritable longueur). Par exemple, d43x représente la chaîne 110101000011. Les entiers sont représentés en notation décimale. On définit les opérations suivantes. Par exemple, d43x=3395 et |3395|12=d43x.

2.2. Description de Haut Niveau

La fonction de chiffrement DFCK traite un bloc de 128 bits au moyen d'une clef secrète K de longueur arbitraire, au plus 256. La fonction de déchiffrement DFCK-1 opère également sur des chaînes de 128 bits.

La clef secrète est tout d'abord transformée en une chaîne de 1024 bits EK ("Expanded Key") au moyen d'une fonction EF ("Expanding Function"), soit EK=EF(K). Comme cela est détaillé dans la section 2.5, EF effectue un schéma de Feistel à quatre étages. Le chiffrement lui-même est un schéma à huit étages semblable. Chaque étage utilise une fonction RF ("Round Function"). Cette fonction transforme une chaîne de 64 bits en une autre au moyen d'un paramètre de 128 bits. Elle est décrite dans la section 2.3.

Etant donné un bloc de 128 bits PT, on le découpe en deux demi-blocs de 64 bits R0 et R1 de telle sorte que PT=R0|R1. La clef étendue de 1024 bits EK est découpée en huit chaînes de 128 bits par

RKi est la i-ème clef d'étage ("Round Key").

On construit alors une suite R0,...,R9 suivant la récurrence du schéma de Feistel

On pose alors CT=DFCK(PT)=R9|R8 (voir Fig. 1).

Plus généralement, à partir d'une chaîne s de longueur 128r, on découpe s en blocs de longueur 128

La chaîne s définit alors une permutation Encs sur l'ensemble des chaînes de 128 bits par un schéma de Feistel à r étages. Une chaîne de 128 bits m est scindée en deux parties de 64 bits m=x0|x1. On construit alors la séquence x0,...,xr+1 par On définit alors Encs(m)=xr+1|xr. La fonction DFCK est en fait (qui est donc bien un schéma de Feistel à 8 étages). La fonction EF est un schéma à 4 étages définit également à partir de Enc.

De manière triviale, on a DFCK-1=EncrevEK


Fig. 1: Schéma de Feistel à 8 Etages.

Pour chiffrer une chaîne PT de longueur arbitraire l au moyen d'une clef K, on commence par coder l sur 64 bits par |l|64 et l'on constitue une chaîne s de bits tous nuls de longueur minimale telle que

soit de longueur multiple de 128. On découpe alors cette chaîne en blocs de 128 bits On définit ensuite la séquence CT1,...,CTn par et La chaîne CT=CT1|...|CTn est le résultat du chiffrement de PT.

2.3. La Fonction RF

La fonction RF utilise un paramètre de 128 bits, soit deux paramètres de 64 bits: un "paramètre a", et un "paramètre b". Elle traite des chaînes de 64 bits. On définit CP est une permutation sur l'ensemble des chaînes de 64 bits (que l'on définit dans la section 2.4). Cette construction constitue un "module de décorrélation".

2.4. La Permutation CP

La permutation CP ("Confusion Permutation") utilise une table à 6 bits d'entrée et 32 bits de sortie RT ("Round Table").

Si y=yl|yr est l'entrée de CPyl et yr sont des chaînes de 32 bits, on définit

KC est une constante prédéfinie de 32 bits, et KD est une constante de 64 bits. La permutation CP est schématisée sur la figure 2.


Fig. 2: La Permutation CP.

Les constantes RT(0),...,RT(63), KC et KD seront définies dans la section 2.6.

2.5. Diversification de la Clef

Afin de créer la séquence RK1,RK2,...,RK8 à partir de K de longueur au plus 256, on utilise le procédé suivant. On complète tout d'abord K par une chaîne constante prédéfinie KS que l'on tronque sur 256 bits pour obtenir la chaîne PK ("Padded Key") (Si K est de longueur 128, on note que seuls les 128 premiers bits de KS sont utiles.)

On découpe ensuite PK en 8 chaînes de 32 bits PK1,...,PK8 telles que PK=PK1|...|PK8. On définit

On définit également pour i=2,3,4 (où KAi et KBi sont des constantes définies dans la section 2.6). (Le nom des variables vient de "Odd a-Parameter", "Odd b-Parameter", "Even a-Parameter", et "Even b-Parameter".)

On définit

Cela définit une permutation EncEF1(K). De même, définit une autre permutation EncEF2(K).

EncEF1(K) et EncEF2(K) permettent de définir RK. On pose RK0=|0|128 et

On définit enfin

2.6. Définition des Constantes

L'algorithme utilise plusieurs constantes prédéfinies:

Afin de convaincre qu'aucune trappe n'a été dissimulée dans la conception de DFC, on définit ces constantes à partir de la constante mathématique e

Si EES ("e Expansion String") est l'expansion hexadécimale des 2144 premiers bits de e, on définit et La chaîne EES est la suivante.

2.7. Un Exemple de Chiffrement

Voici un exemple de calcul qui utilise la clef et le message On note RVij la valeur obtenue après le tour j dans le calcul de RKi. On a

3. Travail Demandé

Développer une application qui permet de chiffrer et de déchiffrer un fichier. Estimer la vitesse de chiffrement obtenu. Quel est le coût d'une recherche exhaustive de la clef?

4. Références

  1. Data Encryption Standard. Federal Information Processing Standard Publication 46, U. S. National Bureau of Standards, 1977.
  2. E. Biham, A. Shamir. Differential Cryptanalysis of the Data Encryption Standard, Springer-Verlag, 1993.
  3. H. Feistel. Cryptography and Computer Privacy. Scientific American, vol. 228, pp. 15-23, 1973.
  4. M. Matsui. The First Experimental Cryptanalysis of the Data Encryption Standard. In Advances in Cryptology CRYPTO'94, Santa Barbara, Californie, U.S.A., Lectures Notes in Computer Science 839, pp. 1-11, Springer-Verlag, 1994.
  5. S. Vaudenay. Provable Security for Block Ciphers by Decorrelation. In STACS 98, Paris, France, Lectures Notes in Computer Science 1373, pp. 249-275, Springer-Verlag, 1998.
  6. S. Vaudenay. The Decorrelation Technique Home-Page.
    URL:http://lasec.epfl.ch/decorrelation.shtml