Archi Chiffrement

Identification

Infoforall

14 - Chiffrement asymétrique


Prérequis : -

Evaluation ✎ : questions -

Documents de cours :

1 - Pourquoi ne pas se limiter au cas cas symétrique

Nous avons vu le principe du chiffrement / déchiffremment symétrique :

  • On chiffre un message avec un clé et on obtient un message crypté, illible par tous, sauf par ceux qui ont connaissance de la clé utilisée.
  • On pourra donc une fonction de cryptage sous la forme  mc = chiffrer(cle, m)  mc  est le message crypté et  m  le message.

    symétrique
  • On déchiffre le message crypté en utilisant la même clé que lors du chiffrement.
  • On peut donc écrire une fonction de décryptage sous la forme  m = dechiffrer(cle, mc)  mc  est le message crypté et m le message.

Il y a donc deux défauts :

  1. On doit partager la clé entre les deux parties et donc il faudrait au début transmettre la clé directement en clair : la clé pourrait donc se faire intercepter assez facilement sur n'importe quel appareil sur lequel le paquet IP passerait.
  2. échange d'une clé symétrique en clair ?
  3. Si on connaît la clé, on peut crypter et décrypter. L'émetteur peut donc également décrypter les autres messages de son interlocuteur s'il partage la même clé.

2 - Principe du cryptage asymétrique

Il y a eu plusieurs types de systèmes de chiffrement asymétrique. Nous ne verrons que la version qui correspond à la version actuelle de ce type de système : le système RSA.

Il comporte deux clés dont voici le principe.

  • La clé i ne permet pas de décrypter les messages cryptés avec la clé i !
  • On peut décrypter avec la clé 1 les messages cryptés à l'aide de la clé 2.
  • On peut décrypter avec la clé 2 les messages cryptés à l'aide de la clé 1.

Pour que le système fonctionne, il est évident qu'on ne doit pas pouvoir trouver la clé 1 à partir de la connaissance de la clé 2 ou parvenir à retrouver la clé de cryptage à l'aide de la connaissance d'un message et de sa version cryptée.

Cette fois, nous voudrions un système qui fonctionne donc de cette façon :

  1. Un émetteur crypte son message en utilisant une première clé qu'on nommera clé de chiffrement ou clé publique. Il obtient alors un message crypté.
  2. On écrira alors  mc_pub = chiffrer(c_pub, m)  avec

    •  mc_pub  le message crypté obtenu en utilisant la clé publique
    •  c_pub  la clé de chiffrement ou clé publique
    •  m  le message en clair

    La grande différence avec le cas symétrique est qu'on ne peut pas décrypter le message en utilisant à nouveau la clé publique.

    En d'autres termes  dechiffrer(c_pub, mc_pub)  ne redonne pas le message m !

    principe du chiffrement asymétrique
  3. On transmet donc un message crypté au destinataire. Le message est donc illisible, même pour ceux qui ont connaissance de la clé de chiffrement.
  4. Le destinataire récupère ce message crypté et utilise sa clé de déchiffrement ou clé privée pour le déchiffrer et récupérer le message original.
  5. Décrypter à l'aide de la clé privée le message cypté avec la clé publique permet de retrouver le message.

    On écrira alors
     dechiffrer(c_pri, mc_pub) =
     dechiffrer(c_pri, chiffrer(c_pub, m) ) =
     m 
    avec

    •  c_pri  la clé de déchiffrement ou clé privée
    •  mc_pub  le message crypté obtenu en utilisant la clé publique
    •  m  le message en clair

    Cette fois, nous allons pouvoir utiliser la communication pour envoyer des messages sécurisés vers le serveur distant.

    Comment ? Le serveur peut librement transmettre la clé de chiffrement en clair. Le client peut alors envoyer un message chiffré en utilisant cette clé !

    Par contre, le serveur doit garder secret la valeur de la clé de déchiffrement.

    principe du chiffrement asymétrique

Le problème vient de la communication dans l'autre sens. Dans certains cas, le serveur peut crypter son message en clair en utilisant sa clé privée. Selon le système, il est possible qu'on puisse décrypter le message crypté à l'aide de la clé privée en utilisant la clé publique. Mais comme la clé publique est transmise en clair au moins une fois, il n'est pas possible d'utiliser ce système pour communiquer de façon cryptée dans le sens serveur vers client : n'importe qui connaissant la clé publique du serveur pourrait décrypter les messages que le serveur envoie à son client.

Solution 1 : le client transmet à son tour sa clé publique...

Le client pourrait transmettre à son tour sa clé publique au serveur et celui-ci pourra alors lui envoyer des messages cryptés que seul le client pourrait décoder. Pourquoi ne pas faire cela ?

Deux raisons :

  1. Les méthodes asymétriques demandent beaucoup de temps de calcul. Plus que les méthodes symétriques. Des communications basées sur ce type de cryptage sont donc viables uniquement sur des messages courts mais pas pour transférer des messages longs, comme des vidéos par exemple.
  2. Cette communication ne protège pas contre les attaques du type Attaque de l'Homme du Milieu ou Man in The Middle en anglais.

Et Alice ne se rend compte de rien. Non : Marie reçoit les réponses de Bob, peut le décrypter et va alors les transmettre à son tour à Alice, comme si elle était Bob.

On voit bien que ni Alice ni Bob ne peuvent se rendre savoir qu'ils ne commuiquent pas vraiment avec la même personne. Mais si Alice transmettait sa clé publique à "Bob", elle ne ferait que communiquer de façon crypter avec Marie dans les deux sens !

Solution 2 : le client décide d'un clé symétrique et la transmet au serveur en cryptant le message à l'aide de la clé publique du serveur.

Cette solution permet de pallier le coût du chiffrement / déchiffrement asymétrique. Oui.

Mais ça ne change rien au problème de l'homme du milieu.

3 - Le tiers de confiance

Comme parvenir à identifier de façon certaine votre correspondant ?

Comment être certain que vous discutez bien avec votre Banque (B comme Banque ou Bob) par exemple ? En parlant argent, cela rend tout de suite les choses concrêtes !

L'une des solutions possibles est d'utiliser un tiers de confiance, un organisme reconnu C (comme confiance ou clark...) par les deux ordinateurs cherchant à discuter.

On considère donc que Alice et Bob connaissent d'une façon ou d'une autre la clé publique de C.

Voici la situation initiale :

Cet organisme C va créer un certificat permettant à Alice d'identifier Bob avec certitude !

Comment ? Le plus simple est que Bob fournisse à C sa clé publique. C va alors la crypter en utilisant sa clé privée et fournir le résultat à Bob en retour.

Bob obtient ainsi son certificat qui est un message codé à l'aide de la clé privée de C :  certificat = chiffrer(cpriC, cpubB+nom_du_serveur) .

A partir du moment où Bob reçoit son certificat, il peut recevoir des communications et s'identifier auprès de ses interlocuteurs.

Ainsi, si Alice le contacte en clair pour obtenir sa clé publique, il pourra transmettre en clair sa clé publique cpubB ainsi que son certificat d'authentification par la même occasion : ni l'un ni l'autre ne sont des éléments à dissimuler.

A partir de là, Alice reçoit bien une clé publique mais également le certificat d'authentification. Que peut-elle en faire ?

Et bien, comme le certificat a été chiffrer en utilisant la clé privée de C, elle peut le déchiffrer en utilisant la clé publique de C qu'elle connaît !

Alice va donc calculer ceci :

dechiffrer(cpubC, certificat) = 

dechiffrer(cpubC, chiffrer(cpriC, cpubB+nom_du_serveur)) = 

cpubB

Alice n'a alors plus qu'à vérifier que la valeur fournie par Bob correspond bien à la valeur qu'elle est parvenue à déchifrer à l'intérieur du certificat et que le nom du serveur est le bon !

Cette fois, Marie ne peut plus jouer le rôle de Bob : elle ne peut pas facilement intercepter le certificat reçu par Bob (C peut l'envoyer de façon cryptée puisque Bob connait la clé publique de C) et de toutes manières, Alice ne trouvera pas le bon nom de serveur puisque C refusera de certifier que Marie est bien Bob.

4 - HTTPS

Nous pouvons maintenant comprendre comment fonctionne une communication HTTPS qui est un mélange de chiffrement asymétrique (lors de l'authentification et l'établissement de la connection) puis de chiffrement symétrique (lors de la suite de la communication).

  1. Un client dispose d'un navigateur Web disposant d'un ensemble de clés publiques correspondant aux organismes de certification auxquels les concepteurs du navigateur font confiance.
  2. Un serveur se déclare auprès de l'un des organismes de certification et lui demande de lui fournir un certificat d'authentification.
  3. Le client contacte le serveur en clair
  4. Le serveur lui transmet en clair sa clé publique et son certificat
  5. Le client vérifie la validité du certificat et de la clé publique
  6. Le client utilise alors la clé publique du serveur authentifié pour discuter avec le serveur de la méthode de chiffrement symétrique qu'ils vont utiliser lors de cette session de communication : quel algorithme et quelle clé de chiffrement symétrique.
  7. A partir de là, client et serveur peuvent communiquer de façon sécurisée en utilisant une méthode de chiffrement symétrique, moins gourmande en temps de calcul.

Et comment faire pour lire le certificat envoyé par un site ? Il suffit de cliquer sur le petit cadenas et de chercher ensuite dans les menus proposés par le navigateur.

A titre d'exemple, voici le début du certificat de ce site :

Le protocole HTTPS est en réalité constitué de deux protocoles :

  1. Le protocole TTL (Transport Layer Security) est celui qui gère l'authentification via le certificat et le choix et l'établissement du protocole de chiffrement symétrique.
  2. Une fois la communication établie, HTTPS utilise le protocole HTTP de façon habituelle si ce n'est que les requêtes et réponses HTTP sont cryptés.

5 - FAQ

Des différences entre les autorités de certification

Oui, bien entendu. Certaines sont des sociétés commerciales et vérifient de façon rigoureuse l'identité des serveurs qui leur demandent un certificat.

On obtient alors un beau cadenas vert dans la plupart des navigateurs. Mais cela a un prix

Pour ceux qui ne désirent pas payer chers (les sites non commerciaux par exemple), il existe des organismes de certification gratuits comme Let's Encrypt. Bien entendu, la certification est techniquement bonne mais les vérifications sont un peu moins rigoureuse. Du coup, les navigateurs affichent simplement un cadenas gris.

Activité publiée le 26 10 2020
Dernière modification : 08 02 2021
Auteur : ows. h.