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
Afin de répondre aux besoins du commerce électronique pour faire face
à la criminalité informatique, le gouvernement américain avait
proposé un standard de chiffrement DES en 1977, mais qui est à présent
inadapté.
Un processus pour définir un nouveau standard a été lancé.
Le procédé DFC est l'un des quinze candidats à ce standard.
Cet algorithme DFC permet de chiffrer ou de déchiffrer un document
numérique au moyen d'une clef secrète.
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, représente la chaîne 110101000011
.
Les entiers sont représentés en notation décimale.
On définit les opérations suivantes.
-
transforme la chaîne en un entier.
-
transforme l'entier en une chaîne de longueur .
-
concaténation de deux chaînes.
-
tronque la chaîne sur ces premiers bits.
-
ou exclusif bit-à-bit de deux chaînes.
-
et bit-à-bit de deux chaînes.
-
complémentation bit-à-bit d'un chaîne.
-
opérations arithmétiques standards sur les entiers.
Par exemple, et .
2.2. Description de Haut Niveau
La fonction de chiffrement traite un bloc de 128 bits au moyen
d'une clef secrète de longueur arbitraire, au plus 256.
La fonction de déchiffrement 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 ("Expanded Key") au moyen d'une fonction
("Expanding Function"), soit .
Comme cela est détaillé dans la section 2.5,
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 ("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 , on le découpe en deux demi-blocs
de 64 bits et de telle sorte que .
La clef étendue de 1024 bits est découpée en huit chaînes
de 128 bits par
où est la -ème clef d'étage ("Round Key").
On construit alors une suite suivant la récurrence
du schéma de Feistel
On pose alors (voir Fig. 1).
Plus généralement, à partir d'une chaîne de longueur ,
on découpe en blocs de longueur 128
La chaîne définit alors une permutation sur l'ensemble
des chaînes de 128 bits par un schéma de Feistel à étages.
Une chaîne de 128 bits est scindée en deux parties de 64 bits
.
On construit alors la séquence par
On définit alors .
La fonction est en fait
(qui est donc bien un schéma de Feistel à 8 étages).
La fonction est un schéma à 4 étages définit également à
partir de .
De manière triviale, on a où
Fig. 1: Schéma de Feistel à 8 Etages.
Pour chiffrer une chaîne de longueur arbitraire au moyen
d'une clef , on commence par coder sur 64 bits par et
l'on constitue une chaîne 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 par
et
La chaîne est le résultat du chiffrement
de .
2.3. La Fonction
La fonction utilise un paramètre de 128 bits, soit deux paramètres
de 64 bits:
un "paramètre ", et un "paramètre ".
Elle traite des chaînes de 64 bits.
On définit
où 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
La permutation ("Confusion Permutation") utilise une table
à 6 bits d'entrée et 32 bits de sortie ("Round Table").
Si est l'entrée de où et sont des
chaînes de 32 bits, on définit
où est une constante prédéfinie de 32 bits, et est une
constante de 64 bits.
La permutation est schématisée sur la figure 2.
Fig. 2: La Permutation .
Les constantes , et seront définies
dans la section 2.6.
2.5. Diversification de la Clef
Afin de créer la séquence à partir de
de longueur au plus 256, on utilise le procédé suivant.
On complète tout d'abord par une chaîne constante prédéfinie
que l'on tronque sur 256 bits pour obtenir la
chaîne ("Padded Key")
(Si est de longueur 128, on note que seuls les 128 premiers bits de
sont utiles.)
On découpe ensuite en 8 chaînes de 32 bits
telles que
.
On définit
On définit également
pour (où et sont des constantes définies dans
la section 2.6).
(Le nom des variables vient de "Odd -Parameter",
"Odd -Parameter", "Even -Parameter", et
"Even -Parameter".)
On définit
Cela définit une permutation .
De même,
définit une autre permutation .
et permettent de définir .
On pose et
On définit enfin
2.6. Définition des Constantes
L'algorithme utilise plusieurs constantes prédéfinies:
- 64 constantes de 32 bits,
- une constante de 64 bits,
- une constante de 32 bits,
- trois constantes de 64 bits,
- trois constantes de 64 bits,
- une constante de 256 bits.
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
Si (" Expansion String") est l'expansion hexadécimale
des 2144 premiers bits de , on définit
et
La chaîne est la suivante.
On peut recalculer cette chaîne à l'aide du programme Maple par la
commande suivante.
convert(floor(evalf((E-2)*22144,800)),hex);
2.7. Un Exemple de Chiffrement
Voici un exemple de calcul qui utilise la clef
et le message
On note la valeur obtenue après le tour dans le calcul de
.
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
- Data Encryption Standard.
Federal Information Processing Standard Publication 46,
U. S. National Bureau of Standards, 1977.
- E. Biham, A. Shamir.
Differential Cryptanalysis of the Data Encryption Standard,
Springer-Verlag, 1993.
- H. Feistel.
Cryptography and Computer Privacy.
Scientific American, vol. 228, pp. 15-23, 1973.
- 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.
- 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.
- S. Vaudenay.
The
Decorrelation Technique Home-Page.
URL:http://lasec.epfl.ch/decorrelation.shtml