# Contrôle sur machine R4.B.10
## Consignes

Les  seuls documents  papier autorisés  sont vos  notes de  cours et  de travaux
pratiques. Les documents électroniques autorisés sont les documents présents sur
les machines de l'IUT et dont vous êtes l'unique auteur (ainsi que les éventuels
documents de cours). En dehors de la  machine qui vous est attribuée et de votre
matériel de  composition (crayons, stylos,  feuilles de brouillon,  etc.), aucun
matériel n'est autorisé.

L'épreuve compte 3 exercices. Vous  créerez un repertoire cntr_R4.B.10, avec les.
3 sous-repertoires  ex1, ex2  et ex3. 

À  la fin de  l'épreuve, vous  rendrez une. archive compréssée (tar.gz) [ici](https://iut-fbleau.fr/site/site/DEVOIR/). 

# Exercice 1
On construit une fonction de hachage appelée Toy Tetragraph Hash (TTH) qui travaille sur
l'alphabet {A, ..., Z}. Étant donnée une suite de lettres, TTH fournit une empreinte sous la forme
d’une suite de 4 lettres dont l'équivalent numérique modulo 26 s’appelle Total. Il a pour valeur
initiale (IV) qui vaut (0, 0, 0, 0).

On utilisera l’encodage usuel de l’alphabet (A<->0,B<->1, ..., Z<->25). L'algorithme utilise la construction générale
de Merkle-Damgård.
<div align="center">
<img src="./merkle-damgaard.png">
</div>

**Iniatilsation**

TTH scinde le message en blocs de 16 lettres en ignorant les espaces et la ponctuation. Si la longueur du message 
n'est pas un multiple de 16, on bourre avec la caractère A (0). La valeur initiale de Total est (0,0,0,0).

**Itération**

On applique une fonction de compression C au bloc courant :

- on arrange les 16 lettres en un tableau 4x4 en arrageant les lettres (encodées) ligne par ligne.
- on calcule la somme de chaque colonne modulo 26, et on ajoute (modulo 26) à la valeur de Total correspondant
  à l'indice de la colonne.

- on applique au tableau 
	- une permutation circulaire d'une position vers la gauche de la première ligne,
	- une permutation circulaire de deux positions vers la gauche de la deuxième ligne,
	- une permutation circulaire de trois positions vers la gauche de la troisième ligne,
	- une inversion de la dernière ligne.
- on calcule à nouveau la somme modulo 26 de chaque colonne et on l'ajoute (modulo 26) à la valeur de Total.
- cette nouvelle valeur de Total constitue l'entrée de la fonction de compression pour le bloc suivant.

**Travail demandé**

Écrire en C un programme qui prend en argument un nom de fichier (texte, en majuscule), et qui calcule et affiche son empreinte TTH.

la hash du message 
> LE HACHAGE AVEC TTH EST FACILE !

est 

> QQWC

**Bonus**

Pour ceux qui ont des souvenirs du cours de proba, en utilisant le paradoxe des anniversaires, donnez le nombre de messages à considérer pour avoir plus d'une chance sur deux de trouver une collision pour TTH.


**Aide**


```c
/* fonctions utiles */
#include <ctype.h>
int isupper(int c);

char c = 'R';

c-'A'; /* ?? */ 

char l = 10;

l + 'A'; /* ?? */
```

# Exercice 2
Le schéma IDEA est basé sur une variante du mécanisme de Feistel, dont la fonction de tour (on
ignore ici l’addition des sous-clés) est décrite ci-dessous (l'opérateur rouge représente le "ou exclusif") :
<div align="center">
<img src="./idea.png">
</div>

1. Montrer que ce schéma  est inversible quelle que soit la fonction F et donner les formules décrivant le déchiffrement. 

2. Est-ce utile de refaire un tour, avec la même fonction F ? pourquoi ? 

# Exercice 3

Générez, avec openssl, une clé RSA.  Exportez sa partie publique dans le fichier `key.pub`.

Créez un  fichier me.txt,  avec vos  nom, prénom, groupe,  ainsi que  toutes les
commandes (précises) que vous avez utilisées pour cet exercice.

Signez me.txt avec  votre clé privée (on utilisera pour le hachage  sha256) dans le fichier signature.