Aller au contenu

Protocoles SSH, FTP et SFTP

Cryptographie symétrique

La cryptographie symétrique est une technique de chiffrement où une même clé secrète est utilisée pour chiffrer et déchiffrer les données.

Elle est particulièrement rapide et efficace, ce qui en fait une solution couramment utilisée pour protéger de grands volumes de données. Cependant, son principal défi réside dans la gestion et le partage sécurisé de la clé entre les parties communicantes.

Avantages

  • Très rapide et peu coûteuse en ressources processeur.
  • Implémentation relativement simple.
  • Bien adaptée au chiffrement de flux importants (fichiers, bases de données, etc.).

Inconvénients

  • La distribution sécurisée de la clé est complexe (comment échanger la clé sans risque d'interception ?).
  • Si la clé est compromise, l'ensemble des communications protégées avec celle-ci est vulnérable.
  • Pas idéale seule pour les communications sur Internet, où les interlocuteurs changent fréquemment.

Exemples d'algorithmes symétriques

  • DES (Data Encryption Standard) : ancien standard, aujourd'hui obsolète.
  • AES (Advanced Encryption Standard) : standard moderne, largement utilisé (HTTPS, VPN, disques chiffrés, etc.).
  • ChaCha20 : utilisé dans certaines applications mobiles et dans le protocole TLS comme alternative à AES.

symmetric-encryption.png

Source image

Cryptographie asymétrique

La cryptographie asymétrique (ou cryptographie à clé publique) repose sur une paire de clés distinctes mais liées mathématiquement :

  • Clé publique : utilisée pour chiffrer les données. Elle peut être partagée librement.
  • Clé privée : utilisée pour déchiffrer les données chiffrées avec la clé publique. Elle doit rester confidentielle.

L'idée fondamentale est qu'un message chiffré avec une clé publique ne peut être déchiffré qu'avec la clé privée correspondante, ce qui élimine le besoin d'échanger une clé secrète à l'avance (contrairement à la cryptographie symétrique).

Avantages

  • Sécurise les communications sans échange de clé secrète préalable.
  • La clé publique peut être diffusée librement, simplifiant l'établissement de connexions chiffrées.
  • Sert aussi à l'authentification grâce aux signatures numériques (ex. : prouver qu'un message provient bien de l'expéditeur).

Inconvénients

  • Plus lente que la cryptographie symétrique (calculs mathématiques plus lourds).
  • Souvent couplée à une infrastructure de gestion de clés (PKI - Public Key Infrastructure) pour vérifier l'authenticité des clés publiques et éviter les attaques de type man-in-the-middle.

Exemples d'utilisation

  • SSH : utilise la cryptographie asymétrique pour authentifier le client/serveur et échanger une clé de session, puis bascule vers un chiffrement symétrique plus rapide pour la communication.
  • HTTPS (TLS/SSL) : les certificats basés sur la cryptographie asymétrique permettent de vérifier l'identité des serveurs et d'établir une connexion sécurisée avec le navigateur.
  • Signatures numériques : permettent de valider l'intégrité et l'origine d'un document ou d'un message.

asymmetric-encryption.png

Source image

Chiffrement vs Signature

Ces deux mécanismes utilisent la même paire de clés (publique/privée), mais dans des sens opposés et pour des objectifs différents.

🔒 Chiffrement (Confidentialité)

  • But : S'assurer que seul le destinataire prévu puisse lire le message.
  • Mécanisme :
    • L'expéditeur chiffre le message avec la clé publique du destinataire.
    • Seule la clé privée correspondante peut déchiffrer le message.
  • Garantit : la confidentialité.

Exemple : Un patient envoie ses résultats médicaux à son médecin via Internet, de façon à ce que seul ce médecin puisse les lire.

public-key-encryption.png

Source image

✍️ Signature numérique (Authenticité + Intégrité)

  • But : Prouver que le message vient bien de l'expéditeur et qu'il n'a pas été modifié.
  • Mécanisme :
    • L'expéditeur génère une signature en utilisant sa clé privée.
    • Les destinataires peuvent la vérifier avec sa clé publique.
  • Garantit :
    • Authenticité : le message vient bien de l'expéditeur.
    • Intégrité : le contenu n'a pas été modifié.

Exemple : Une administration publique publie un document officiel signé numériquement pour prouver qu'il provient bien d'elle et qu'il n'a pas été modifié.

private-key-signing.png

Source image

Echange de clés Diffie-Hellman

L'échange de clés Diffie-Hellman (DH) est un protocole cryptographique qui permet à deux parties de générer une clé de session commune sans jamais échanger directement leurs clés privées.

Cette clé partagée peut ensuite être utilisée dans un algorithme de cryptographie symétrique (plus rapide) pour chiffrer les communications.

L'idée centrale repose sur des problèmes mathématiques difficiles à résoudre (comme le logarithme discret), ce qui rend le protocole sûr même si un attaquant observe les échanges publics.

Etapes du protocole

  1. Paramètres publics
    • Un nombre premier p et une base g (appelée générateur) sont choisis et partagés publiquement.
  2. Génération des clés privées et publiques
    • Alice choisit une clé privée a et calcule sa clé publique : A = g^a mod p.
    • Bob choisit une clé privée b et calcule sa clé publique : B = g^b mod p.
  3. Echange des clés publiques
    • Alice envoie A à Bob.
    • Bob envoie B à Alice.
      • Même si un attaquant intercepte A et B, il ne peut pas retrouver a ou b.
  4. Calcul de la clé de session
    • Alice calcule : S = B^a mod p.
    • Bob calcule : S = A^b mod p.
    • Grâce aux propriétés des puissances modulaires, Alice et Bob obtiennent la même clé de session S, sans jamais partager leurs clés privées.

public-key-shared-secret.png

Source image

Exemple visuel simplifié

  • Imaginons que p et g sont comme des couleurs de peinture partagées publiquement.
  • Alice choisit sa couleur secrète et la mélange avec g, puis envoie le mélange à Bob.
  • Bob fait de même avec sa couleur secrète.
  • Quand chacun mélange sa couleur secrète avec le mélange reçu de l'autre, ils obtiennent la même couleur finale, que personne d'autre ne peut reproduire.

diffie-hellman-key-exchange.png

Source image

Avantages

  • Pas besoin d'échanger une clé secrète par un canal sécurisé.
  • Fonctionne même sur un réseau totalement ouvert comme Internet.

Limitation

  • Diffie-Hellman n'assure pas l'authentification.
    • Exemple : un attaquant peut intercepter les échanges et se faire passer pour l'un des participants (attaque de l'homme du milieu).
  • C'est pourquoi DH est souvent utilisé avec des protocoles comme TLS (HTTPS) ou SSH, qui ajoutent une couche d'authentification (certificats, signatures).

SSH (Secure Shell)

Le protocole SSH (Secure Shell) est un protocole de communication sécurisé qui permet d'établir une connexion chiffrée entre un client et un serveur à travers un réseau non sécurisé (comme Internet).

Par défaut, SSH écoute sur le port 22.

Sécurité

  • Confidentialité : toutes les données (commandes, fichiers, mots de passe, etc.) sont chiffrées pendant le transit.
  • Intégrité : des mécanismes de vérification garantissent que les messages ne sont pas modifiés en cours de route.
  • Authenticité : l'identité du serveur (et éventuellement du client) peut être vérifiée grâce aux clés publiques.

SSH combine généralement :

  • La cryptographie asymétrique pour établir la connexion et authentifier les parties
  • La cryptographie symétrique pour chiffrer rapidement le reste de la session

Authentification

SSH supporte plusieurs méthodes d'authentification :

  • Mot de passe : simple mais moins sécurisé, vulnérable aux attaques par force brute.
  • Clés publiques / privées :
    • Le client possède une clé privée (secrète).
    • Le serveur stocke la clé publique correspondante dans ~/.ssh/authorized_keys.
    • Lors de la connexion, le serveur envoie un défi que seul le client, avec sa clé privée, peut résoudre.
    • Méthode recommandée : plus sûre et sans saisie de mot de passe à chaque connexion.
  • Autres méthodes : certificats, cartes à puce, authentification à deux facteurs.

Utilisations courantes

  • Administration à distance : gérer un serveur depuis un autre ordinateur via un shell interactif.
  • Exécution de commandes à distance : lancer des scripts ou des programmes sans se connecter manuellement.
  • Transfert sécurisé de fichiers :
    • SCP (Secure Copy Protocol)
    • SFTP (SSH File Transfer Protocol).
  • Tunnels SSH : encapsuler du trafic non sécurisé dans une connexion SSH pour le protéger (exemple : accès à une base de données distante).
  • Accès cloud et DevOps : déploiement automatisé, CI/CD, gestion des infrastructures.

Authentification SSH

L'authentification SSH est le processus par lequel un client prouve son identité à un serveur distant afin d'établir une connexion sécurisée. Deux méthodes principales existent.

Authentification par mot de passe

  • Méthode la plus simple et la plus répandue.
  • Le client envoie son nom d'utilisateur et son mot de passe au serveur.
  • Le serveur compare ces informations avec celles stockées localement.
  • Simple à mettre en place.
  • Moins sécurisée : vulnérable aux attaques par force brute et aux interceptions (même si le mot de passe circule dans un tunnel chiffré).

Authentification par clé publique (méthode recommandée)

  • Basée sur une paire de clés asymétriques :
    • Une clé privée, conservée en toute sécurité par le client
    • Une clé publique, copiée sur le serveur (dans ~/.ssh/authorized_keys).
  • Avantages :
    • Plus sécurisé que les mots de passe
    • Permet l'authentification sans saisie manuelle de mot de passe
    • Compatible avec des mécanismes avancés (agent SSH, passphrase, certificats)

Processus détaillé (clé publique)

  1. Connexion initiale
    • Le client envoie une requête au serveur et propose une clé publique pour l'authentification.
    • Le serveur vérifie si cette clé publique est enregistrée dans le fichier ~/.ssh/authorized_keys.
  2. Défi
    • Si la clé est reconnue, le serveur génère un jeton aléatoire (challenge) qu'il envoie au client.
  3. Signature
    • Le client utilise sa clé privée pour signer ce jeton.
  4. Réponse
    • Le client renvoie la signature au serveur.
  5. Vérification
    • Le serveur utilise la clé publique du client pour vérifier la validité de la signature.
    • Si elle est correcte, cela prouve que le client possède bien la clé privée correspondante.
  6. Etablissement de la session
    • Une session SSH sécurisée est ouverte.
    • Les échanges ultérieurs sont chiffrés avec une clé de session symétrique.

ssh-authentication.png

Source image

Chiffrement de la communication avec SSH

SSH garantit la confidentialité, l'intégrité et l'authenticité des échanges grâce à un mécanisme hybride combinant cryptographie asymétrique (pour l'authentification et l'échange initial) et cryptographie symétrique (pour la session).

Etapes du chiffrement SSH

  1. Génération des clés du serveur
    • Le serveur SSH dispose d'une paire de clés :
      • Une clé privée conservée localement
      • Une clé publique qui peut être transmise aux clients
  2. Envoi et vérification de la clé publique du serveur
    • Lors de la première connexion, le serveur envoie sa clé publique au client.
    • Le client peut :
      • Vérifier l'empreinte (fingerprint) avec une valeur connue (par exemple transmise hors ligne)
      • Choisir de faire confiance (ce qui stocke la clé dans ~/.ssh/known_hosts)
    • Ce mécanisme protège contre les attaques de type Man-in-the-Middle, si la clé est validée correctement.
  3. Echange sécurisé de la clé de session
    • Une fois la clé publique validée, un algorithme d'échange de clés (comme Diffie-Hellman ou ECDH) est utilisé.
    • Cet échange permet au client et au serveur de générer une même clé de session symétrique, sans jamais l'envoyer en clair.
  4. Etablissement de la communication chiffrée
    • La clé de session est désormais utilisée pour chiffrer toutes les données.
    • Le chiffrement symétrique (rapide et efficace) assure la protection des échanges :
      • Confidentialité (personne ne peut lire les données)
      • Intégrité (les messages ne peuvent pas être modifiés à l'insu des deux parties)

ssh.png

Source image

Ordre général dans SSH

  1. Etablissement d'un canal sécurisé (chiffrement de la session)

    • Dès qu'un client se connecte, le serveur et le client s'accordent d'abord sur :
      • L'algorithme de chiffrement
      • La méthode d'échange de clés (ex. Diffie-Hellman, ECDH, Curve25519)
      • L'algorithme de hachage, etc.
    • Ensuite, ils exécutent l'échange de clés (ex. Diffie-Hellman) pour générer une clé de session symétrique.
    • A partir de ce moment, tous les échanges sont chiffrés, y compris la suite du processus d'authentification.
  2. Authentification du serveur

    • Le client vérifie que le serveur est bien celui qu'il prétend être (via sa clé publique de l'hôte, stockée dans ~/.ssh/known_hosts).
    • Cela empêche les attaques de type man-in-the-middle.
  3. Authentification du client
    • Une fois le canal sécurisé établi, le client peut s'authentifier :
      • Par mot de passe
      • Par clé publique
      • Ou un autre mécanisme
    • Comme tout est déjà chiffré, même un mot de passe en clair ne circule jamais en clair sur le réseau.

FTP (File Transfer Protocol)

Le FTP (File Transfer Protocol) est un protocole de communication standard utilisé pour transférer des fichiers entre un client et un serveur sur un réseau, notamment Internet.

Ports utilisés

  • Port 21 : utilisé pour la connexion de contrôle (envoi des commandes et réponses).
  • Port 20 (mode actif) ou un port dynamique choisi par le serveur (mode passif) : utilisé pour le transfert effectif des fichiers.

Commandes FTP

FTP fonctionne grâce à des commandes textuelles normalisées. Quelques exemples :

  • USER : envoi du nom d'utilisateur.
  • PASS : envoi du mot de passe.
  • LIST : liste des fichiers du répertoire courant.
  • RETR : télécharger un fichier depuis le serveur.
  • STOR : envoyer (uploader) un fichier vers le serveur.

Les clients FTP graphiques ou en ligne de commande traduisent souvent ces instructions en commandes plus simples :

  • get fichier.txt (équivaut à RETR)
  • put fichier.txt (équivaut à STOR)

Authentification

  • Classique : avec nom d'utilisateur et mot de passe.
  • Anonyme : certains serveurs permettent un accès public via un compte “anonymous”.

Sécurité

Le protocole FTP classique n'est pas sécurisé :

  • Les données (y compris identifiants et mots de passe) transitent en texte clair, exposant aux interceptions.

Solutions :

  • FTPS : extension de FTP qui ajoute une couche de chiffrement via SSL/TLS.
  • SFTP (SSH File Transfer Protocol) : protocole indépendant, basé sur SSH, offrant une sécurité complète (chiffrement, intégrité, authentification).

Modes de fonctionnement

Mode actif :

  • Le client ouvre un port de données (>1024, appelé high port).
  • Le serveur initie la connexion vers ce port du client.
  • ⚠️ Problème : souvent bloqué par les pare-feu côté client, car cela ressemble à une connexion entrante non sollicitée.

Mode passif :

  • Le serveur ouvre un port de données dynamique.
  • Le client initie la connexion vers ce port.
  • ✅ Ce mode contourne les limitations des pare-feu modernes et est devenu la norme.

ftp-active-passive.png

Source image

Utilisations courantes

  • Gestion de sites web (téléversement de fichiers sur un serveur).
  • Distribution de logiciels et mises à jour.
  • Sauvegarde de fichiers.
  • Collaboration et partage de données à distance.

SFTP (SSH File Transfer Protocol)

Le SFTP (SSH File Transfer Protocol ou Secure File Transfer Protocol) est un protocole sécurisé conçu pour transférer des fichiers sur un réseau. Contrairement à FTP ou FTPS, SFTP ne fonctionne pas comme une extension de FTP, mais comme une fonctionnalité native de SSH (Secure Shell). Toutes les données (fichiers et commandes) sont échangées dans une session chiffrée, garantissant confidentialité et intégrité.

Port utilisé

  • Port par défaut : 22, identique à SSH.
  • Il est possible de configurer un autre port, par exemple pour réduire l'exposition aux scans automatisés de ports.

Fonctions de gestion des fichiers

SFTP ne se limite pas au transfert : il offre un ensemble complet d'opérations de gestion de fichiers à distance, telles que :

  • Lister le contenu des répertoires.
  • Télécharger et téléverser des fichiers.
  • Supprimer, renommer ou déplacer des fichiers/répertoires.
  • Modifier les permissions et propriétaires des fichiers.

Authentification

SFTP hérite des mécanismes d'authentification de SSH :

  • Mot de passe
  • Paire de clés publique/privée (recommandée)
  • Certificats
  • Agents d'authentification (par ex. ssh-agent)

L'authentification par clé publique est la méthode la plus robuste, car elle supprime les risques liés aux mots de passe interceptés ou aux attaques par force brute.

Sécurité

SFTP assure la sécurité des transferts grâce à la couche de chiffrement de SSH :

  • Chiffrement symétrique (ex. AES) pour protéger la confidentialité des fichiers.
  • Hachage et mécanismes de contrôle d'intégrité (MAC - Message Authentication Codes) pour garantir que les données n'ont pas été modifiées.
  • Authentification forte grâce aux clés asymétriques.

sftp.png

Source image

Avantages par rapport à FTP/FTPS

Un seul port (22) au lieu de multiples ports (21/20 pour FTP, 990 + data ports pour FTPS).

Sécurité native : tout le trafic (fichiers et commandes) est chiffré.

Authentification robuste avec paires de clés SSH, au lieu du simple mot de passe souvent utilisé avec FTP/FTPS.

Compatibilité : tout client SSH peut utiliser SFTP, ce qui simplifie l'intégration.

Vocabulaire

Cryptologie : Science globale du secret, regroupant à la fois la cryptographie (protection des messages) et la cryptanalyse (attaque des systèmes de chiffrement).

Cryptographie : Discipline de la cryptologie qui conçoit des méthodes pour protéger des messages contre toute lecture non autorisée.

Chiffrement : Procédé de cryptographie qui rend un message illisible à toute personne ne possédant pas la clé appropriée.

Chiffrer :Action d'appliquer un algorithme de chiffrement à un message clair.

Déchiffrer : Action de retrouver le texte clair à partir d'un message chiffré, avec la clé de déchiffrement.

Décrypter : Action de retrouver le texte clair sans posséder la clé, par analyse ou attaque cryptographique (ex. cassage de mot de passe, brute force).

Crypter / Cryptage : Terme incorrect en français. Le terme correct est chiffrer. "Crypter" n'existe pas dans le vocabulaire technique de la cryptographie.

Encrypter / Déencrypter : Anglicismes issus de encrypt/decrypt. En français technique, on parle de chiffrer/déchiffrer.

Chiffrage : Désigne l'évaluation d'un coût (ex. chiffrage d'un devis).

Coder / Encoder / Décoder : Ces termes renvoient à la représentation ou la transformation des données (compression, format multimédia, encodage Base64, etc.). Contrairement au chiffrement, ils ne garantissent pas la sécurité.

Source