Cryptographie : Signature numérique et Chiffrement


Sécurisation des échanges

Le problème de la sécurisation des échanges numériques est à l'opposé de celui de la signature électronique : si vous faites un achat sur Internet, comment être sûr que vous envoyez bien votre numéro de carte bancaire au commerçant, et non à un pirate qui aurait usurpé son identité et donné sa propre clé publique.

Cette fois, c'est donc en premier lieu, du Destinataire que l'on veut être sûr, et non de l'Expéditeur.

En second lieu, si vous possédez un compte utilisateur chez ce marchand, il peut vous imposer de vous identifier de manière certaine, c'est ce que l'on appelle l'identification réciproque ou double authentification.

Utilisation de SSL/TLS

SSL (Secure Socket Layer) et TLS (Transport Layer Security) offrent les services de sécurité suivants :
SSL/TLS combinent simultanément l'utilisation de clés asymétriques et de clés symétriques.

Ils utilisent un protocole de négociation qui permet, à l'aide des clés asymétriques du client et du serveur, d'établir une session qui sera chiffrée à l'aide d'une clé symétrique générée et qui n'est valable que pour cette session.

Le mécanisme en est le suivant :
  1. Le client envoie au serveur plusieurs informations pour définir notamment la version du protocole SSL utilisé, les paramètres de chiffrement utilisés, etc. Il envoie aussi un jeu de données qui sont générées aléatoirement (appelé « jeton de session »).
  2. Le serveur envoie ensuite au client les mêmes types d'informations, ainsi qu'un jeu de données qu'il aura lui-même généré aléatoirement (appelé « jeton de réponse »). Le serveur envoie alors aussi son certificat de clé publique. Il demande éventuellement au client qu'il envoie son propre certificat si une authentification du client par certificat est requise (on parle alors d'authentification réciproque ou de double authentification).
  3. Le client utilise les informations du certificat du serveur pour authentifier le serveur. Pour cela, il utilise les mécanismes classiques qui ont été décrits dans le chapitre consacré aux certificats.
  4. Le client est alors en mesure d'envoyer au serveur une « pré » clé secrète, qu'il chiffre avec la clé publique du serveur. Si le serveur a demandé une authentification client, alors le client envoie aussi un bloc de données signé, ainsi que son certificat de clé publique.
  5. Si le serveur a demandé une authentification client par certificat, alors il vérifie la validité du certificat présenté par le client. Le serveur peut déchiffrer ensuite la « pré » clé secrète à l'aide de sa clé privée. Le serveur et le client réalisent une même série d'opérations pour obtenir des clés secrètes de session à partir de la « pré » clé secrète et des données aléatoires échangées précédemment.
  6. Le client envoie ensuite un avertissement au serveur indiquant que les prochains messages seront chiffrés. Puis il envoie un message (chiffré cette fois) qui signifie que la phase de négociation est terminée.
  7. Le serveur envoie alors lui aussi un avertissement au client qui indique que les prochains messages seront chiffrés. Enfin, il envoie un message (chiffré cette fois) qui signale que la phase de négociation est terminée.
La session SSL est ainsi complètement établie.

Les algorithmes cryptographiques utilisés peuvent varier, et sont donc négociés lors de la connexion :
Transport Layer Security (TLS), est l'évolution de SSL (SSL version 3).

Il utilise à la fois un chiffrement asymétrique (pour l'authentification), c'est l'algorithme RSA, et à la fois un chiffrement symétrique pour la transmission des informations (le AES). On y adjoint une fonction de hachage (le MD5), pour s'assurer que les données sont transmises sans être corrompues.

Utilisation de SSH

SSH (Secure Shell) est à la fois un logiciel et un protocole de communication sécurisé. Le protocole SSH a été conçu avec l'objectif de remplacer les différents programmes rlogin, telnet et rsh.

Le protocole de connexion s'établit par un échange de clés de chiffrement en début de connexion permettant un chiffrement de l'ensemble des trames de communication. C'est ce chiffrement de bout en bout qui assure la confidentialité de l'échange.

Le protocole SSH existe en deux versions majeures : Habituellement le protocole SSH utilise le port TCP 22. Il est particulièrement utilisé pour ouvrir un shell sur un ordinateur distant. SSH fait référence pour l'accès distant sur les stations Unix.

SSH peut également être utilisé pour transférer des ports TCP d'une machine vers une autre, créant ainsi un tunnel (port tunneling). Cette méthode est couramment utilisée afin de sécuriser une connexion qui ne l'est pas (par exemple le protocole de récupérations de courrier électronique POP3) en la faisant transférer par le biais du tunnel chiffré SSH. De même, SSH pemet le déport d'interface graphique comme X11 par le même biais.

Il est également possible de faire plusieurs sauts entre consoles SSH, c'est-à-dire ouvrir une console sur un serveur, puis, de là, en ouvrir une autre sur un autre serveur.

Il existe deux modes d'authentification sous SSH : Ces deux modes d'authentification sont également utilisables avec SCP et SFTP puisque la connexion s'établit via le même serveur SSH.

SSH permet également, via le système de fichier SSHFS, d'accéder au fichiers distants en « montant » le système de fichiers distant comme s'il s'agissait d'un système de fichiers local ou d'une unité amovible.

Le réseau privé virtuel : VPN

Extension du principe proposé par SSH, le réseau privé virtuel repose sur des protocoles établis, renforçant le principe de sécurité des transmissions.

Dans les faits, cela correspond à une liaison la plus part du temps permanente, distante et sécurisée entre deux sites d'une organisation. Cette liaison autorise la transmission de données cryptées par le biais d'un réseau non sécurisé, comme Internet.

Alors que SSH permet d'accéder de manière distante et sécurisée à une seule machine, le VPN permet d'utiliser l'ensemble du réseau depuis une machine tierce.

L'un ouvre une passerelle depuis un ordinateur vers un autre, l'autre fait en sorte que la machine de l'utilisateur fasse partie intégrante du réseau distant. Cela étant, un réseau VPN peut se créer au travers d'un tunnel SSH, si le besoin se présente.

Ainsi, grâce à un VPN, toutes les adresses internes du réseau distant sont accessibles depuis la machine qui y est reliée par VPN. Le VPN n'est d'ailleurs pas limité à une machine accédant un réseau : il est parfaitement possible de lier plusieurs réseaux à un réseau central avec ce système, et combiner ainsi les différentes machines en un ensemble homogène, beaucoup plus simple à gérer.


Chaque point d'un réseau VPN est relié au réseau central par le biais d'un tunnel, reliant la machine à une passerelle (gateway). Ainsi, tous les utilisateurs passent par le même « portail », ce qui permet de gérer la sécurité des accès, ainsi que le trafic utilisé par chacun. En effet, malgré son aspect sécurisé, un réseau VPN reste une extension du réseau principal vers chaque employé qui y accède, ce qui augmente d'autant le risque de failles. Centraliser les entrées au réseau permet de renforcer la sécurité, et de mieux gérer la taille prise par le réseau étendu.

Le système VPN doit donc prendre en charge tous les aspects de la sécurité : authentification, chiffrement, intégrité des données transmises, vérification des transactions. Tous ces points sont pris en charge par des protocoles spécialisés.

VPN repose ainsi principalement sur le protocole IPSec, un standard de sécurité standard au sein d'IPv6, ainsi que d'autres protocoles de chiffrement, comme SSH, et de tunnellisation. Pour ce dernier, PPTP (Point To Point Tunneling Protocol) reste la principale méthode d'implémentation de VPN, malgré le fait qu'il reste un protocole non ratifié par l'IETF.

Deux autres protocoles de tunnellisation courants sont L2F (Layer Two Protocol) et son remplacant L2TP (Layer Two Tunneling Protocol), qui correspondent à un port du protocole PPP sur le protocole IP.