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.
Quelles sont les différentes méthodes de cryptage qui existent ?
Comment SSH utilise-t-il ces méthodes de cryptage pour garantir la sécurité ?
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.
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).

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

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) !

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) !

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 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 :
une clé dite « publique » qui sert à crypter ;
une clé dite « privée » qui sert à décrypter.
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 :
la clé publique soit 74A48vXX ;
la clé privée soit 99o0pn9.
Pour crypter, on utilise la clé publique, comme sur la figure suivante.

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

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.
SSH utilise les deux cryptages : asymétrique et symétrique. Cela fonctionne dans cet ordre.
On utilise d'abord le cryptage asymétrique pour s'échanger discrètement une clé secrète de cryptage symétrique.
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.
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).

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).

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).

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) !

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) ! ;-)

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.