This commit is contained in:
Denis Monnerat 2025-03-12 11:11:25 +01:00
parent 16c4d49221
commit 83a304e8a5
10 changed files with 116 additions and 1 deletions

@ -6,7 +6,11 @@ Cryptographie - Outils et algorithmes
#### Semaine 1
- cm : [Chiffrements par bloc, algorithmes à clefs symétriques](cours/crypto.pdf).
- tp : [lfsr, tea, hachages](td_tp/tp1)
- tp : [lfsr, xtea, hachages](td_tp/tp1)
#### Semaine 2
- cm : [Chiffrements par bloc, algorithmes à clefs publiques](cours/crypto.pdf).
- tp : [Substitution-Permutation-Network](td_tp/tp2)

109
td_tp/tp2/README.md Normal file

@ -0,0 +1,109 @@
# 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
<div align="center">
<img src="./img/SubstitutionPermutationNetwork2.png">
</div>
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.
```c
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.
```c
#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](./tests).
3. L'exécutable [16btsef](./forcebrute/16bitsef) implante l'algorithme de cryptage ci-dessus avec la substitution
```c
{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](./forcebrute/16bits-encrypted.dat).

@ -0,0 +1 @@
&&&ÅS£PšØ¦<C398>š&쓦Qc&RëéR&Rë£&<26>Ú¡£&éP£&î¦é<C2A6>£<EFBFBD>¶&&&ÅS£PšØ¦<C398>š&P¦îîc&QÚRë&Rë£ÚP&Ú“Ù£Pc&¡P¦cc£<63>¶&&&ÅS£PšØ¦<C398>š&쓦Qc&RëéR&Rë£&QéP&Úc&¦S£P¶&&&ÅS£PšØ¦<C398>š&쓦Qc&Rë£&Ù¦¦<C2A6>&Ù)šc&î¦cR¶&&&ÅS£PšØ¦<C398>š&쓦Qc&Rë£&ÚÙëR&Qéc&Ú«£<C2AB>¶&&&¼ë£&f¦¦P&cRéš&f¦¦Pl&Rë£&PÚ¡ë&Ù£R&PÚ¡ë¶&&¼ëéR[c&ë¦Q&ÚR&Ù¦£c¶&&ÅS£PšØ¦<C398>š&쓦Qc¶¶

BIN
td_tp/tp2/forcebrute/16bitsef Executable file

Binary file not shown.

Binary file not shown.

After

(image error) Size: 19 KiB

1
td_tp/tp2/tests/key Normal file

@ -0,0 +1 @@
<EFBFBD>

BIN
td_tp/tp2/tests/perm Normal file

Binary file not shown.

BIN
td_tp/tp2/tests/spndf Executable file

Binary file not shown.

BIN
td_tp/tp2/tests/spnef Executable file

Binary file not shown.

BIN
td_tp/tp2/tests/subst Normal file

Binary file not shown.