L’algorithme symétrique REDOC 3

Rubrique : cryptographie, PKI, OpenSSL, certificat, X.509, SSL, sécurité informatique.

Introduction

L’algorithme symétrique REDOC 3 a été créé par Michael Wood en mars 1991. C’est un algorithme de chiffrement par bloc de 10 octets (soit 80 bits). Sa réalisation est assez simple, car il n’utilise que l’opération logique « ou exclusif » ; il n’utilise ni permutation ni substitution. Vu sa relative simplicité, il permet d’obtenir un chiffrement très rapide.

Description de l’algorithme

Voici les étapes de l’algorithme :

  1. Créer une table de 2 560 octets (256 clés de 10 octets chacune) à partir de la clé secrète ;
  2. Créer 2 masques de 10 octets chacun : le masque 1 est le résultat du ou-exclusif des clés 1 à 128 et le masque 2 est le résultat du ou-exclusif des clés 129 à 256 ;
  3. Faire pour le ie octet variant de 1 à 10 :
    1. Déterminer la clé à utiliser parmi les 256 : faire un ou-exclusif du ie octet du bloc avec le ie octet du masque 1. Le résultat est la clé à utilisée,
    2. Chiffrer tout le bloc : faire un ou-exclusif avec chacuns des octets respectifs du bloc et de la clé déterminée précédemment, sauf avec le ie octet ;
  4. Refaire l’étape précédente (3) avec le masque 2.

Code source en langage C

Voici la fonction qui réalise l’algorithme REDOC 3.

C’est la fonction principale du noyau (kernel) de FGS (un logiciel gratuit que j’ai développé).

BYTE KeyMap[2560];  // Table des 256 clés de 10 octets chacune
BYTE Mask[20];      // Les 2 masques de 10 octets chacun
BYTE Block[10];     // Le bloc de 10 octets à chiffrer

void EK()
{
  int key,m,p,i,m2=0;     // m2 <=> Mask 2

  for(m=0;m<2;m++)
  {
    for(i=0;i<10;i++)
    {
      key=10*(Block[i]^Mask[m2+i]);           // Calcul Key
      for(p=0;p<10;p++)
        if (p!=i) Block[p] ^= KeyMap[key+p];  // Calcul Block
    } // for(i)
    m2=10;
  } // for(m)
}

Vous pouvez aussi télécharger le source en C de REDOC 3 (Zip, 1 Kio) écrit par Michael Wood, l’auteur de cet algorithme.

Mise en œuvre

Concevoir un algorithme qui permet de calculer la table de 2 560 octets à partir de la clé secrète. Cet algorithme doit avoir les propriétés suivantes :

  • il n’est pas nécessaire qu’il assure une quelconque sécurité ;
  • il peut être conçu à partir d’un générateur aléatoire déterministe ;
  • il doit faire en sorte que l’entropie de la table soit maximum : c’est-à-dire proche de log2(256) = 8 shannons ;
  • il doit aussi satisfaire aux critères des nombres aléatoires.

L’implémenter avec l’un des trois modes de chiffrement suivants : CBC, CFB ou OFB. Ne pas utiliser le mode ECB : il n’assure pas une très bonne sécurité.

Sécurité

Malheureusement, REDOC 3 est vulnérable à la cryptanalyse différentielle. Mais il faut environ 223 (8 millions) textes en clair choisis pour reconstruire uniquement les 2 masques. Autant dire que cet algorithme reste tout de même très sûr, surtout en l’utilisant avec un des modes de chiffrement suivants : CBC, CFB ou OFB.