5. Chiffrement des communications

a. Objectifs

Ainsi qu'on l'a vu dans le chapitre précédant, les réseaux occupent une part prépondérale dans l'informatique moderne. Il convient de ne rien faire transiter en clair, de manière à ce qu'aucune communication ne soit interceptable ou falsifiable. Le chiffrement doit remplir les quatre fonctions importantes que sont l'authentification, l'intégrité, la confidentialité, la signature des communications. Différents types de chiffrement existent, on peut les diviser en deux catégories, les chiffrements symétriques, et les chiffrements asymétriques.


Je ne rentrerai pas dans les détails, mais le chiffrement symétrique, aussi connu sous le nom de chiffrement à clé secrète utilise un mot de passe qui doit être connu de l'expéditeur comme du destinataire, ce mot de passe servant autant au chiffrement qu'au déchiffrement de ce qui a été chiffré. L'intérêt de cette méthode est sa rapidité d'exécution, ce qui fait qu'il est largement utilisé pour les communications réseau d'égal à égal. Son point faible est de devoir utiliser une clé secrète commune.


Le chiffrement asymétrique, plus connu sous le nom de chiffrement à clé publique exige que chaque personne prenant part à une communication chiffrée possède sa propre paire de clés, celles ci allant par deux, une clé publique et une clé privée. Comme son nom l'indique, la clé publique est destinée à être diffusée largement, elle sert à chiffrer les données expédiées à son propriétaire, qui les déchiffre à sa guise avec sa clé privée. Cette dernière sert aussi à son possesseur de prouver son identité en signant les messages qu'il envoie, cette signature étant vérifiable avec la clé publique. Il n'est pas possible en théorie de déterminer la clé privée à partir de la clé publique.


b. SSL/TLS

Toutes les applications de type client-serveur présentant un risque quelconque se devrait d'être chiffrée, pour répondre aux quatre objectifs décrits plus haut. Ainsi, les protocoles tels que IMAP, FTP, POP, SMTP, HTTP pour des données sensibles ne devraient pas être utilisés tels quels, alors que de nos jours, il existe des alternatives performantes et reconnues, bien entendu disponibles dans le monde des logiciels libres.


SSL (secure socket layer, couche de connexion sécurisée) est un protocole introduit par la société NetScape initialement, et est aujourd'hui reconnu et utilisé par toute la communauté informatique à but d'authentification et de chiffrement de connexions client-serveur. Un standard basé sur SSL a été normalisé par l'IETF (Internet Engineering Task Force), elle se nomme TLS. SSL est très simple à mettre en oeuvre et a largement dépassé le cadre du simple HTTP. SSL se place au niveau de la couche 4 du modèle OSI, c'est un protocole de transport orienté connexion. L'interfacage avec des logiciels est donc simple et peut s'appuyer de manière transparente sur le modèle en couche OSI. Il offre aux protocoles applicatifs qui l'utilisent des mécanismes d'authentification mutuelle entre client et serveur, et des possibilités de chiffrement pour établir des connexions sécurisées (d'où « connexion SSL »).


Concrètement, une connexion SSL suit les étapes suivantes :

_ Authentification du serveur auprès du client (chiffrement à clé publique, comme RSA ou DSA)

_ Choix d'un algorithme de chiffrement connu par le serveur et le client (DES, 3DES, AES, ...)

_ Authentification du client auprès du serveur (optionnel)

_ Echange de secrets partagés pour la génération de la clé secrète à utiliser pour le chiffrement symétrique

_ Etablissement de la connexion proprement dite


Note : OpenSSL (http://www.openssl.org) est une implémentation libre du protocole SSL, intégré à quasiment toutes les distributions Gnu/Linux. Beaucoup de logiciels libres fournis avec les distributions viennent sous forme d'une version basique utilisant TCP, et d'une version dite sécurisé dite SSL/TLS. Il convient par conséquent d'utiliser de préférence la version sécurisé.


c. SSH

SSH (Secure Shell) est un protocole réseau sécurisé permettant l'ouverture de sessions interactives, l'exécution de commandes distantes, le transfert de fichiers, l'encapsulation de connexions TCP. SSH vient en remplacement d'outils historiques Unix, n'offrant pas ou peu de sécurité aux utilisateurs. SSH vient avec des mécanismes de chiffrement, mais aussi des mécanismes d'authentification forte. Ainsi, les sessions distantes étaient réalisables dans le temps grâce à telnetd, qui transmettait tout, y compris les mots de passes en clair sur le réseau, et de plus était court-circuitable assez facilement..


Les alternatives proposées sont ssh, scp pour les commandes rsh, rlogin, rcp, sftp pour ftp. Ces commandes permettent de transférer des fichiers en toute sécurité, de créer des tunnels d'encapsulation de données, de travailler sur en hôte distant tout en ayant l'esprit tranquille.


Deux versions du protocole existent, mais des failles ayant étés découvertes dans la version 1, il convient de n'utiliser que la version 2 du protocole. Il convient d'éditer pour cela le fichier de configuration /etc/ssh/sshd-config. SSH se base sur un modèle client-serveur, dont le serveur est sshd.


OpenSSH est un implémentation libre du protocole SSH, faite par les développeurs de la distribution OpenBSD, aujourd'hui portée sur les systèmes Gnu/Linux, et installée par défault dans la plupart des distributions.


L'authentification la plus commune se base sur les mots de passes système (à travers PAM, vu précédemment). Mais il convient d'utiliser un système plus sûr, tel qu'une paire de clées publique/privée. Cela permet aussi de créer des connexions sécurisées sans avoir à préciser le mot de passe, ce qui n'est toutefois évidemment pas conseillé.


Note : Si bien sûr ce système est à utiliser de façon inconditionnelle, il convient d'en surveiller de très près l'évolution, et surtout les éventuelles alertes le concernant, comme cela a été le cas récemment, et donc d'en utiliser une version systématiquement mise à jour.



4. Réseaux
Sommaire
6. Services