====== Diagramme de séquence de l'établissement d'une session SSH ====== @startuml group Etablissement d'une session 3-Way Handshake ClientSSH -> Serveur : demande session avec paquet SYN (Synchronize) Serveur -> ClientSSH : approuve connexion avec paquet SYN-ACK (acknowledgement) ClientSSH -> Serveur : confirme avec paquet ACK end group Etablissement de la session ClientSSH -> Serveur : annonce la version de SSH utilisée Serveur -> ClientSSH : annonce la version de SSH utilisée ClientSSH -> ClientSSH : génèrent paires de clés\npubliques-privées\ntemporaires Serveur -> Serveur : génèrent paires de clés\npubliques-privées\ntemporaires ClientSSH -> Serveur : Initialisation échange de clé\n(Key Exchange Init) note left : paramètres :\nalgorithmes\nMAC\ncompression Serveur -> ClientSSH : réponse à l'initialisation de l'échange de clé\n(Key Exchange Init) note right : paramètres :\nalgorithmes\nMAC\ncompression ClientSSH -> Serveur : Initialisation d’échange de clés Diffie-Hellman\n(Elliptic Curve Diffie-Hellman Key Exchange Init) note left : Envoi clé publique\néphémère\n+ le résultat\nd'un calcul\nsigné Serveur -> Serveur : détermination\nclé partagée\n(symétrique) Serveur -> ClientSSH : Réponse d’échange de clés Diffie-Hellman\n(Elliptic Curve Diffie-Hellman Key Exchange Reply, New Keys) note right : Envoi le résultat\nd'un calcul \signé\n+informe nouvelle\nclé partagée calculée\n+ empreintre ou certificat ClientSSH -> ClientSSH : Vérification de l'identité du serveur\nAcceptation de l'identité du serveur ClientSSH -> ClientSSH : détermination\nclé partagée\n(symétrique) ClientSSH -> Serveur : informe nouvelle clé partagée calculée end group Etablissement d'un canal sécurisé end group Authentification par mot de passe Serveur -> ClientSSH : demande saisie login ClientSSH -> Serveur : envoi login Serveur -> ClientSSH : demande saisie mot de passe ClientSSH -> Serveur : envoi mot de passe Serveur -> Serveur : vérification login et mot de passe end group Communication chifrée entre le client et le serveur durant toute la session end group Deconnexion ClientSSH -> Serveur : déconnexion avec paquet RST,ACK (Reset) Serveur -> ClientSSH : approuve déconnexion avec paquet ACK end @enduml ===== Compléments ===== * [[bloc3s1:tcp|Les connexions TCP]] * l'algorithme **chacha20_poly1305** ([[https://www.rfc-editor.org/info/rfc7539|RFC 7539]]) L'agorithme de chiffrement symétrique **ChaCha20** est utilisé à la place de **AES 256**. * **ChaCha20** : algorithme de chiffrement symétrique plus rapide qu'AES sur un matériel générique (mise en œuvre purement en logiciel) * **Poly1305** : c’est un **MAC** (message authentication code) qui permet d’assurer l'**intégrité des données** en vérifiant qu'elles n'ont subi aucune modification après une transmission. C'est une fonctionnalité semblable à une fonction de hachage. La combinaison de ces deux algortihmes permet de faire du chiffrement intègre. ===== Ressources ===== * https://fr.wikipedia.org/wiki/%C3%89change_de_cl%C3%A9s_Diffie-Hellman * https://www.adikts.io/mieux-comprendre-ssh-et-lauthentification-par-cles/ * https://www.bortzmeyer.org/7539.html * https://fr.wikipedia.org/wiki/Code_d%27authentification_de_message * https://serverfault.com/questions/586638/understand-wireshark-capture-for-ssh-key-exchange * https://serveur.ipgirl.com/comprendre-la-capture-wireshark-pour-lchange-de-keys-ssh.html