SSH est un protocole assez complexe, mais il est vraiment intéressant de savoir comment il fonctionne. Plutôt que de l'utiliser bêtement, je vous propose de vous expliquer dans les grandes lignes son mode de fonctionnement.

Nous allons ici nous intéresser aux deux questions suivantes.

  1. Quelles sont les différentes méthodes de cryptage qui existent ?

  2. Comment SSH utilise-t-il ces méthodes de cryptage pour garantir la sécurité ?

Quelles sont les différentes méthodes de cryptage ?

Il existe des tonnes d'algorithmes de cryptage. Je ne vais pas tous vous les présenter : cela demanderait trop de notions mathématiques, on pourrait y consacrer 30 chapitres et on n'aurait pas tout vu.

Si l'on ne peut pas connaître tous les algorithmes de cryptage, il faut par contre savoir que l'on peut les classer en deux catégories : les cryptages symétriques et les cryptages asymétriques.

Le cryptage symétrique

C'est la méthode de cryptage la plus simple. Cela ne veut pas dire qu'elle n'est pas robuste (il existe des cryptages symétriques très sûrs). Cela veut plutôt dire que le fonctionnement est simple à comprendre. :-)

Avec cette méthode, on utilise une clé (un mot de passe secret) pour crypter un message. Par exemple, imaginons que cette clé soit topsecret (figure suivante).

Cryptage symétrique
Cryptage symétrique

Pour décrypter ensuite le message, on utilise cette même clé (figure suivante).

Décryptage symétrique
Décryptage symétrique

Il faut donc que la personne qui crypte et celle qui décrypte connaissent toutes deux cette clé qui sert à crypter et décrypter.

Si le pirate intercepte un message crypté, il ne peut rien en faire s'il ne connaît pas la clé secrète (figure suivante) !

Interception du message crypté
Interception du message crypté

Ah. c'est bien, ça ! Mais il faut que le client et le serveur connaissent tous les deux la clé de cryptage.
Il faut donc que le client envoie d'abord au serveur la clé pour que celui-ci puisse décrypter ses futurs messages.

Très bonne remarque : je vois que vous suivez, c'est bien. ;-)

En effet, pour que le schéma que l'on vient de voir puisse fonctionner, il faut que le client et le serveur se soient transmis auparavant la clé magique qui sert à crypter et décrypter. Mais comment font-ils pour se l'échanger ? S'ils l'envoient en clair, le pirate va pouvoir l'intercepter et sera ensuite capable de décrypter tous les messages cryptés qui passeront sur le réseau (voyez la figure suivante) !

Interception de la clé de cryptage
Interception de la clé de cryptage

Le cryptage symétrique est donc puissant, mais il a un gros défaut : il faut communiquer « discrètement » la clé de cryptage. mais c'est impossible : il faut bien envoyer la clé en clair au début !

.
À moins de. non.
Et pourquoi pas ? Si l'on cryptait la clé de cryptage lors de son envoi ? :-p

Pour crypter la clé de cryptage symétrique, on va utiliser une autre méthode : le cryptage asymétrique. Avec cette autre méthode, on ne risque pas de connaître à nouveau le problème que l'on vient de rencontrer.

Le cryptage asymétrique

Le cryptage symétrique utilise une seule clé pour crypter et décrypter.
Le cryptage asymétrique, lui, utilise une clé pour crypter, et une autre pour décrypter.

Il y a donc deux clés :

La clé publique ne sert qu'à crypter. Avec ce type d'algorithme, on ne peut décrypter un message que si l'on connaît la clé privée.

On demande à l'ordinateur de générer une paire de clés : une privée et une publique. Elles vont ensemble.
Ne me demandez pas comment il les génère ni pourquoi elles vont ensemble, c'est trop compliqué à expliquer ici. Admettez simplement que l'ordinateur est capable de générer aléatoirement un couple de clés qui vont ensemble.

Prenons un exemple et imaginons que :

Pour crypter, on utilise la clé publique, comme sur la figure suivante.

Cryptage asymétrique
Cryptage asymétrique

Pour décrypter, la clé publique ne fonctionne pas. Il faut obligatoirement utiliser la clé privée (figure suivante).

Décryptage asymétrique
Décryptage asymétrique

Voilà pourquoi on dit que c'est un cryptage asymétrique : il faut deux clés différentes. L'une d'elles permet de crypter le message, l'autre de le décrypter. Il n'y a pas d'autre moyen.

La clé publique peut être transmise en clair sur le réseau (elle est « publique »). Ce n'est pas grave si un pirate l'intercepte. En revanche, la clé privée . qui permet donc de décrypter . doit rester secrète.

La création d'un tunnel sécurisé avec SSH

SSH combine cryptage asymétrique et cryptage symétrique

SSH utilise les deux cryptages : asymétrique et symétrique. Cela fonctionne dans cet ordre.

  1. On utilise d'abord le cryptage asymétrique pour s'échanger discrètement une clé secrète de cryptage symétrique.

  2. Ensuite, on utilise tout le temps la clé de cryptage symétrique pour crypter les échanges.

Pourquoi ne pas utiliser uniquement du cryptage asymétrique tout le temps ?

Ce serait possible mais il y a un défaut : le cryptage asymétrique demande beaucoup trop de ressources au processeur. Le cryptage asymétrique est 100 à 1 000 fois plus lent que le cryptage symétrique !
Les ordinateurs s'échangent donc la clé de cryptage symétrique de manière sécurisée (grâce au cryptage asymétrique) et peuvent ensuite communiquer plus rapidement en utilisant en permanence le cryptage symétrique.

Le cryptage asymétrique est donc utilisé seulement au début de la communication, afin que les ordinateurs s'échangent la clé de cryptage symétrique de manière sécurisée. Ensuite, ils ne communiquent que par cryptage symétrique.

Les étapes de la création d'un canal sécurisé avec SSH en images

Je résume en images. On veut s'échanger une clé de cryptage symétrique, mais on ne peut pas le faire en clair sinon le pirate peut l'intercepter. On va donc crypter la clé grâce au cryptage asymétrique.

Le serveur envoie la clé publique en clair au client pour qu'il puisse crypter (figure suivante).

Envoi de la clé publique au client
Envoi de la clé publique au client

Le client génère une clé de cryptage symétrique (par exemple topsecret) qu'il crypte grâce à la clé publique qu'il a reçue (figure suivante).

Création de clé symétrique et cryptage par le client
Création de clé symétrique et cryptage par le client

Le client envoie la clé symétrique cryptée au serveur. Le pirate peut l'intercepter, mais ne peut pas la décrypter car il faut pour cela la clé privée, connue seulement du serveur (figure suivante).

Envoi de la clé cryptée au serveur
Décryptage de la clé par le serveur grâce à sa clé privée

Le client et le serveur connaissent maintenant tous les deux la clé symétrique topsecret, et à aucun moment ils ne l'ont échangée en clair sur le réseau !
Ils peuvent donc s'envoyer des messages cryptés de manière symétrique en toute tranquillité. Ce cryptage est plus rapide et tout aussi sûr que le cryptage asymétrique car le pirate ne connaît pas la clé (figure suivante) !

Échange sécurisé établi !
Échange sécurisé établi !

Voilà comment SSH fonctionne pour créer un canal d'échange sécurisé. Tout est crypté grâce à la clé symétrique que le client et le serveur se sont astucieusement communiquée.

Maintenant qu'ils discutent de manière sécurisée, que font le client et le serveur ?

Eh bien seulement maintenant, le client peut se connecter au serveur : il peut donner son login et son mot de passe sans craindre de se les faire voler par le pirate (figure suivante) ! ;-)

Le client peut envoyer son login et son mot de passe de manière sécurisée
Le client peut envoyer son login et son mot de passe de manière sécurisée

Faut-il savoir tout cela pour utiliser SSH ?

Non. En fait, tout se fait automatiquement. Vous allez juste avoir à entrer un login et un mot de passe pour vous connecter à votre machine à distance.
Mais j'estime que c'était l'occasion idéale de vous expliquer comment fonctionne le protocole SSH. Ce système est utilisé partout dans le monde ! Plus personne n'envisage de se connecter en Telnet aujourd'hui.