> 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/symetrique.md).

# Symétrique

## Chiffrement symétrique

La clé est partagée, commune pour chiffrer et déchiffrer.

<figure><img src="https://1813806532-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZRRTPIEA4wb6exZozwS0%2Fuploads%2FNPlPiTxYSJgkINmT6Qi3%2Fchiffrement-symetrique.svg?alt=media&amp;token=70c819ca-032a-4014-a0b3-d94087d4e6c3" alt="" width="563"><figcaption><p>Chiffrement symétrique</p></figcaption></figure>

### Techniques anciennes

Il existe des centaines de techniques de chiffrement symétrique. Ici nous allons seulement en mentionner quelques unes.

* **Substitution mono alphabétique**

Remplacer une lettre par une autre. Une lettre est toujours remplacée par la même.

*Exemple 1:* chiffrement de César (permutation circulaire)

<figure><img src="https://1813806532-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZRRTPIEA4wb6exZozwS0%2Fuploads%2FHRePClwp3gH4Rt8s4LU9%2Fchiffrement-cesar.svg?alt=media&amp;token=50329554-e922-4aea-b759-82e2ca96714b" alt="" width="443"><figcaption><p>Chiffrement de César</p></figcaption></figure>

La clé est le décalage choisi.

Soit un alphabet de taille $$n$$ et un décalage $$d$$ (peut être négatif):

$$message\[i] = message\[i]+d\bmod{n}$$

{% hint style="info" %}
Cryptanalyse par des attaques fréquentielles.
{% endhint %}

* **Substitution poly alphabétique**

Remplacer une lettre par une autre mais la même lettre n'est pas toujours remplacée par la même lettre.

*Exemple:* chiffrement de Vigenère (la clé est un mot répété)

<figure><img src="https://1813806532-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZRRTPIEA4wb6exZozwS0%2Fuploads%2FgszbOksRZRoJ6qDIFnoo%2Fchiffrement-vigenere.svg?alt=media&amp;token=b5818020-5d78-4237-9c63-8b3ca772c122" alt="" width="563"><figcaption><p>Chiffrement de Vigenère</p></figcaption></figure>

La clé est répétée sous le message d'origine jusqu'à le couvrir complétement. Chaque lettre utilise un décalage de César correspondant à l'indice de la lettre de la clé associée à cette lettre.

Soit un alphabet de taille $$n$$ et une clé de $$p$$ lettres:

$$message\[i] = message\[i]+indice(clé\[i \bmod{p}])\bmod{n}$$

{% hint style="info" %}
Cryptanalyse par des attaques fréquentielles.
{% endhint %}

* **Transposition**

Modifier l'ordre des lettres.

### Chiffrement par flots

Il s'agit d'un chiffrement qui traite des données d'une longueur quelconque sans avoir besoin de les découper.

<figure><img src="https://1813806532-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZRRTPIEA4wb6exZozwS0%2Fuploads%2FBD3wnICI5Nd16GNtixm0%2Fchiffrement-flot.svg?alt=media&amp;token=909635c3-f707-45fc-8084-b01354aa543c" alt="" width="391"><figcaption><p>Chiffrement par flots</p></figcaption></figure>

Un générateur pseudo aléatoire (GPA) est utilisé pour générer une suite chiffrante. La suite générée dépend de la clé secrète donnée au GPA. Cette suite est ensuite utilisée pour chiffrer le message.

*Exemple: Chiffrement de Vernam (masque jetable)*

XOR bit à bit entre le clair et la suite chiffrante. La clé secrète **est** la suite chiffrante.\
**Attention elle n'est utilisable qu'une seule fois!**

Pourquoi une seule utilisation ?

* Notons $$M$$ le clair, $$S$$ la suite chiffrante et $$C$$ le chiffré
* Si on l'utilise une 2e fois

$$\begin{align} C\_1 = M\_1 \oplus S \enspace et \enspace C\_2 = M\_2 \oplus S \ \ C\_1 \oplus C\_2 = M\_1 \oplus S \oplus M\_2 \oplus S \\\ C\_1 \oplus C\_2 = M\_1 \oplus M\_2 \oplus S \oplus S \\\ C\_1 \oplus C\_2 = M\_1 \oplus M\_2 \end{align}$$

* On a la somme des 2 messages → si on récupère l'un, on a l'autre !

La suite doit être aléatoire pour un chiffrement parfait mais c'est impossible d'en faire donc on fait du pseudo-aléatoire (avec des GPA). Un GPA fournit, à partir d'un germe de taille faible, des suites déterministes indiscernables de suites aléatoires lorsqu'on ne connait pas le germe.

*Mais comment construire un GPA ?*

Avec un Linear Feedback Shift Register (LFSR) ou registre à décalage à rétroaction linéaire en français.

#### LFSR

C'est un automate à temps discret définit par:

* un état interne $$(x\_{0, t}, x\_{1, t}, ..., x\_{L-1, t})$$ de $$L$$ bits
* un polynôme de rétroaction

$$\begin{align} P(T) = a\_0 + a\_1T + ... + a\_{L-1}T^{L-1} + a\_LT^L \end{align}$$

On a $$\forall t \geq 0:$$

$$\begin{align} \left{      \begin{array}{l}         x\_{0, t+1} = x\_{1, t} &\         x\_{1, t+1} = x\_{2, t} &\         ... &\         x\_{L-2, t+1} = x\_{L-1, t} &\         x\_{L-1, t+1} = a\_0 + a\_1T + ... + a\_{L-1}T^{L-1}     \end{array}  \right. \end{align}$$

Exemple:

* état interne: $$(x\_0, x\_1, x\_2, x\_3)$$
* polynôme: $$X+X^2$$

<figure><img src="https://1813806532-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZRRTPIEA4wb6exZozwS0%2Fuploads%2Ftl69syIZ87DUcwLl3Ocr%2Flfsr.svg?alt=media&amp;token=9b727899-6fe3-4eac-bbb8-8adc60211b07" alt="" width="373"><figcaption></figcaption></figure>

#### Problèmes du chiffrement symétrique

Le problème de ce système de chiffrement est la transmission initiale de la clé secrète. Elle doit être transmise de façon sûre via un canal potentiellement dangereux. L'idéal serait un système où il ne serait pas nécessaire de transmettre la clé au destinataire. Il s'agit du chiffrement asymétrique.
