-
Sylvain Melot a rédigéSylvain Melot a rédigé
author: Sylvain Melot
title: 2. Les chiffrements symétriques mono-alphabétiques
Les chiffrements symétriques mono-alphabétiques
!!! info "Chiffrements mono-alphabétiques"
- Dans méthode de cryptographie basée sur un chiffrement par **substitution mono-alphabétique**, la lettre d'origine n'est remplacée que par une unique autre lettre.
- Ce sont des chiffrements faciles à casser.
I. Le chiffrement de César
« Il y employait, pour les choses tout à fait secrètes, une espèce de chiffre qui en rendait le sens inintelligible (les lettres étant disposées de manière à ne pouvoir jamais former un mot), et qui consistait, je le dis pour ceux qui voudront les déchiffrer, à changer le rang des lettres dans l'alphabet, en écrivant la quatrième pour la première, c'est-à-dire le d pour le a, et ainsi de suite. »
— Suétone, Vie des douze Césars, (environ an 110)
!!! info "Principe du chiffrement de César:"
**La méthode de Jules César** pour ses correpondances secrétes consistait à choisir un entier `n` constituant la clé et à décaler chaque lettre du message initial de `n` lettres dans l'alphabet (en recommençant à "A" si le décalage fait dépasser "Z").
!!! question "Question:"
Nous pouvons appeler "clé" le décalage `decalage` de cet exercice.
La connaissance de cette clé permet-elle de déchiffrer un message chiffré ?
??? success "Solution:"
Pour déchiffrer, il suffit d'utiliser le même procédé avec la clé opposée, par exemple -4 si on a chiffré avec 4.
1.1. Les fonctions ord() et chr().
La fonction ord(n)
prend un caractère en argument et renvoie le code Unicode caractère lui correspondand sous forme d'un entier.
La fonction chr(n)
prend un code Unicode caractère sous forme d'un entier en argument et renvoie le caractère correspondant.
!!! question "Executer le script ci-dessous:"
{{IDE('scripts/c_1')}}
1.2. Le dictionnaire de chiffrement
!!! question "Exécuter le script ci-dessous:"
{{IDE('scripts/c_2')}}
1.3. La fonction de chiffrement
!!! question "Compléter le script ci-dessous:"
{{IDE('scripts/c_3')}}
1.4. La fonction de déchiffrement
!!! question "Compléter le script ci-dessous:"
{{IDE('scripts/c_4')}}
!!! warning "Validité du chiffrement de César"
- Si on utilise 26 lettres majuscules, il n’existe que 25 clés possibles! On peut le casser très facilement par la [force brute](https://www.cnil.fr/fr/definition/force-brute-attaque-informatique){:target="_blank" }
- Seul, il n'offre aucune sécurité de communication, à cause du très faible nombre de clés, ce qui permet d'essayer systématiquement celles-ci quand la méthode de chiffrement est connue, mais aussi parce que, comme tout encodage par substitution monoalphabétique, il peut être très rapidement « cassé » par **analyse de fréquences** (certaines lettres apparaissent beaucoup plus souvent que les autres dans une langue naturelle).
II. Le chiffrement par substitution
!!! info "Principe du chiffrement par substitution"
On remplace une lettre par une autre de l’alphabet, on a donc 26! ≈ 4×10<sup>26</sup> clés possibles.
Avec la clé suivante:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
AZERTYUIOPQSDFGHJKLMWXCVBN
le message `SUBSTITUTION`devient `LWZLMOMWMOGF`.
!!! warning "Validité du chiffrement par substitution"
- Le chiffrement par substitution peut être cassé facilement par [analyse fréquentielle](https://fr.wikipedia.org/wiki/Analyse_fr%C3%A9quentielle){:target="_blank" }
III. Le chiffrement affine
3.1. Le chiffrement linéaire.
!!! info "Le chiffrement linéaire"
**Le chiffrement linéaire consiste à multiplier** le nombre correspondant à la lettre par un même nombre, que l’on appellera
également clé de codage.
**Méthode:**
Chacune des 26 lettres est associée à l’un des entiers de 0 à 25, selon le tableau de correspondance suivant.
{ width=100%; : .center }
Le cryptage affine se fait à l’aide d’une clé, qui est un nombre entier k fixé, compris entre 1 et 25. Pour crypter une lettre donnée on suit le processus ℘ suivant:
- on repère le nombre x associé à la lettre dans le tableau de correspondance précédent
- on multiplie ce nombre x par la clé k
- on calcule le reste r de la division euclidienne du nombre obtenu par 26
- on repère la lettre associée au nombre r dans le tableau de correspondance, qui devient la lettre cryptée
Par exemple, pour crypter la lettre P avec la clé 𝑘=11 :
- le nombre x associé à la lettre P est le nombre 15
- on multiplie 15 par la clé k, ce qui donne 11×15=165
- on calcule le reste de la division euclidienne par 26 : on obtient 165 % 26 = 9
- on repère finalement la lettre associée à 9 dans le tableau, c’est-à-dire J
Ainsi avec la clé k = 11, la lettre P est cryptée en la lettre J.
!!! question "Questions: "
- Quel est le cryptage de la lettre S avec la clé 3?
??? tip "Solution"
- Le nombre associée à la lettre S est 18
- On multiplie 18 par la clé 3 : 18×3 = 54
- On calcule le reste de de la division euclidienne du nombre obtenu par 26: 54%26 = 2
- la lettre associée est au nombre 2 est le C
<li>En quoi la lettre A constitue-t-elle un cas particulier dans le processus de cryptage ?</li>
??? tip "Solution"
Lorsque la lettre est A, d’indice x = 0, pour tout 𝑘∈[1,25],𝑘×𝑥=0 et le reste de la division euclidienne de 𝑘×𝑥 par 26 est 0. La lettre A est cryptée par elle-même, quelle que soit la clé de cryptage utilisée. Elle est invariante.
<li>Dans le cas où la clé est égale à 11, crypter le mot MIRO.</li>
??? tip "Solution"
Pour la lettre M d’indice 12, on a 12×11=132 et 132 % 26=2, indice correspondant à la lettre C.
Pour la lettre I d’indice 8, on a 8×11=88 et 88 % 26=10, indice correspondant à la lettre K.
Pour la lettre R d’indice 17, on a 17×11=187 et 187 % 26=5, indice correspondant à la lettre F.
Pour la lettre O d’indice 14, on a 14×11=154 et 154 % 26=24, indice correspondant à la lettre Y.
Le mot MIRO est donc crypté par le mot CKFY.
</ol>
!!! question "Exécuter le script ci-dessous:"
{{IDE('scripts/affine_1')}}
!!! question "Compléter le script ci-dessous:"
{{IDE('scripts/affine_2')}}
!!! question "Compléter le script ci-dessous:"
Vous réutiliserez la fonction `dico_chiffrement`
{{IDE('scripts/affine_3')}}
!!! danger "BILAN"
Il faut enfin réaliser ***une fiche de cours*** (sur une feuille simple) en faisant apparaitre les notions importantes de ce cours :
- Connaitre le principe du chiffrement de César.
- Connaitre le principe du chiffrement par substitution.
- Connaitre le principe du chiffrement affine.
- Connaitre le principe du chiffrement de Vigenere.