1
0
2025-03-17 10:52:26 +01:00
..
tp2
2025-03-12 11:11:25 +01:00
2025-03-12 11:38:38 +01:00
tp2
2025-03-12 11:11:25 +01:00
2025-03-17 10:52:26 +01:00

TP2

Dans ce tp, on implémente un algorithme de chiffrement par Blocs basé sur un réseau de permutation-substitution (SPN), en mode ECB.

SPN

Ces algorithmes utilisent en entrée une clé, et applique à chaque bloc plusieurs tours constitués de boîtes de substitutions (S-Box) et de boîtes de permutations (P-Box).

  • Une S-Box substitue à un ensemble de bits un autre ensembe de bits (transormation bijective).
  • Une P-Box est une permutation de bits. Elle prend la sortie d'une S-Box, permutte les bits, et les transmet à une S-box au tour d'après.
  • A chaque tour, on combine le bloc avec la clé (ici un xor).

implantation

  • la taille de bloc est 8 bits,
  • le bloc est découpé en 2 sous-blocs de 4 bits chacun,
  • la taille de la clef est 16 bits,
  • la clef est décomposée en 2 sous-clefs de 8 bits chacun,
  • le nombre de tours est égale à 2,
  • les substitutions et les permutations sont les mêmes à chaque tour.

Remarques

On représentera dans le programme une substitution par un tableau d'entiers (unsigned char) de taille 16.

unsigned char s[]={14,3,2,10,12,11,15,9,0,4,7,13,1,8,6,5}

Ainsi, le bloc binaire 0011, qui vaut 3, sera remplacé par 1010 car s[3]=10

On représentera une permutation par un tableau d'entiers (unisgned char) de taille 8.

unsigned char perm[8]={5,2,0,4,6,1,7,3};

Ainsi, le bit de poids faible (rang 0) est placé au rang 5.

Votre travail

  1. Ecrivez les fonctions suivantes, qui implantent le spn décrit ci-dessus.

    #ifndef _SPN_H
    #define _SPN_H
    
    unsigned char do_perm(unsigned char w,unsigned char perm[8]);
    unsigned char do_subst(unsigned char w,unsigned char subst[16]);
    
    unsigned char encrypt(
    	 unsigned char w,
    	 unsigned short key,
    	 unsigned char perm[8],
    	 unsigned char subst[16]
    );
    
    unsigned char decrypt(
    	 unsigned char w,
    	 unsigned short key,
    	 unsigned char perm[8],
    	 unsigned char subst[16]
    );
    
    #endif
    
  2. Ecrivez des programmes spn-encrypt-file.c , spn-decrypt-file.c qui implantent le SPN décrit ci-dessus. Les deux prennent sur la ligne de commande :

    • un fichier qui contient une clef (un entier non-négatif sur 16 bits),
    • un fichier qui contient une substitution,
    • un fichier qui contient une permutation,
    • "nom fichier codé" et "nom fichier décodé "

    Testez vos programmes sur un exemple à vous. Vérifiez avec les exécutables du répertoire tests.

  3. L'exécutable 16btsef implante l'algorithme de cryptage ci-dessus avec la substitution

    {3,8,14,1,12,5,10,0,2,7,9,11,4,6,15,13}
    

    et la permutation

    {5,2,0,4,6,1,7,3}
    

    et une clef de 16 bits.

    • Développez une procédure qui craque cette clef par force brute et qui prend un "temps raisonnable".
    • Trouvez la clef et décryptez le fichier 16bits-encrypted.dat.