> For the complete documentation index, see [llms.txt](https://sansong.gitbook.io/cyber/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sansong.gitbook.io/cyber/crypto/integrite-symetrique-and-hachage.md).

# Intégrité symétrique & hachage

Pour garantir l'intégrité on utilise un **Message Authentification Code (MAC)**.

C'est une fonction $$M\_K$$ indexée par la clé secrète $$K$$ qui étant donné une message $$m$$ calcule une valeur fixe $$y=M\_K(m)$$ telle que:

* facile quand $$K$$ connue
* pratiquement impossible sinon

TODO: schema

{% hint style="success" %}
*Exemple:* Alice et Bob partagent un algorithme de MAC et une clé secrète $$K$$.

Pour envoyer un message $$m$$ à Bob, Alice:

1. calcule $$y=M\_K(m)$$
2. envoie $$(m, y)$$

Bob:

1. reçoit $$(m^*, y^*)$$ potentiellement différents de $$(m, y)$$
2. calcule $$y^*=M\_K(m^*)$$ et teste $$y^\*=y$$ ?
3. si oui (avec écrasante probabilité) l'intégrité est valide
4. sinon, elle est invalide
   {% endhint %}

### Fonction de hachage

Une fonction de hachage prend une entrée de **taille quelconque** et renvoie une empreinte de **taille fixe**. Elle doit respecter les propriétés suivantes:

* $$\forall x$$, calculer $$H(x)$$ est rapide
* $$\forall y$$, il est complexe de trouver $$x$$ tel que $$y=H(x)$$
* $$\forall x\_0$$, il est complexe de trouver $$x \neq x\_0$$ tel que $$H(x)=H(x\_0)$$
* il est complexe de trouver $$x\_1 \neq x\_2$$ tel que $$H(x\_1)=H(x\_2)$$

Si un bit est modifié, le hash doit être complètement différent (effet avalanche).

#### SHA: Secure Hashing Algorithm
