5-04. Sécurisation des communications
Depuis que l’écriture existe, des méthodes de cryptage ont été inventées afin de rendre difficile la compréhension de ce message s’il est lu par quelqu’un qui n’est pas son destinataire. Voir par exemple le code de César.
A et B cherchent à s'envoyer des messages par l'intermédiaire d'un réseau informatique. A et B désirent qu'une tierce personne ne soit pas capable de lire les messages s’ils sont interceptés. Pour ce faire, A va chiffrer (ou crypter) le message. Toute personne qui ne posséde pas le moyen de déchiffrer (ou décrypter) ce message ne pourra pas comprendre le contenu du message. Il existe 2 grands types de chiffrement : le chiffrement symétrique et le chiffrement asymétrique.
Chiffrement symétrique
- Décrire le principe de chiffrement symétrique (clé partagée)
Un chiffrement utilise une clé que l’on applique au message d’origine. Imaginons un message binaire composé de 18 bits, chiffré à l’aide d’une clé de 5 bits.
L’opération de chiffrement consiste à utiliser la clé pour générer un message chiffré, en associant chaque bit du message (modulo 5) à un bit de la clé. Lorsque le bit de la clé vaut 1, le bit du message est changé (0 devient 1 et inversement). Lorsque le bit de la clé vaut 0, le bit du message est inchangé.
Exemple de chiffrage. Les bits ont été groupés par 5 pour la lisibilité.
| message clair | 01001·00001·10010·101 |
|---|---|
| clé (01011) | 01011·01011·01011·010 |
| message crypté | 00010·01010·11001·011 |
L’opération de déchiffrage consiste à faire… exactement la même chose ! 🤓 Mais pour cela, il faut disposer de la clé de chiffrement.
| message crypté | 00010·01010·11001·011 |
|---|---|
| clé (01011) | 01011·01011·01011·010 |
| message clair | 01001·00001·10010·101 |
Le principal inconvénient du chiffrage symétrique est que l’émetteur et le destinataire doivent tous les deux disposer de la clé. Ce qui implique qu’ils doivent se mettre d'accord à l'avance sur la clé qui sera utilisée lors des échanges. Le chiffrement asymétrique permet d'éviter ce problème.
Chiffrement en Python
1. Écrire la fonction crypt prenant en argument une chaîne de caractères binaires et une clé binaire et renvoyant la chaîne de caractères cryptée.
2. Votre correspondant vous envoie un message binaire codant de l’ASCII. La conversion binaire-ASCII peut se faire grâce à ce convertisseur. Vous savez que ce message est crypté et vous disposer de la clé de cryptage.
000010100000011100011011000000110000101001001011000100010000010000011110000001110000010000011110Clé de cryptage : 01101011
2.1. Peut-on convertir directement ce message en texte ?
2.2 Décryptez ce message grâce à la clé symétrique fournie, puis convertissez-le en texte.
Correction
1. Fonction crypt
def crypt (binaryText, binaryKey):
output = ""
nk = len(binaryKey)
for i, tbit in enumerate(binaryText):
tbit = int(tbit)
kbit = int(binaryKey[ i % nk])
output += "1" if tbit + kbit == 1 else "0"
return(output)
2.1. Non, car certains octets ne codent pas pour un caractère ASCII. Donc le message crypté ne peut même pas être affiché sous forme de texte.
2.2 Le message décrypté est alpha zoulou.
Chiffrement asymétrique
- Décrire le principe de chiffrement symétrique (avec clé privée/clé publique).
La cryptographie asymétrique, ou cryptographie à clé publique est fondée sur l'existence de fonctions à sens unique et à trappe secrète.
Les fonctions à sens unique sont des fonctions mathématiques telles qu'une fois appliquées à un message, il est extrêmement difficile de retrouver le message original.
Fonctions à sens unique et à trappe secrète
Si on dispose de $*x*$, $*f(x)*$ est facile à calculer, mais il est très difficile de trouver $*x*$ si on dispose de $*f(x)*$, même en connaissant parfaitement la fonction $*f*$…
…sauf si on dispose d’une information (qui doit rester secrète). Auquel cas, trouver $*x*$ à partir de $*f(x)*$ est facile. Ce dernier point constitue la « trappe secrète ».
Dans le cas du chiffrement asymétrique A et B n'ont pas besoin de partager une clé secrète.
Fonctionnement pratique
Alice souhaite pouvoir recevoir des messages chiffrés de n'importe qui.
Diffusion des clés publiques
Elle génère alors une valeur à partir d'une fonction à sens unique et à trappe secrète à l'aide d'un algorithme de chiffrement asymétrique, par exemple RSA (voir plus bas).
Alice diffuse à tout le monde la fonction pour chiffrer les messages (notée clé publique) mais garde secrète la fonction de décodage (notée clé privée).
Si une personne intercepte le message crypté, il lui sera impossible de le décrypter sans la clé privée de sB.
Chiffrement
L'un des rôles de la clé publique est de permettre le chiffrement ; c'est donc cette clé qu'utilisera Bob pour envoyer des messages chiffrés à Alice. L'autre clé — l'information secrète — sert à déchiffrer. Ainsi, Alice, et elle seule, peut prendre connaissance des messages de Bob. La connaissance d'une clé ne permet pas de déduire l'autre.
Authentification de l'origine
D'autre part, l'utilisation par Alice de sa clé privée sur le condensat (une sorte d’ifentifiant unique généré à partir du contenu, aussi appelé un hash) d'un message, permettra à Bob de vérifier que le message provient bien de Alice : il appliquera la clé publique au condensat fourni (condensat chiffré avec la clé privée de Alice) et retrouvera donc le condensat original du message. Il lui suffira de comparer le condensat ainsi obtenu et le condensat réel du message pour savoir si Alice est bien l'expéditeur. C'est donc ainsi que Bob sera rassuré sur l'origine du message reçu : il appartient bien à Alice. C'est sur ce mécanisme notamment que fonctionne la signature numérique.
Analygie : la boîte à deux serrures
Imaginez une boîte avec deux serrures différentes. Lorsque l'on ferme la boîte d'un côté, seule la clé correspondant à l'autre serrure permet l'ouverture de la boîte et vice-versa. Une des clés est privée et conservée secrète, l'autre est dite publique et un exemplaire peut-être obtenu par quiconque souhaite utiliser la boîte.
Pour chiffrer un message Bob prend la boîte, y place son message, et la ferme à l'aide de la clé publique. Seul le détenteur de la clé privée permettant d'accéder à l'autre serrure, Alice en l'occurrence, sera en mesure de rouvrir la boîte.
Pour signer un message, Alice le place dans la boîte et ferme celle-ci à l'aide de sa clé privée. Ainsi n'importe qui ayant récupéré la clé publique pourra ouvrir la boîte. Mais comme la boîte a été fermée par la clé privée, cette personne sera assurée que c'est bien Alice, seule détentrice de cette clé, qui aura placé le message dans la boîte et fermé ladite boîte.
Algorithme de chiffrement RSA
L'algorithme de chiffrement asymétrique RSA (du nom de ses 3 inventeurs : Rivest Shamir et Adleman), est très couramment utilisé, notamment dans tout ce qui touche au commerce électronique. RSA se base sur la factorisation des très grands nombres premiers.
- Si vous prenez un nombre premier A (par exemple 16813007) et un nombre premier B (par exemple 258027589), il facile de déterminer C le produit de A par B (C = A×B = 4338219660050123).
- En revanche si vous connaissez C (ici 4338219660050123), il est très difficile de retrouver A et B.
Nous avons donc bien ici un problème facile dans un sens (trouver C à partir de A et B) est extrêmement difficile dans l'autre sens (trouver A et B à partir de C).
Les détails du fonctionnement de RSA sont relativement complexes (mathématiquement parlant) et ne seront pas abordés ici, mais vous pouvez aller voir sur la page wikipédia, ce n’est pas hors de votre portée. Vous devez juste savoir qu'il existe un lien entre une clé publique et la clé privée correspondante, mais qu'il est quasiment impossible de trouver la clé privée de quelqu'un à partir de sa clé publique.
Protocole HTTPS
- Décrire l’échange d’une clé symétrique en utilisant un protocole asymétrique pour sécuriser une communication HTTPS.
Le protocole HTTPS utilise ces deux méthodes de chiffrement lors d’échange entre un client et un serveur web.
Problèmes du protocole HTTP
Le protocole HTTP, vu en première, est un des protocole utilisé pour échanger des données sur le web (notamment les page d’un site internet).
En terme de sécurité, le protocole HTTP pose deux problèmes :
- Les données sont échangés en clair (elles ne sont pas cryptées). Si quelqu’un intercepte un message, il pourra le lire sans difficulter.
- Il n’y a aucune garantie sur l’authenticité de l’identité de l’envoyeur. Certaines techniques (DNS spoofing) permettent de rediriger une requête HTTP vers un serveur non légitime. Il n’y a donc pas de garantie que, lorsque vous vous connectez à un serveur via une URL (adresse web), vous soyiez vraiment sur le serveur souhaité.
HTTPS est la version sécurisée de HTTP. Le but de HTTPS est d'éviter les 2 problèmes évoqués ci-dessus. HTTPS s'appuie sur le protocole TSL (Transport Layer Security) anciennement connu sous le nom de SSL (Secure Sockets Layer).
Les communications vont être chiffrées grâce à une clé symétrique. Mais comment échanger cette clé entre le client et le serveur ? Simplement en utilisant le chiffrage asymétrique pour échanger la clé symétrique !
Mais pourquoi tant de complication ? Pourquoi ne pas tout faire avec le chiffrage asymétrique ? 😐
Parce que le chiffrage asymétrique est beaucoup plus gourmand en calcul que le chiffrage symétrique. Il ne sert donc qu’à l’échange de la clé symétrique. Le reste est ensuite crypté grâce à un chiffrement symétrique.
Échange de clé entre client et serveur
Voici le déroulement des opérations :
- le client effectue une requête HTTPS vers le serveur, en retour le serveur envoie sa clé publique (
KpuS) au client - le client crée une clé
Kqui sera utilisé pour chiffrer les futurs échanges, chiffre cette clé
avecKpuSet envoie la version chiffrée de la cléKau serveur - le serveur reçoit la version chiffrée de K et la déchiffre en utilisant sa clé privée (
KprS). À partir de ce moment, le client et le serveur sont en possession de la cléK - le client et le serveur commencent à échanger des données en les chiffrant et en les déchiffrant à l'aide de la clé
K(chiffrement symétrique).
Certficat SSL
Le serveur doit pouvoir justifier de son identité (« voici la preuve que je suis bien le site de la banque B et pas un site pirate »). Pour ce faire, chaque site désirant proposer des transactions HTTPS doit, périodiquement, acheter un certificat d'authentification (sorte de carte d'identité pour un site internet, appelé certificat SSL) auprès d'une autorité habilitée à fournir ce genre de certificats. Nous n'allons pas entrer dans les détails du fonctionnement de ces certificats, mais vous devez juste savoir que le serveur envoie ce certificat au client en même temps que sa clé publique. En cas d'absence de certificat (ou d'envoi de certificat non conforme), le client stoppe immédiatement les échanges avec le serveur et affichera une page de mise en garde avec un message du style « ATTENTION le certificat d'authentification du site XXX a expiré, il serait prudent de ne pas poursuivre vos échanges avec le site XXXX ».
Révision & entraînement
Sécurisation des communications
Métropole 2025 – sujet 2 – Exercice 3 partie B
1. Expliquer la différence entre un algorithme de chiffrement symétrique et un algorithme de chiffrement asymétrique.
Alice souhaite envoyer un message à Bob par l’intermédiaire d’un réseau informatique en utilisant un algorithme de chiffrement asymétrique. Pour cela, Bob envoie à Alice sa clé publique. Alice chiffre ensuite le message à l’aide de la clé publique de Bob qu’elle vient de recevoir, puis elle envoie ce message chiffré à Bob.
2. Indiquer comment Bob peut déchiffrer le message que lui envoie Alice.
3. Expliquer comment une tierce personne pourrait se faire passer pour Alice sans que Bob ne s’en aperçoive.
4. Expliquer brièvement le fonctionnement du protocole HTTPS.
5. Expliquer pourquoi, pour sécuriser intégralement les communications sur Internet, on utilise le protocole HTTPS plutôt qu’un chiffrement asymétrique.