Découvrez les protocoles de cryptographie asymétrique
Rassurez-vous, l'idée derrière ces mots un peu barbares est simple : il s'agit de mettre en œuvre des mécanismes pour garantir la sécurité de l'échange entre vous et votre serveur sur deux aspects principaux :
l'échange provient bien de votre serveur,
vous êtes bien le seul à pouvoir lire les informations transmises.
D'ailleurs, avant toute chose, un peu de vocabulaire :
Cryptologie | C'est la science du secret dans la transmission de l'information. |
Cryptographie | C'est une discipline de la cryptologie assurant notamment la confidentialité, l'authenticité et l'intégrité du message dans une transmission. |
Chiffrer | On chiffre un message afin de s'assurer qu'il est secret. |
Déchiffrer | On déchiffre un message afin de récupérer les données d'origine, lisibles et compréhensibles. |
Crypter | On crypte lorsqu'on veut altérer un message dans l’objectif qu’il ne soit plus lisible, à jamais. |
Décrypter | On essaie cependant de décrypter un message chiffré lorsqu'on ne connaît pas la clé de déchiffrement. |
Le principe de la cryptographie est le suivant :
déterminer un algorithme permettant de chiffrer un message,
communiquer cet algorithme à votre correspondant afin qu'il puisse déchiffrer le message.
Prenons un exemple tout bête : Imaginons que vous souhaitiez communiquer la phrase suivante “Linux rocks !” (et c’est vrai…) à votre correspondant. Mais vous voulez être sûr qu'une personne lambda qui tomberait volontairement ou par hasard sur votre message ne puisse pas le lire.
Vous vous mettez d'accord avec votre correspondant sur l'algorithme suivant :
Décalage de deux touches vers la gauche sur un clavier AZERTY.
Décalage d'une seule touche si pas possible de deux
Aucun décalage si le décalage d’une seule touche n’est pas possible non plus
Votre message chiffré devient : “Jyvt< zuwhq ;”.
Vous conviendrez que le message est, d’emblée, beaucoup moins lisible par un tiers qui ne connaît pas d'algorithme !
Bien entendu, notre clé ici est ridicule, un calculateur mettrait quelques millisecondes à la casser, et un humain familier des processus de cryptographie le ferait également assez rapidement (Qui vient d'appeler Robert Langdon ?).
Heureusement pour nous, l'informatique peut nous fournir assez facilement des algorithmes de chiffrement performants :
DES (Data Encryption Standard) d'IBM,
ou encore AES (Advanced Encryption Standard), qui est probablement le plus courant aujourd'hui.
Pour résoudre le problème de la criticité de la clé de chiffrement symétrique, nous employons plutôt la cryptographie asymétrique, c'est à dire l'utilisation de deux clés plutôt qu'une :
Une clé dite publique, qui va servir à chiffrer le message, et qui peut être diffusée sans criticité absolue, puisqu'elle ne sert qu'à chiffrer.
Une clé dite privée, qui va servir à déchiffrer le message, et qui est conservée précieusement, sans nécessité de la diffuser :
Comment la clé privée déchiffre-t-elle le message chiffré à partir de la clé publique ?
Et bien, en utilisant un procédé mathématique nommé brèche secrète : La clé publique est générée à partir de la clé privée, qui y laisse une brèche secrète, soit un élément permettant de déchiffrer le message...
Bref, sans trop rentrer dans le détail des mathématiques, retenez simplement que la clé publique sert à chiffrer et que la clé privée sert à déchiffrer.
Ce processus présente l'avantage d'être très sécurisé, une personne lambda en possession de la clé publique (seul élément à être transmis) ne pourra pas déchiffrer le message. Ajoutons à cela l'avantage de pouvoir identifier de manière sûre la provenance du message en inversant la transmission.
Bon, ok, mais quid de notre serveur SSH du coup ?
Et bien, le protocole SSH se définit par l'utilisation des deux procédés de cryptographie :
asymétrique pour mettre en place un échange sécurisé avec le client,
et symétrique pour gérer les données.
Le principe de fonctionnement est le suivant :
Le serveur écoute les demandes de connexions entrantes ;
Un client demande une connexion, le serveur lui répond les algorithmes de chiffrement à sa disposition ;
Le client valide un algorithme et le serveur fournit au client sa clé publique ;
À partir de ce moment-là, le client peut vérifier que tous les messages qu'il va recevoir proviennent bien du serveur ;
Le client et le serveur échangent grâce à la cryptographie asymétrique pour s'accorder sur une clé de chiffrement symétrique basée sur un très grand nombre premier, on l'appelle la clé de session SSH ;
Une fois cette clé partagée, le client et le serveur peuvent l'utiliser pour tout le reste de la session.
Voilà pour la théorie, passons maintenant à la pratique !
Installez un service SSH
L'équipe de développement de cette distribution a donc construit une brique logiciel basée sur le protocole SSH : OpenSSH. Cette brique logicielle fournit notamment les éléments suivants :
sshd
: le service SSH ;ssh
: le client SSH ;ssh-keygen
etssh-copy-id
: les utilitaires de gestion de clé RSA, DSA ;scp
etsftp
: les clients permettant le transfert de données via SSH.
Nous allons nous intéresser à sshd
, le processus service s'appuyant sur le protocole SSH.
Allez c’est parti, nous allons maintenant :
installer un service SSH sur une distribution Debian en utilisant le gestionnaire de packages,
voir la commande
systemctl
qui gère le service et la commandess
qui permet d’auditer les ports du serveur.
Connectez-vous à un service SSH
Vous allez sûrement constater un nombre d'options et de paramètres assez conséquent pour la commande ssh
. Mais finalement, pour une utilisation basique du client, il suffit de lancer le programme en indiquant :
le compte avec lequel l'authentification doit s'effectuer,
l'adresse du serveur, évidemment.
La partie la plus intéressante de la connexion SSH réside probablement dans la gestion et l’échange des clés dont je vous ai parlé plus haut. Mais le plus simple est encore de le voir en vidéo ! Nous allons :
initier une première connexion au service SSH,
étudier l’option
-p
de la commandessh
,observer le condensat pendant le processus de connexion, et la gestion des clés échangées,
voir une erreur très classique des connexions via SSH : lorsque le serveur qui héberge le service a changé et que les clés ne correspondent plus ! Dans ces cas-là, la commande
SSH-keygen
est votre meilleure amie.
Un beau programme, on y va ?
N'oubliez pas cependant que le service SSH vous permet de vous connecter de manière sécurisée, à distance, sur votre serveur Linux. C'est tout.
Lorsque le processus de connexion/authentification est terminé, le service SSH rend la main en exécutant le shell associé au compte de connexion.
Les données de la session shell sont ensuite chiffrées via le protocole SSH.
Sécurisez votre connexion SSH
Allons maintenant un peu plus loin avec la connexion SSH.
Le point faible de la connexion telle que décrite ci-dessus reste bien évidemment le mot de passe du compte utilisateur : lorsque vous allez multiplier les connexions sur différents serveurs, avec différents comptes utilisateurs, la gestion de ces mots de passe va se compliquer. Par ailleurs, la saisie d'un mot de passe est toujours une source de faille potentielle, que ce soit sur votre poste de travail, ou encore avec vos collègues...
L'idée ici est une nouvelle fois d'utiliser les bienfaits de la cryptographie asymétrique. Il s'agit de générer, en tant que client, notre propre doublon de clé privée/clé publique. Cela permettra notamment de diffuser cette clé publique sur les serveurs pour faciliter notre authentification avec la clé privée associée.
Oui, vous avez bien compris, le client va aussi diffuser sa clé publique sur le serveur…
Je sais, ça se complique un peu là, mais le plus simple est encore de vous montrer tout ça en vidéo. Je vais vous montrer comment :
utiliser la commande
ssh-keygen
pour générer vos propres clés SSH,diffuser votre clé publique sur le serveur via la commande
ssh-copy-id
,se connecter sans saisir de mot de passe au serveur grâce à cet échange de clés !
Accrochez vos ceintures, c’est parti !
À ce stade, il est même possible de restreindre les connexions au service SSH uniquement par échange de clés, c'est-à-dire de désactiver les authentifications par mot de passe.
Pour cela, il est nécessaire de modifier le comportement du serveur SSH via son fichier de configuration. Renseignez-vous, c’est assez simple à faire.
En résumé
Pour sécuriser un message, il faut le chiffrer
La cryptographie permet de chiffrer et déchiffrer un message
SSH repose sur les principes de cryptographie symétrique et asymétrique
Sous Linux, les briques logicielles OpenSSH permettent de mettre en place un service SSH sécurisé
Il est nécessaire de sécuriser le service SSH, notamment en passant par une authentification par échange de clés
L'accès à distance est maintenant opérationnel sur votre serveur, il peut aller se placer avec les autres dans la salle blanche prévue à cet effet, bien au frais.
Dans le prochain chapitre, je vous propose de nous pencher sur les fonctionnalités permettant de télécharger ou de transférer des données à partir d'un terminal, et vous verrez que la brique logicielle OpenSSH n'a pas fini de nous servir ! On y va ?