La sécurisation des communications

Objectifs et prérequis

Prérequis : notions de réseau (modèle TCP/IP), protocoles de routage

À l’issue de ce chapitre, vous saurez :

  • distinguer les trois objectifs de la sécurisation : confidentialité, intégrité et authentification ;
  • expliquer le principe du chiffrement symétrique et ses limites (échange de la clé) ;
  • expliquer le principe du chiffrement asymétrique (clé publique / clé privée) ;
  • décrire le rôle de la signature électronique, des certificats et du protocole TLS ;
  • implémenter un chiffrement simple (César) en Python.

La sécurité des communications

Lorsque deux personnes communiquent par l’intermédiaire d’un réseau informatique, elles sont en droit d’exiger que cette communication se déroule de façon sécurisée, autrement dit qu’elle respecte les principes de confidentialité (les deux personnes doivent être les seuls à lire leurs messages), d’intégrité (tous les messages dans leur intégralité ont bien été envoyés et réceptionnés) et d’authentification (chaque personne doit être sûre de bien échanger avec la bonne personne).

L’objet de cette activité est de découvrir différentes méthodes développées pour tenter d’apporter des garanties quant au respect de ces trois principes dans toute communication.

Le chiffrement symétrique (dit à clé partagée)

Activité du cadenas

Imaginons que Serge veuille envoyer à Jeanne un message en le mettant dans une boîte.

  1. Sachant que cette boîte a besoin de transiter par plusieurs personnes, comment Serge peut-il procéder pour être sûr que le message ne soit lu que par Jeanne ?
  2. Quels sont les avantages et les limites d’une telle méthode ?

Le chiffrement asymétrique (dit à clé publique )

Adaptation de l’activité du cadenas

On admet que Jeanne et Serge ne peuvent pas se voir pour s’échanger leurs cadenas. Répondre aux questions précédentes en tenant compte de cette nouvelle contrainte.

Activité du graphe

Imaginons maintenant que Jeanne et Serge ne disposent ni de boîtes, ni de cadenas pour les verrouiller. Serge souhaite envoyer un message sécurisé à Jeanne. Dans l’activité qui suit nous allons réduire ce message à un nombre entier positif. Ne disposant pas de boîte sécurisée, il décide de chiffrer ce nombre, autrement dit, de le rendre incompréhensible à toute personne ne disposant pas d’une clé. Il choisit la méthode de chiffrement asymétrique introduite ci-dessus.

Dans un premier temps, Jeanne présente sa clé publique : il s’agit d’un plan simplifié de son quartier (figure ci-dessous). En mathématiques et en informatique, ce plan est appelé un graphe. Il est composé de sommets (les intersections) et d’arêtes (les rues).

Serge va utiliser cette clé publique de Jeanne pour chiffrer son message, par exemple le nombre 73. Il va commencer par écrire celui-ci comme la somme de treize nombres (ce qui correspond exactement au nombre de sommets du graphe) puis reporter, au crayon à papier chacun de ces nombres à côté d’un sommet. À ce stade le message n’est pas encore chiffré dans la mesure où il est très simple de retrouver 73 à partir de tous les nombres écrits sur le graphe. Serge va donc procéder de la manière suivante : il écrit, cette fois-ci entre parenthèses et au stylo, la somme de chaque nombre se situant à côté d’un sommet et de tous les nombres situés au voisinage de celui-ci (c’est-à-dire tous les nombres directement reliés au sommet par une seule arête : les deux sommets sont dits adjacents). Il efface alors tous les nombres écrits au crayon à papier. Le message est désormais chiffré.

Soit le graphe ci-dessous. Chaque groupe doit chiffrer un nombre de son choix.

Échangez-vous les graphes et essayez de déchiffrer les messages des autres.

Sur la clé privée, Jeanne a représenté certains sommets avec des points plus larges que les autres. Ils forment ce que l’on appelle un ensemble dominant « minimal » : chaque sommet du graphe est soit un sommet dominant soit relié directement à un unique sommet dominant. Ce qui permet, ici, de définir quatre régionnements distincts. Le nombre à déchiffrer est la somme des nombres situés sur les sommets dominants du graphe (\(17+19+20+17=73\)).

S’il n’est pas du tout évident d’exhiber ce type d’ensemble dans un graphe donné, il est, en revanche, très facile de construire un graphe à partir d’un ensemble dominant. Voici comment procéder :

  • dessiner un ensemble de sommets et les marquer comme dominants ;
  • dessiner un autre ensemble de sommets dominés ;
  • tracer exactement une arête entre chaque sommet dominé et un sommet dominant ;
  • ajouter diverses arêtes entre les sommets dominés.

Construire différentes paires de clés et de les faire tester par d’autres groupes.

Principe mathématique

Dans la réalité, ce sont des logiciels qui produisent cette paire de clés. Ils utilisent le plus souvent l’algorithme de chiffrement RSA qui se base sur l’idée suivante : si l’on obtient un nombre entier \(n\) comme produit de deux très grands nombres premiers \(p\) et \(q\), il est extrêmement difficile de retrouver les valeurs de \(p\) et \(q\) uniquement avec la donnée du nombre \(n\).

Schématiquement, la clé publique est le couple \((n, e)\) : il suffit pour chiffrer le message. Pour le déchiffrer, il faut la clé privée, un nombre \(d\) que l’on ne sait calculer qu’à partir de \(p\) et \(q\). La connaissance de \(n\) ne permet pas de retrouver les entiers \(p\) et \(q\). Cette vidéo explique plus en détail ce principe.

Le chiffrement et le déchiffrement se font au niveau de la couche « présentation » du modèle OSI (couche « application » du modèle TCP/IP). Ainsi, un tiers qui intercepterait le message durant son transport n’a aucun moyen de le lire.

Limites du chiffrement asymétrique

Signature électronique

Avec le chiffrement asymétrique, Jeanne a la garantie que personne n’a pu lire le message qu’elle vient de recevoir mais elle ne peut en aucun cas être certaine que ce message provient bien de Serge dans la mesure où la clé publique est à la disposition de n’importe qui. C’est pour garantir l’identité de l’émetteur du message que la notion de signature électronique a été introduite.

À l’aide d’une fonction de hachage, Serge peut générer une empreinte de son message : il s’agit d’un « condensé » de celui-ci mais qui ne permet pas de retrouver l’original. Puis il chiffre cette empreinte grâce à sa clé privée (qu’il est le seul à posséder). Ainsi, lorsque Jeanne reçoit un message, elle reçoit également l’empreinte de celui-ci, qu’elle déchiffre grâce à la clé publique de Serge. Elle est désormais certaine que c’est bien lui qui est l’expéditeur du message (il est le seul à avoir pu le chiffrer).

Cette vidéo en explique le principe en détail.

Certificat électronique

Le recours à une clé publique pose le problème de l’authenticité de l’entité à qui cette clé est censée appartenir. Un tiers pourrait déposer une clé publique au nom d’une autre personne (via un faux site web par exemple) et se faire passer pour celle-ci dans les échanges. On appelle ce procédé attaque de l’homme du milieu.

C’est la raison pour laquelle plusieurs organismes (les infrastructures à clés publiques par exemple) ont pour rôle de garantir l’identité des entités disposant de clés publiques, à travers un mécanisme de vérification exigeant (présence physique, pièces d’identités, signatures de tiers de confiance, etc.). Elles délivrent un certificat électronique aux entités satisfaisant à ces conditions d’authenticité.

Échange d’une clé partagée grâce à un chiffrement asymétrique

Nous avons vu dans la première activité, que l’un des problèmes du chiffrement symétrique est la sécurisation de l’échange de la clé partagée (on ne peut pas toujours se rencontrer pour l’échanger en main propre !). Ce qui explique le recours fréquent au chiffrement asymétrique. Mais l’inconvénient de ce dernier est qu’il est généralement beaucoup plus lent que son homologue symétrique. Pour des applications où il faut échanger de nombreuses données, il est difficilement utilisable en pratique. On a alors recours à un protocole hybride : on communique par chiffrement symétrique après avoir utilisé le chiffrement asymétrique pour transmettre la clé partagée.

Le principal protocole qui fonctionne sur ce principe est le protocole TLS (anciennement SSL), fréquemment utilisé pour sécuriser par exemple :

  • le protocole HTTP (qui prend alors le nom de HTTPS) ;
  • les transactions commerciales ou bancaires en ligne ;
  • les partages de fichiers ;
  • les connexions à une base de données ;
  • les connexions distantes à un serveur ;
  • les serveurs de messagerie ;
  • les transferts de fichiers via le service FTP ;
  • les plates-formes dont les données sont stockées dans le cloud.

Un autre protocole répandu est le protocole PGP qui permet, quant à lui, de sécuriser la communication par emails.

Exercices

Exercice 1 : chiffrement symétrique et asymétrique

  1. Alice veut envoyer un message confidentiel à Bob en utilisant un chiffrement symétrique. Quel est le problème principal qu’ils doivent résoudre avant de pouvoir communiquer ?
  2. Avec un chiffrement asymétrique, quelle clé Alice utilise-t-elle pour chiffrer un message destiné à Bob ? Et quelle clé Bob utilise-t-il pour le déchiffrer ?
  3. Pourquoi utilise-t-on un protocole hybride (comme TLS) plutôt que du chiffrement asymétrique seul ?
Solution
  1. Ils doivent d’abord échanger la clé secrète partagée de manière sécurisée. Si un attaquant intercepte cette clé, il peut déchiffrer tous les messages.
  2. Alice chiffre avec la clé publique de Bob. Bob déchiffre avec sa clé privée (qu’il est le seul à posséder).
  3. Le chiffrement asymétrique est beaucoup plus lent que le symétrique. Le protocole hybride utilise l’asymétrique uniquement pour échanger une clé symétrique de session, puis bascule vers le chiffrement symétrique (rapide) pour le reste de la communication.

Exercice 2 : protocole TLS simplifié

Voici les étapes simplifiées d’une connexion HTTPS entre un navigateur (client) et un serveur :

  • Étape 1 : le client contacte le serveur et demande une connexion sécurisée.
  • Étape 2 : le serveur envoie son certificat contenant sa clé publique.
  • Étape 3 : le client vérifie le certificat auprès d’une autorité de certification.
  • Étape 4 : le client génère une clé de session aléatoire, la chiffre avec la clé publique du serveur et l’envoie.
  • Étape 5 : le serveur déchiffre la clé de session avec sa clé privée.
  • Étape 6 : client et serveur communiquent en utilisant la clé de session (chiffrement symétrique).

Modèle simplifié, celui du programme et des sujets de baccalauréat. Avec TLS 1.3, version majoritaire aujourd’hui, la clé de session est calculée de part et d’autre par un échange de Diffie-Hellman et ne circule jamais sur le réseau.

  1. À quelle étape utilise-t-on le chiffrement asymétrique ? Le chiffrement symétrique ?
  2. Pourquoi le client vérifie-t-il le certificat (étape 3) ? Quel risque évite-t-on ?
  3. Si un attaquant intercepte le message de l’étape 4, peut-il obtenir la clé de session ? Justifier.
Solution
  1. Chiffrement asymétrique : étape 4 (la clé de session est chiffrée avec la clé publique du serveur). Chiffrement symétrique : étape 6 (toute la communication utilise la clé de session partagée).
  2. La vérification du certificat garantit que le serveur est bien celui qu’il prétend être. Sans cela, un attaquant pourrait se faire passer pour le serveur (attaque de l’homme du milieu) et intercepter les communications.
  3. Non. Le message chiffré avec la clé publique du serveur ne peut être déchiffré qu’avec la clé privée du serveur, que l’attaquant ne possède pas.

Exercice 3 : chiffrement de César en Python

Le chiffrement de César décale chaque lettre de l’alphabet d’un nombre fixe de positions. Par exemple, avec un décalage de 3 : A → D, B → E, …, Z → C.

  1. Écrire une fonction chiffre_cesar(message, decalage) qui chiffre un message (en majuscules, sans accent) avec le décalage donné.
  2. Écrire la fonction dechiffre_cesar(message, decalage) correspondante.
  3. Expliquer pourquoi ce chiffrement n’est pas sûr. Combien de clés différentes faut-il tester au maximum pour casser le code ?
Solution
def chiffre_cesar(message, decalage):
    resultat = ""
    for c in message:
        if "A" <= c <= "Z":
            resultat += chr((ord(c) - ord("A") + decalage) % 26 + ord("A"))
        else:
            resultat += c
    return resultat

def dechiffre_cesar(message, decalage):
    return chiffre_cesar(message, -decalage)
  1. Il n’y a que 26 décalages possibles (0 à 25). Un attaquant peut tous les essayer en quelques secondes (attaque par force brute). C’est un chiffrement par substitution mono-alphabétique, également vulnérable à l’analyse fréquentielle.
Vérifiez votre compréhension
  1. Quelle est la différence fondamentale entre chiffrement symétrique et chiffrement asymétrique ?
    RéponseEn chiffrement symétrique, la même clé sert à chiffrer et déchiffrer : les deux parties doivent partager cette clé secrète. En chiffrement asymétrique, il y a deux clés différentes : une clé publique (pour chiffrer) et une clé privée (pour déchiffrer). Seul le destinataire possède la clé privée.
  2. Dans le protocole TLS, pourquoi n’utilise-t-on pas le chiffrement asymétrique pour toute la communication ?
    RéponseParce que le chiffrement asymétrique est beaucoup plus lent que le symétrique. TLS utilise l'asymétrique uniquement pour échanger de manière sécurisée une clé de session (symétrique), puis bascule vers le chiffrement symétrique, plus rapide, pour le reste des échanges.
  3. À quoi sert un certificat électronique ?
    RéponseUn certificat, délivré par une autorité de certification, garantit que la clé publique appartient bien à l'entité qu'elle prétend être. Il protège contre l'attaque de l'homme du milieu, où un tiers pourrait se faire passer pour le serveur en publiant une fausse clé publique.
L'essentiel à retenir
  • La sécurisation des communications repose sur trois objectifs : confidentialité (seuls les destinataires lisent le message), intégrité (le message n’est pas altéré) et authentification (l’identité de l’émetteur est vérifiée).
  • Le chiffrement symétrique utilise une clé partagée (rapide mais difficile à transmettre en toute sécurité) ; le chiffrement asymétrique utilise une paire clé publique / clé privée (plus lent mais résout le problème de l’échange de clés).
  • La signature électronique (fonction de hachage + chiffrement par la clé privée) garantit l’authentification et l’intégrité.
  • Le protocole TLS combine les deux approches : chiffrement asymétrique pour l’échange de clé, puis chiffrement symétrique pour les données (protocole hybride).