Cryptographie!

Sécurité de SSH, le terminal à distance d'Unix

  SSH, pour Secure Shell est un logiciel des systèmes Unix (comme Linux et Mac Os X) qui permet d'accéder de façon distante à un ordinateur. Il utilise le modèle client/serveur : un client essaie de se connecter sur un serveur dans le but d'ouvrir un terminal par exemple. L'intérêt de SSH, par rapport à des logiciels utilisés auparavant comme rlogin, est de sécuriser ces relations client/serveur.

  SSH utilise la cryptographie à clé publique pour sécuriser les échanges. Lorsqu'un client se connecte à un serveur pour la première fois, celui-ci lui envoie sa clé publique, accompagnée d'un certificat s'il en dispose un. Le client doit alors vérifier (ou non) ce certificat, pour savoir s'il valide la clé publique du serveur. Si c'est le cas, il enregistre cette clé publique dans un fichier, qu'il doit protéger contre tout changement.

  Lors d'une connexion ultérieure, le serveur envoie à nouveau sa clé publique. Le client vérifie si cette clé coïncide avec celle qu'il a stockée dans son fichier. Si ce n'est pas le cas, il est sûr que quelqu'un tente d'usurper l'identité du serveur! Mais même si c'est le cas, quelqu'un pourrait d'usurper l'identité du serveur puisque sa clé publique est par définition… publique! Le client doit donc vérifier que le serveur dispose bien de la clé privée correspondant à cette clé publique. Pour cela, il lui envoie un challenge aléatoire, un nombre tiré au hasard qu'il chiffre avec la clé publique du serveur. Celui-ci, avec sa clé privée, qu'il est seul à posséder, peut retrouver le nombre initial, et il l'envoie au client. Si le nombre reçu par le client correspond au nombre qu'il avait envoyé, il a l'assurance qu'il a bien affaire au serveur désiré, celui qu'il a authentifié lors de la première connexion. A l'aide du protocole de Diffie-Hellman, client et serveur s'échangent alors une clé pour un algorithme symétrique (typiquement, AES), et les échanges ultérieurs se font tous à l'aide de cette clé et de cet algorithme.

  La première connexion à l'aide de SSH est donc déterminante. En effet, si le serveur est correctement identifié, personne ne pourra se faire passer pour lui plus tard, et ainsi toute attaque de type homme du milieu devient impossible.