Data Encryption Standard

Algorithme utilisé par Up ! Security Manager

L'algorithme Data Encryption Standard (DES) du Federal Information Processing Standards (FIPS) crypte un flux binaire à partir d'une clé CleInitiale de taille 8 octets tel que le nombre de bits de chaque octet doit être impair.

Dans un premier temps, la clé est expansée en 16 clés par un algorithme appelé Key Schedule (KS).

Dans un second temps, le flux est crypté par bloc de huit octets en réalisant des opérations sur leurs bits avec la clé expansée.

Contexte

L'algorithme de cryptage / décryptage utilise un contexte composé des variables globales suivantes :

Variable
/******/


TableEntree= TableSortie= TableC= TableD= TableK= TableExpansion= TableP= TableS1= TableS2= TableS3= TableS4= TableS5= TableS6= TableS7= TableS8=

Les tables TableEntree, TableSortie, TableC, TableD, TableK, TableP permettent de constituer un entier non signé S de N bits où N est la taille de la table.

La table est appliquée à une valeur d'entrée E, S=T() Sur E, telque la valeur de chaque bit de S est donnée par la valeur d'un bit de E, bit dont le numéro est donné par l'index dans la table T.

Ainsi, les bits étant numérotés de 1 à N, le Iem bit de S est donné par la relation S(I)=T(I)-1 Sur E.

Dans la suite de cette fiche, cet algorithme est appelé AppliquerTableDes.

Expansion de la clé

Voici l'algorithme Key Schedule (KS) d'expansion de la clé :

Variable
/******/


C=AppliquerTableDes(TableC,CleInitiale);
D=AppliquerTableDes(TableD,CleInitiale);
Pour I=1 JusquA 16 Faire
Fin Pour

Cryptage d'un bloc de 8 octets

Voici l'algorithme de cryptage d'un bloc Buffer de huit octets :

/****************************************************************/
Fonction CalculerPositionDes(S : Octet , TableValeursS : Tableau[?] De Nul Ou Octet)
/* Objet : Calcule la position dans la table des permutations de S.*/
/*******************************************************************/
Variable
/******/


Debut
Si S&0x20 Alors
Else
Fin Si
Si S&0x01 Alors
Fin Si
Index+=(S&0x1E)>>1;
Retourner TableValeursS[Index];
Fin Fonction

/****************************************************************/
Procedure Crypter(BufferEntree : Binaire, BufferSortie : Binaire Sortie)
/* Objet : Crypte un binaire de 8 octets. */
/****************************************************************/
Variable
/******/

Debut
/* Permutation du buffer d'entree. */
IP=AppliquerTableDes(TableEntree,BufferEntree);
/* Application des 16 cles. */
Pour I=1 JusquA 16 Faire
Fin Pour
/* Permutation du buffer de sortie. */
BufferSortie=AppliquerTableDes(TableSortie,IP);
Fin Procedure

Decryptage d'un bloc de 8 octets

Voici l'algorithme de décryptage d'un bloc Buffer de huit octets :

/****************************************************************/
Procedure Decrypter(BufferEntree : Binaire, BufferSortie : Binaire Sortie)
/* Objet : Decrypte un binaire de 8 octets. */
/****************************************************************/
Variable
/******/


Debut
/* Permutation du buffer d'entree. */
IP=AppliquerTableDes(TableEntree,BufferEntree);
/* Application des 16 cles en ordre inverse. */
Pour I=16 JusquA 1 Faire
Fin Pour
/* Permutation du buffer de sortie. */
BufferSortie=AppliquerTableDes(TableSortie,IP);
Fin Procedure