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.
- Mise en œuvre simple : une seule clé partagée suffit pour chiffrer et déchiffrer.
- 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 : il faudrait une clé différente pour chaque paire d'interlocuteurs (pour 100 personnes, cela représente déjà 4 950 clés).
Sources :
- ANSSI - Crypto : le webdoc, chapitre II « Crypto sensu » (cryptographie symétrique et asymétrique)
- CNIL - Sécurité : Chiffrement, hachage, signature
Exemples d'algorithmes symétriques
- DES (Data Encryption Standard) : ancien standard des années 1970, aujourd'hui obsolète. Sa clé de 56 bits est trop courte : elle peut être retrouvée en essayant toutes les possibilités (attaque par force brute).
- 3DES (Triple DES) : applique DES trois fois de suite pour renforcer la sécurité. Il est lui aussi obsolète et ne doit plus être utilisé pour protéger de nouvelles données depuis 2024.
- AES (Advanced Encryption Standard) : standard moderne (depuis 2001), largement utilisé (HTTPS, VPN, SSH, disques chiffrés, etc.), avec des clés de 128, 192 ou 256 bits.
- ChaCha20 : alternative moderne à AES, généralement associée à Poly1305, qui vérifie l'intégrité des données (on parle de ChaCha20-Poly1305). Elle est utilisée notamment dans TLS 1.3 (HTTPS) et dans SSH. Elle est particulièrement rapide sur les appareils dépourvus d'accélération matérielle pour AES (certains smartphones, objets connectés).
Sources :
- NIST - FIPS 46-3 : Data Encryption Standard (DES), norme retirée en 2005
- EFF - EFF DES Cracker Machine Brings Honesty to Crypto Debate (clé DES de 56 bits retrouvée par force brute en 56 heures, 1998)
- NIST - NIST to Withdraw Special Publication 800-67 Revision 2 (3DES interdit pour chiffrer après le 31 décembre 2023, toléré uniquement pour déchiffrer d'anciennes données)
- NIST - FIPS 197 : Advanced Encryption Standard (AES), publié en novembre 2001
- IETF - RFC 8439 : ChaCha20 and Poly1305 for IETF Protocols (environ trois fois plus rapide qu'AES sans accélération matérielle)
- IANA - Transport Layer Security (TLS) Parameters (suite TLS_CHACHA20_POLY1305_SHA256 de TLS 1.3)
- OpenBSD manual pages - ssh_config(5) : Ciphers (chacha20-poly1305@openssh.com et AES dans OpenSSH)
- ANSSI - Règles et recommandations concernant le choix et le dimensionnement des mécanismes cryptographiques (v3.00, 2026)

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 : elle peut être partagée librement. Elle sert à chiffrer des données destinées au propriétaire de la paire, ou à vérifier ses signatures.
- Clé privée : elle doit rester confidentielle. Elle sert à déchiffrer les données chiffrées avec la clé publique correspondante, ou à signer.
L'idée fondamentale est double :
- Un message chiffré avec une clé publique ne peut être déchiffré qu'avec la clé privée correspondante.
- Il est pratiquement impossible de retrouver la clé privée à partir de la clé publique.
Cela é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, ce qui simplifie 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). En pratique, on l'utilise donc surtout pour échanger des clés ou pour signer, puis on bascule vers un chiffrement symétrique. On parle alors de chiffrement hybride.
- Il faut pouvoir s'assurer qu'une clé publique appartient bien à la bonne personne. Sinon, un attaquant peut présenter sa propre clé publique et intercepter les échanges : c'est l'attaque de l'homme du milieu (man-in-the-middle).
- Sur le web, cette vérification est assurée par une infrastructure de gestion de clés (PKI - Public Key Infrastructure).
- SSH utilise un mécanisme plus simple, présenté plus loin.
Sources :
- ANSSI - Crypto : le webdoc, chapitre II « Crypto sensu » (clés publique et privée, certificats)
- W. Diffie et M. Hellman - New Directions in Cryptography (IEEE Transactions on Information Theory, 1976 : article fondateur de la cryptographie à clé publique)
- NIST - Glossary : man-in-the-middle attack (MitM)
- IETF - RFC 5280 : Internet X.509 Public Key Infrastructure Certificate and CRL Profile (PKI du web)

Exemples d'algorithmes asymétriques
- RSA : le plus connu, utilisable pour le chiffrement et la signature. Il nécessite des clés longues (au moins 2 048 bits, et plutôt 3 072 bits).
- Algorithmes à courbes elliptiques : ECDSA et Ed25519 pour la signature, X25519 pour l'échange de clés. Ils offrent un niveau de sécurité comparable à RSA avec des clés beaucoup plus courtes.
- Diffie-Hellman : dédié à l'échange de clés (voir plus bas).
Sources :
- ANSSI - Règles et recommandations concernant le choix et le dimensionnement des mécanismes cryptographiques (v3.00, 2026 : module RSA d'au moins 2 048 bits, 3 072 bits recommandés et exigés à partir de 2031)
- NIST - SP 800-57 Part 1 Rev. 5 : Recommendation for Key Management (équivalences de sécurité entre RSA et courbes elliptiques)
- NIST - FIPS 186-5 : Digital Signature Standard (RSA, ECDSA, EdDSA)
- IETF - RFC 8032 : Edwards-Curve Digital Signature Algorithm (EdDSA, dont Ed25519)
- IETF - RFC 7748 : Elliptic Curves for Security (X25519)
Exemples d'utilisation
- SSH : utilise la cryptographie asymétrique pour authentifier le serveur (et souvent le client) et pour établir une clé de session commune. Il bascule ensuite vers un chiffrement symétrique plus rapide pour la communication.
- HTTPS (TLS) : 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.
- SSL est l'ancien nom de ce protocole. Toutes ses versions sont aujourd'hui obsolètes, tout comme TLS 1.0 et 1.1.
- Seuls TLS 1.2 et TLS 1.3 sont encore recommandés.
- Signatures numériques : permettent de valider l'intégrité et l'origine d'un document ou d'un message.
Sources :
- IETF - RFC 4251 : The Secure Shell (SSH) Protocol Architecture
- IETF - RFC 9846 : The Transport Layer Security (TLS) Protocol Version 1.3 (juillet 2026, remplace la RFC 8446)
- IETF - RFC 6176 : Prohibiting Secure Sockets Layer (SSL) Version 2.0
- IETF - RFC 7568 : Deprecating Secure Sockets Layer Version 3.0
- IETF - RFC 8996 : Deprecating TLS 1.0 and TLS 1.1
- IETF - RFC 9325 : Recommendations for Secure Use of TLS and DTLS (BCP 195 : seuls TLS 1.2 et TLS 1.3 restent recommandés)
- IETF - RFC 9852 : New Protocols Using TLS Must Require TLS 1.3 (juillet 2026 : les nouveaux protocoles doivent exiger TLS 1.3)

Chiffrement vs Signature
Ces deux mécanismes reposent sur une paire de clés publique/privée. Ils l'utilisent 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.
💡 En pratique, la cryptographie asymétrique étant lente, on ne chiffre pas tout le message avec la clé publique :
- L'expéditeur chiffre le message avec une clé symétrique générée au hasard.
- Il chiffre uniquement cette clé avec la clé publique du destinataire.
C'est le principe du chiffrement hybride.
Sources :
- IETF - RFC 9580 : OpenPGP, section 2.1 « Confidentiality via Encryption » (clé de session aléatoire chiffrée avec la clé publique du destinataire)
- CNIL - Sécurité : Chiffrement, hachage, signature

✍️ 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 calcule une empreinte du message avec une fonction de hachage. Cette empreinte est un résumé de taille fixe du message.
- Il génère la signature à partir de cette empreinte, avec sa clé privée.
- Le destinataire recalcule l'empreinte du message reçu et vérifie la signature avec la clé publique de l'expéditeur. Si le message a été modifié, la vérification échoue.
- Garantit :
- Authenticité : le message vient bien de l'expéditeur.
- Intégrité : le contenu n'a pas été modifié.
- Non-répudiation : l'expéditeur ne peut pas nier avoir signé le message.
⚠️ Une signature ne rend pas le message secret : n'importe qui peut le lire. Pour obtenir à la fois la confidentialité et l'authenticité, on combine chiffrement et signature.
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é.
Sources :
- IETF - RFC 9580 : OpenPGP, section 2.2 « Authentication via Digital Signature » (empreinte du message signée avec la clé privée)
- NIST - FIPS 186-5 : Digital Signature Standard (authenticité, intégrité et non-répudiation)
- CNIL - Sécurité : Chiffrement, hachage, signature

Echange de clés Diffie-Hellman
L'échange de clés Diffie-Hellman (DH) est un protocole cryptographique qui permet à deux parties de calculer un secret commun sans que ce secret ne soit jamais transmis sur le réseau.
Ce secret commun sert ensuite à fabriquer les clés d'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). Le protocole reste donc sûr même si un attaquant observe tous les échanges publics.
Etapes du protocole
- Paramètres publics
- Un très grand nombre premier
p(plusieurs centaines de chiffres) et une baseg(appelée générateur) sont choisis et partagés publiquement.
- Un très grand nombre premier
- Génération des clés privées et publiques
- Alice choisit une clé privée
aet calcule sa clé publique :A = g^a mod p. - Bob choisit une clé privée
bet calcule sa clé publique :B = g^b mod p.
- Alice choisit une clé privée
- Echange des clés publiques
- Alice envoie
Aà Bob. - Bob envoie
Bà Alice.- Même si un attaquant intercepte
AetB, il ne peut pas retrouveraouben un temps raisonnable.
- Même si un attaquant intercepte
- Alice envoie
- Calcul du secret commun
- Alice calcule :
S = B^a mod p. - Bob calcule :
S = A^b mod p. - Grâce aux propriétés des puissances modulaires,
(g^b)^a = (g^a)^b = g^(a×b) mod p. Alice et Bob obtiennent donc le même secretS, sans jamais le transmettre ni révéler leurs clés privées. - En pratique,
Sn'est pas utilisé tel quel : les deux parties en dérivent les clés de session.
- Alice calcule :
Sources :
- W. Diffie et M. Hellman - New Directions in Cryptography (IEEE Transactions on Information Theory, 1976)
- ANSSI - Règles et recommandations concernant le choix et le dimensionnement des mécanismes cryptographiques (v3.00, 2026 : problème du logarithme discret, taille minimale de
pde 2 048 bits) - IETF - RFC 4253 : The SSH Transport Layer Protocol, section 7.2 (dérivation des clés de session à partir du secret commun)
Exemple avec de petits nombres
En réalité, les nombres utilisés sont beaucoup plus grands.
- Paramètres publics :
p = 23etg = 5. - Alice choisit
a = 6et calculeA = 5^6 mod 23 = 8. - Bob choisit
b = 15et calculeB = 5^15 mod 23 = 19. - Alice calcule
S = 19^6 mod 23 = 2. - Bob calcule
S = 8^15 mod 23 = 2. - Tous deux obtiennent
S = 2.
Un observateur connaît p, g, A et B. Pour calculer S, il devrait retrouver a ou b, ce qui est impossible en pratique avec de très grands nombres.

Exemple visuel simplifié
- Imaginons que les paramètres publics correspondent à une couleur de peinture commune, connue de tous.
- Alice choisit une couleur secrète, la mélange à la couleur commune et envoie le mélange à Bob.
- Bob fait de même avec sa propre couleur secrète.
- Chacun ajoute ensuite sa couleur secrète au mélange reçu de l'autre : tous deux obtiennent la même couleur finale.
- Un observateur voit passer les mélanges, mais ne peut pas en extraire les couleurs secrètes : mélanger des peintures est facile, les séparer est pratiquement impossible. C'est exactement la propriété du calcul
g^a mod p.

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.
- Si de nouvelles valeurs
aetbsont tirées à chaque connexion (on parle de DH éphémère), on obtient la confidentialité persistante (forward secrecy).- Même si la clé privée à long terme d'un serveur est volée plus tard, les communications passées restent indéchiffrables.
- TLS 1.3 impose ce mécanisme.
Sources :
- NIST - Glossary : perfect forward secrecy
- ANSSI - Règles et recommandations concernant le choix et le dimensionnement des mécanismes cryptographiques (v3.00, 2026 : propriété de confidentialité persistante)
- IETF - RFC 9846 : TLS 1.3, section 1.3 (suppression des échanges RSA et DH statiques : tous les échanges à clé publique assurent la confidentialité persistante)
Limitation
- Diffie-Hellman n'assure pas l'authentification.
- Exemple : un attaquant peut s'interposer entre Alice et Bob et réaliser un échange séparé avec chacun d'eux, en se faisant passer pour l'autre (attaque man-in-the-middle).
- C'est pourquoi TLS (HTTPS) et SSH combinent DH avec une authentification.
- Le serveur signe les éléments de l'échange avec sa clé privée.
- Le client peut ainsi vérifier qu'il communique bien avec le bon serveur (grâce au certificat pour TLS, ou à la clé d'hôte pour SSH).
Sources :
- IETF - RFC 4253 : The SSH Transport Layer Protocol, section 8 (le serveur signe le résumé de l'échange avec sa clé d'hôte privée)
- IETF - RFC 9846 : TLS 1.3 (message CertificateVerify : le serveur signe l'échange avec la clé privée de son certificat)
Variantes actuelles
- La version présentée ici, avec des calculs modulo un nombre premier
p, est la version historique. - Aujourd'hui, on utilise surtout sa variante sur courbes elliptiques (ECDH, par exemple X25519). Le principe est identique, mais elle est plus rapide et utilise des clés plus courtes.
- De futurs ordinateurs quantiques pourraient casser ces calculs. Pour s'y préparer, des échanges de clés « hybrides » apparaissent.
- Depuis OpenSSH 10.0 (avril 2025), l'échange par défaut combine X25519 et ML-KEM, un algorithme dit « post-quantique » standardisé par le NIST.
- La version historique de DH y est désactivée par défaut côté serveur.
Sources :
- IETF - RFC 7748 : Elliptic Curves for Security (X25519 pour l'ECDH)
- IETF - RFC 8731 : SSH Key Exchange Method Using Curve25519 and Curve448
- IETF - RFC 10015 : Deprecating Obsolete Key Exchange Methods in TLS 1.2 and DTLS 1.2 (juillet 2026 : le DH classique est abandonné dans TLS 1.2)
- NIST - FIPS 203 : Module-Lattice-Based Key-Encapsulation Mechanism Standard (ML-KEM, août 2024)
- OpenSSH - Release notes OpenSSH 10.0 (9 avril 2025 : mlkem768x25519-sha256 par défaut, DH classique désactivé dans sshd)
- OpenSSH - Post-Quantum Cryptography
- IETF - RFC 10042 : Post-Quantum/Traditional Hybrid Key Exchange with ML-KEM for Use in SSH (août 2026)
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).
La version utilisée aujourd'hui est SSH-2, normalisée par l'IETF en 2006. L'ancienne version SSH-1, qui présente des failles de sécurité, n'est plus prise en charge par les logiciels actuels. L'implémentation la plus répandue du protocole est OpenSSH, intégrée à la plupart des systèmes (Linux, macOS, Windows).
Par défaut, le serveur SSH écoute sur le port TCP 22, attribué officiellement à SSH par l'IANA.
Sources :
- IETF - RFC 4251 : The Secure Shell (SSH) Protocol Architecture (janvier 2006)
- IETF - RFC 4253 : The SSH Transport Layer Protocol, section 4.1 (port 22 enregistré auprès de l'IANA)
- IANA - Service Name and Transport Protocol Port Number Registry (ssh)
- ANSSI - Usage sécurisé d'(Open)SSH (2015, R1 : seule la version 2 du protocole doit être autorisée)
- OpenSSH - Release notes OpenSSH 7.6 (2017 : suppression du protocole SSH-1)
- OpenSSH - Site officiel
- Microsoft Learn - Vue d'ensemble d'OpenSSH pour Windows
- Apple Support - Autoriser un ordinateur distant à accéder à votre Mac (SSH et SFTP)

Sécurité
- Confidentialité : toutes les données (commandes, fichiers, mots de passe, etc.) sont chiffrées pendant le transit.
- Intégrité : un code de contrôle ajouté à chaque paquet permet de détecter toute modification en cours de route.
- Authenticité : le serveur prouve son identité grâce à sa clé publique (appelée clé d'hôte), puis le client s'authentifie à son tour (mot de passe, clé publique, etc.).
SSH combine :
- La cryptographie asymétrique pour établir la connexion et authentifier les parties.
- La cryptographie symétrique pour chiffrer rapidement le reste de la session.
Sources :
- IETF - RFC 4251 : The Secure Shell (SSH) Protocol Architecture
- IETF - RFC 4253 : The SSH Transport Layer Protocol, section 6.4 (code d'authentification de message ajouté à chaque paquet)
Authentification
SSH supporte plusieurs méthodes d'authentification du client :
- Mot de passe : simple mais moins sécurisé.
- Clé publique / clé privée : méthode recommandée.
- Autres méthodes : certificats SSH, clés de sécurité matérielles (FIDO), authentification à deux facteurs.
Ces méthodes sont détaillées dans la section suivante.
Sources :
- IETF - RFC 4252 : The Secure Shell (SSH) Authentication Protocol
- IETF - RFC 4256 : Generic Message Exchange Authentication for SSH (méthode « keyboard-interactive », utilisée notamment pour la double authentification)
- OpenBSD manual pages - ssh-keygen(1), section CERTIFICATES (certificats SSH)
- OpenSSH - Release notes OpenSSH 8.2 (2020 : prise en charge des clés matérielles FIDO/U2F)
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 ouvrir de session interactive.
- Transfert sécurisé de fichiers :
- SFTP (SSH File Transfer Protocol), présenté plus loin.
- SCP (Secure Copy) : la commande
scpexiste toujours, mais depuis OpenSSH 9.0 elle utilise en interne le protocole SFTP. L'ancien protocole SCP est considéré comme dépassé.
- 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).
- Développement et DevOps : accès aux dépôts Git (GitHub, GitLab, etc.), déploiement automatisé, CI/CD, gestion des infrastructures cloud.
Sources :
- OpenBSD manual pages - ssh(1) (shell interactif, commande distante, redirection de ports avec
-L) - OpenBSD manual pages - scp(1) (SFTP utilisé par défaut depuis OpenSSH 9.0)
- OpenSSH - Release notes OpenSSH 9.0 (2022 : scp bascule sur le protocole SFTP)
- OpenSSH - Release notes OpenSSH 8.0 (2019 : « The scp protocol is outdated, inflexible and not readily fixed »)
- IETF - RFC 4254 : The SSH Connection Protocol, section 7 (redirection de ports TCP/IP)
- GitHub Docs - À propos de SSH
- GitLab Docs - Use SSH keys with GitLab
Authentification SSH
L'authentification SSH est le processus par lequel un client prouve son identité à un serveur distant. Elle a lieu après l'établissement du canal chiffré (voir la section suivante) : toutes les informations d'authentification circulent donc déjà de façon chiffrée.
Deux méthodes principales existent.
Authentification par mot de passe
- Le client envoie son nom d'utilisateur et son mot de passe au serveur, à travers le canal chiffré.
- Le serveur les vérifie auprès de son système de comptes. Le mot de passe n'y est normalement pas stocké en clair, mais sous forme d'empreinte (hash).
- Simple à mettre en place.
- Moins sécurisée :
- Vulnérable aux attaques par force brute (essais automatisés de nombreux mots de passe), surtout si le mot de passe est faible.
- Si l'utilisateur accepte sans vérification la clé d'un faux serveur (voir « Chiffrement de la communication avec SSH »), il transmet son mot de passe directement à l'attaquant. Le chiffrement protège le trajet, pas la destination.
Sources :
- IETF - RFC 4252 : The SSH Authentication Protocol, section 8 (mot de passe transmis en clair dans un paquet chiffré par la couche transport)
- Linux man-pages - shadow(5) (stockage des mots de passe sous forme hachée)
- ANSSI - Usage sécurisé d'(Open)SSH (2015, R17 : l'authentification par mot de passe est à éviter)
Authentification par clé publique (méthode recommandée)
- Basée sur une paire de clés asymétriques :
- Une clé privée, conservée par le client et idéalement protégée par une phrase secrète (passphrase).
- Une clé publique, copiée sur le serveur dans le fichier
~/.ssh/authorized_keysdu compte utilisateur.
- Avantages :
- Plus sûre que les mots de passe : la clé privée ne quitte jamais l'ordinateur du client, donc même un faux serveur ne peut pas la récupérer.
- Permet de se connecter sans retaper de mot de passe à chaque fois : l'agent SSH garde la clé déverrouillée pendant la session de travail.
- Compatible avec des mécanismes avancés (agent SSH, certificats SSH, clés de sécurité matérielles).
- Bonne pratique : une fois l'authentification par clé en place, désactiver l'authentification par mot de passe sur le serveur.
Sources :
- OpenBSD manual pages - ssh-keygen(1) (génération des clés et phrase secrète)
- OpenBSD manual pages - sshd(8), section AUTHORIZED_KEYS FILE FORMAT
- OpenBSD manual pages - ssh-agent(1)
- IETF - RFC 9987 : Secure Shell (SSH) Agent Protocol (mai 2026)
- OpenBSD manual pages - sshd_config(5) : PasswordAuthentication
- ANSSI - Usage sécurisé d'(Open)SSH (2015, R17 : privilégier l'authentification par clé)
Processus détaillé (clé publique)
Au moment de l'authentification, le canal chiffré est déjà établi. Le client et le serveur partagent un identifiant de session, une valeur unique pour cette connexion, issue de l'échange de clés.
- Proposition de la clé
- Le client indique le nom d'utilisateur et la clé publique qu'il souhaite utiliser.
- Le serveur vérifie si cette clé publique figure dans le fichier
~/.ssh/authorized_keysde ce compte.
- Signature
- Le client signe avec sa clé privée un ensemble de données qui contient l'identifiant de session.
- Comme cet identifiant est différent à chaque connexion, il joue le rôle de défi : la signature n'est valable que pour cette connexion-là.
- Vérification
- Le serveur vérifie la signature avec la clé publique enregistrée.
- Si elle est valide, le client a prouvé qu'il possède la clé privée correspondante, sans jamais l'avoir envoyée.
- Ouverture de la session
- L'utilisateur est authentifié. Le client ouvre alors un canal et demande un shell, une commande ou un transfert de fichiers.
- Les échanges restent chiffrés avec les clés issues de l'échange de clés, qui peuvent être renouvelées en cours de connexion.
Comme la signature dépend de l'identifiant de session, un serveur malveillant qui la recevrait ne pourrait pas la réutiliser pour se connecter ailleurs à la place de l'utilisateur.
Sources :
- IETF - RFC 4252 : The SSH Authentication Protocol, section 7 (la signature porte sur des données incluant l'identifiant de session)
- IETF - RFC 4253 : The SSH Transport Layer Protocol, section 7.2 (identifiant de session) et section 9 (renouvellement des clés)
- IETF - RFC 4254 : The SSH Connection Protocol (canaux, shell, commandes, sous-systèmes)
- OpenBSD manual pages - sshd_config(5) : RekeyLimit

Source image : Générée avec Claude Opus 5.5 (High)
Chiffrement de la communication avec SSH
SSH garantit la confidentialité, l'intégrité et l'authenticité des échanges grâce à un mécanisme hybride. Il combine la cryptographie asymétrique (pour l'authentification et l'échange initial) et la cryptographie symétrique (pour la session).
Etapes du chiffrement SSH
- Clés du serveur (clés d'hôte)
- Lors de son installation, le serveur SSH génère une ou plusieurs paires de clés (sous Linux, dans
/etc/ssh/) :- Une clé privée, qui ne quitte jamais le serveur.
- Une clé publique, transmise aux clients à chaque connexion.
- Lors de son installation, le serveur SSH génère une ou plusieurs paires de clés (sous Linux, dans
- Négociation des algorithmes
- Le client et le serveur échangent la liste des algorithmes qu'ils connaissent. Ils choisissent ensuite, pour chaque catégorie, le premier de la liste du client que le serveur prend aussi en charge :
- la méthode d'échange de clés
- le type de clé d'hôte
- l'algorithme de chiffrement symétrique
- l'algorithme d'intégrité, etc.
- Le client et le serveur échangent la liste des algorithmes qu'ils connaissent. Ils choisissent ensuite, pour chaque catégorie, le premier de la liste du client que le serveur prend aussi en charge :
- Echange de clés et authentification du serveur (une seule et même étape)
- Le client et le serveur réalisent un échange de clés de type Diffie-Hellman. Aujourd'hui, OpenSSH utilise par défaut un échange hybride résistant aux ordinateurs quantiques (voir la section Diffie-Hellman).
- Au cours de cet échange, le serveur envoie sa clé publique d'hôte. Il signe aussi avec sa clé privée un résumé de l'échange.
- Le client vérifie cette signature, puis vérifie que la clé publique appartient bien au serveur attendu :
- Première connexion : le client ne connaît pas encore cette clé. Il affiche son empreinte (fingerprint) et demande à l'utilisateur s'il lui fait confiance. Idéalement, l'utilisateur compare cette empreinte avec une valeur obtenue par un autre moyen (administrateur, documentation). Si l'utilisateur accepte, la clé est enregistrée dans
~/.ssh/known_hosts. - Connexions suivantes : le client compare automatiquement la clé reçue avec celle enregistrée. Si elle a changé, SSH affiche un avertissement et refuse la connexion par défaut. Cela peut signaler une attaque man-in-the-middle, ou simplement une réinstallation du serveur.
- Première connexion : le client ne connaît pas encore cette clé. Il affiche son empreinte (fingerprint) et demande à l'utilisateur s'il lui fait confiance. Idéalement, l'utilisateur compare cette empreinte avec une valeur obtenue par un autre moyen (administrateur, documentation). Si l'utilisateur accepte, la clé est enregistrée dans
- À la fin de l'échange, le client et le serveur partagent un secret commun, qui n'a jamais été transmis sur le réseau. Ils en dérivent les clés de session : pour chaque sens de communication, une clé de chiffrement et une clé d'intégrité.
- Communication chiffrée
- À partir de ce moment, tous les échanges sont protégés, y compris l'authentification du client qui suit :
- Confidentialité : chiffrement symétrique (par exemple AES ou ChaCha20).
- Intégrité : un code d'authentification de message (MAC) est ajouté à chaque paquet, ou le chiffrement lui-même intègre ce contrôle (AES-GCM, ChaCha20-Poly1305). Toute modification d'un paquet est ainsi détectée.
- À partir de ce moment, tous les échanges sont protégés, y compris l'authentification du client qui suit :
⚠️ La protection contre l'attaque man-in-the-middle repose sur la vérification de la clé d'hôte. Accepter une clé sans la vérifier revient à faire confiance à n'importe quel serveur qui se présente.
Sources :
- IETF - RFC 4253 : The SSH Transport Layer Protocol (section 7 : négociation des algorithmes, section 7.2 : dérivation des clés, section 8 : échange Diffie-Hellman signé par la clé d'hôte)
- OpenBSD manual pages - sshd(8), section FILES (clés d'hôte
/etc/ssh/ssh_host_*_key) - OpenBSD manual pages - ssh(1), section VERIFYING HOST KEYS (empreintes et fichier
known_hosts) - OpenBSD manual pages - ssh_config(5) : StrictHostKeyChecking (par défaut, refus de connexion si la clé d'hôte a changé)
- OpenBSD manual pages - ssh_config(5) : KexAlgorithms et Ciphers (algorithmes proposés par défaut)
- IETF - RFC 5647 : AES Galois Counter Mode for the SSH Transport Layer Protocol (chiffrement et intégrité en un seul algorithme)
- ANSSI - Usage sécurisé d'(Open)SSH (2015, R6 : s'assurer de la légitimité du serveur contacté)

Source image : Générée avec Claude Opus 5.5 (High)
Ordre général dans SSH
- Ouverture de la connexion
- Le client se connecte au port TCP 22 du serveur.
- Les deux parties annoncent leur version du protocole (par exemple
SSH-2.0-OpenSSH_10.0).
- Négociation des algorithmes
- Le client et le serveur s'accordent sur les algorithmes d'échange de clés, de clé d'hôte, de chiffrement et d'intégrité.
- Echange de clés et authentification du serveur
- Les deux parties exécutent l'échange de clés et obtiennent les clés de session.
- Pendant cet échange, le serveur prouve son identité en signant avec sa clé d'hôte. Le client vérifie cette clé grâce à
~/.ssh/known_hosts, ce qui empêche les attaques de type man-in-the-middle. - À partir de ce moment, tous les échanges sont chiffrés.
- Authentification du client
- Le client s'authentifie dans le canal chiffré : par mot de passe, par clé publique ou par un autre mécanisme.
- Comme tout est déjà chiffré, même un mot de passe ne circule jamais en clair sur le réseau.
- Ouverture de la session
- Le client utilise le service demandé : shell, commande à distance, transfert de fichiers ou tunnel.
Ces étapes correspondent aux trois sous-protocoles de SSH :
- le protocole de transport (étapes 1 à 3)
- le protocole d'authentification (étape 4)
- le protocole de connexion (étape 5)
Sources :
- IETF - RFC 4251 : The Secure Shell (SSH) Protocol Architecture, section 1 (les trois sous-protocoles)
- IETF - RFC 4253 : The SSH Transport Layer Protocol, section 4.2 (annonce de la version
SSH-2.0-...) - IETF - RFC 4252 : The Secure Shell (SSH) Authentication Protocol
- IETF - RFC 4254 : The Secure Shell (SSH) Connection Protocol
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. C'est l'un des plus anciens protocoles d'Internet : sa version actuelle est normalisée depuis 1985 (RFC 959).
Particularité de FTP : il utilise deux connexions TCP distinctes :
- La connexion de contrôle, ouverte pendant toute la session, qui transporte les commandes et les réponses.
- La connexion de données, ouverte pour chaque transfert (fichier ou liste de répertoire).
Ports utilisés
- Port 21 : connexion de contrôle (envoi des commandes et réponses).
- Connexion de données, selon le mode utilisé (voir plus bas) :
- En mode actif, le serveur se connecte depuis son port 20 vers un port choisi par le client.
- En mode passif, le client se connecte à un port choisi dynamiquement par le serveur.
Sources :
- IETF - RFC 959 : File Transfer Protocol (FTP) (octobre 1985)
- IANA - Service Name and Transport Protocol Port Number Registry (ftp : port 21, ftp-data : port 20, ftps : port 990)
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.PASV: demander le passage en mode passif.
Les clients FTP en ligne de commande proposent des commandes plus simples, qu'ils traduisent en commandes du protocole. Les clients graphiques font de même à partir d'un glisser-déposer. Par exemple :
get fichier.txt(équivaut àRETR)put fichier.txt(équivaut àSTOR)
Sources :
- IETF - RFC 959 : File Transfer Protocol, section 4.1 (commandes FTP)
- OpenBSD manual pages - ftp(1) (commandes
getetputd'un client en ligne de commande)
Authentification
- Classique : avec nom d'utilisateur et mot de passe.
- Anonyme : certains serveurs permettent un accès public via un compte "anonymous".
Sources :
- IETF - RFC 959 : File Transfer Protocol (commandes USER et PASS)
- IETF - RFC 1635 : How to Use Anonymous FTP
Sécurité
Le protocole FTP classique n'est pas sécurisé : les commandes, les données et même les identifiants et mots de passe transitent en texte clair. Ils peuvent être interceptés, et les fichiers peuvent être modifiés en cours de route sans que personne ne s'en aperçoive.
Solutions :
- FTPS (FTP over TLS) : extension de FTP qui ajoute le chiffrement TLS. Elle existe en deux variantes :
- FTPS explicite (la variante normalisée) : la connexion commence sur le port 21, puis le client demande le chiffrement avec la commande
AUTH TLS. - FTPS implicite (ancienne variante, jamais normalisée et considérée comme obsolète) : la connexion est chiffrée dès le départ, sur le port 990.
- FTPS explicite (la variante normalisée) : la connexion commence sur le port 21, puis le client demande le chiffrement avec la commande
- SFTP (SSH File Transfer Protocol) : un protocole différent, qui fonctionne à l'intérieur d'une connexion SSH (voir section suivante).
Sources :
- IETF - RFC 2577 : FTP Security Considerations (mots de passe et données transmis en clair)
- Mozilla Security Blog - Stopping FTP support in Firefox 90 (données en clair pouvant être volées, usurpées ou modifiées)
- IETF - RFC 4217 : Securing FTP with TLS (FTPS explicite, commande
AUTH TLS) - IETF - draft-murray-auth-ftp-ssl-07, section 16 (2001 : l'approche « implicite » sur le port 990 n'est plus recommandée par l'IETF)
- WinSCP documentation - FTPS (modes explicite et implicite)
Note
Malgré leurs noms proches, FTPS et SFTP sont deux protocoles différents et incompatibles entre eux.
Modes de fonctionnement
Mode actif :
- Le client ouvre un port de données (numéro supérieur à 1023) et communique ce numéro au serveur (commande
PORT). - Le serveur initie la connexion de données vers ce port, depuis son port 20.
- ⚠️ Problème : cette connexion est souvent bloquée par le pare-feu ou la box Internet du client, car elle ressemble à une connexion entrante non sollicitée.
Mode passif :
- Le client demande le mode passif (commande
PASV). - Le serveur ouvre un port de données dynamique et communique son numéro au client.
- Le client initie la connexion vers ce port.
- ✅ Toutes les connexions partent du client : ce mode fonctionne à travers les pare-feu et les box Internet côté client. C'est le mode utilisé par défaut par la plupart des clients actuels.
- En contrepartie, l'administrateur du serveur doit ouvrir une plage de ports dans son pare-feu.
Sources :
- IETF - RFC 959 : File Transfer Protocol (commandes PORT et PASV)
- IETF - RFC 1579 : Firewall-Friendly FTP (1994 : le mode actif est bloqué par les pare-feu, le mode passif est recommandé par défaut)
- FileZilla Wiki - Network Configuration (modes actif et passif, plage de ports côté serveur)
- curl - Manuel : option
--ftp-pasv(mode passif par défaut)

Utilisations aujourd'hui
FTP a longtemps servi à publier des sites web, distribuer des logiciels et partager des fichiers. Il est aujourd'hui en net recul, en raison de son absence de sécurité :
- Les navigateurs Chrome et Firefox ont retiré sa prise en charge en 2021.
- Il est largement remplacé par SFTP, HTTPS et les services de stockage en ligne.
On le rencontre encore dans des systèmes anciens et sur certains équipements (par exemple des imprimantes multifonctions qui déposent des numérisations sur un serveur).
Sources :
- Mozilla Security Blog - Stopping FTP support in Firefox 90 (juillet 2021)
- Chrome for Developers - Deprecations and removals in Chrome 95 (suppression de FTP, octobre 2021)
- ANSSI - Usage sécurisé d'(Open)SSH (2015, R4 : SCP ou SFTP doivent remplacer les protocoles historiques comme FTP)
- Brother - Configurer un profil Numérisation vers FTP (exemple d'imprimante multifonction)
SFTP (SSH File Transfer Protocol)
Le SFTP (SSH File Transfer Protocol) est un protocole sécurisé de transfert et de gestion de fichiers, qui fonctionne à l'intérieur d'une connexion SSH. On le rencontre parfois sous le nom de « Secure File Transfer Protocol », mais ce n'est pas son nom officiel.
Contrairement à FTPS, SFTP n'est pas une extension de FTP : c'est un protocole entièrement différent, malgré la ressemblance des noms.
Toutes les données (fichiers et commandes) sont échangées dans la session chiffrée de SSH, ce qui garantit confidentialité et intégrité.
Sources :
- IETF - draft-ietf-secsh-filexfer-02 : SSH File Transfer Protocol
- OpenBSD manual pages - sftp(1) (toutes les opérations passent par un transport ssh chiffré)
Note
SFTP n'a jamais été publié sous forme de RFC. Il est décrit par des brouillons de l'IETF. Sa version 3, définie en 2001, est celle qu'implémentent OpenSSH et la plupart des logiciels : c'est devenu un standard de fait. Depuis OpenSSH 9.0, la commande scp utilise elle aussi SFTP en interne.
Sources :
Port utilisé
- Port par défaut : 22, identique à SSH, puisque SFTP passe par la connexion SSH.
- Il est possible de configurer un autre port. Cela réduit les tentatives de connexion automatisées, mais ce n'est pas une véritable mesure de sécurité : un scan de ports complet retrouve facilement le service.
Sources :
- OpenBSD manual pages - sshd_config(5) : Port
- ANSSI - Usage sécurisé d'(Open)SSH (2015, R26 : changer de port lorsque le serveur est exposé à un réseau non maîtrisé)
- NIST - SP 800-123 : Guide to General Server Security, section 2.4 (principe « Open Design » : la sécurité ne doit pas reposer sur le secret de la mise en œuvre)
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.
- Créer des répertoires.
- Modifier les permissions et propriétaires des fichiers.
Sources :
- IETF - draft-ietf-secsh-filexfer-02 (requêtes SSH_FXP_OPENDIR, READDIR, READ, WRITE, REMOVE, RENAME, MKDIR, RMDIR, SETSTAT)
- OpenBSD manual pages - sftp(1) (commandes
ls,get,put,rm,rename,mkdir,chmod,chown)
Authentification
SFTP hérite des méthodes d'authentification de SSH (voir « Authentification SSH ») :
- Mot de passe.
- Paire de clés publique/privée (recommandée), dont l'utilisation est facilitée par l'agent SSH (
ssh-agent). - Certificats SSH.
L'authentification par clé publique est la méthode la plus robuste. Si l'authentification par mot de passe est désactivée sur le serveur, il n'y a plus de mot de passe à voler ni à deviner.
Sources :
- IETF - RFC 4252 : The Secure Shell (SSH) Authentication Protocol
- OpenBSD manual pages - ssh-agent(1)
- OpenBSD manual pages - ssh-keygen(1), section CERTIFICATES
- OpenBSD manual pages - sshd_config(5) : PasswordAuthentication
Sécurité
SFTP bénéficie de toute la sécurité de la connexion SSH (voir « Chiffrement de la communication avec SSH ») :
- Chiffrement symétrique (ex. AES, ChaCha20) pour protéger la confidentialité des fichiers.
- Codes d'authentification de message (MAC) pour garantir que les données n'ont pas été modifiées.
- Authentification du serveur par sa clé d'hôte, puis du client (idéalement par clé).
Sources :
- IETF - RFC 4253 : The SSH Transport Layer Protocol
- OpenBSD manual pages - ssh_config(5) : Ciphers et MACs
En pratique
- En ligne de commande :
sftp utilisateur@serveurouvre une session interactive, avec des commandes proches de celles de FTP (ls,get,put,mkdir, etc.). La commandesftpest fournie avec OpenSSH sur Linux, macOS et Windows. - En mode graphique : des clients comme FileZilla, WinSCP (Windows) ou Cyberduck prennent en charge SFTP.
Sources :
- OpenBSD manual pages - sftp(1)
- Microsoft Learn - Vue d'ensemble d'OpenSSH pour Windows (outils
ssh,scp,sftp,ssh-agent) - Apple Support - Autoriser un ordinateur distant à accéder à votre Mac (SSH et SFTP)
- FileZilla - Site officiel (FTP, FTPS et SFTP)
- WinSCP documentation - Protocols
- Cyberduck documentation - SFTP

Avantages par rapport à FTP/FTPS
- Un seul port (22) au lieu de plusieurs : FTP et FTPS explicite utilisent le port 21 plus des ports de données, et FTPS implicite le port 990 plus des ports de données. SFTP est donc plus simple à faire passer à travers un pare-feu.
- 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.
- Déjà disponible : un serveur SSH comme OpenSSH inclut en général un serveur SFTP, et le client
sftpest fourni avec OpenSSH.
⚠️ SFTP n'est pas compatible avec FTP : il faut un client qui prend en charge SFTP (c'est le cas de la plupart des clients graphiques actuels).
Sources :
Comparaison FTP / FTPS / SFTP
| FTP | FTPS | SFTP | |
|---|---|---|---|
| Basé sur | - | FTP + TLS | SSH |
| Chiffrement | ❌ Aucun | ✅ TLS | ✅ SSH |
| Ports | 21 + ports de données | 21 + ports de données (explicite) ou 990 (implicite) | 22 uniquement |
| Nombre de connexions | 2 (contrôle + données) | 2 (contrôle + données) | 1 |
| Authentification | Mot de passe (en clair) | Mot de passe, certificat | Mot de passe, clé publique |
| Statut | Obsolète pour tout usage sur Internet | Usage résiduel | Recommandé |
Sources :
- IETF - RFC 959 : File Transfer Protocol
- IETF - RFC 2577 : FTP Security Considerations
- IETF - RFC 4217 : Securing FTP with TLS (authentification possible par certificat client)
- IANA - Service Name and Transport Protocol Port Number Registry (ftps : port 990)
- IETF - draft-ietf-secsh-filexfer-02 : SSH File Transfer Protocol
- IETF - RFC 4252 : The Secure Shell (SSH) Authentication Protocol (authentification par clé publique)
- ANSSI - Usage sécurisé d'(Open)SSH (2015, R4 : SCP ou SFTP à la place de FTP)
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 informations. Elle assure la confidentialité (chiffrement), mais aussi l'intégrité et l'authenticité (signatures numériques).
✅ Cryptanalyse : Discipline de la cryptologie qui étudie les moyens de retrouver un message chiffré sans la clé, ou de casser un système cryptographique.
✅ 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 cryptanalyse ou par une attaque (ex. force brute). Exemple : pendant la Seconde Guerre mondiale, les Alliés ont décrypté les messages d'Enigma. Votre navigateur, lui, déchiffre chaque jour les connexions HTTPS.
✅ Clé : Information secrète (ou publique, en cryptographie asymétrique) utilisée par un algorithme pour chiffrer, déchiffrer, signer ou vérifier.
✅ Clé de session : Clé symétrique temporaire, valable pour une seule connexion, utilisée pour chiffrer les échanges (par exemple dans SSH ou HTTPS).
✅ Fonction de hachage / Empreinte : Une fonction de hachage calcule, à partir de données de taille quelconque, un résumé de taille fixe appelé empreinte (hash). Il est pratiquement impossible de retrouver les données à partir de l'empreinte. Ce n'est pas un chiffrement : il n'y a ni clé, ni retour en arrière possible.
✅ Signature numérique : Valeur calculée avec une clé privée, qui permet à quiconque possède la clé publique correspondante de vérifier l'origine et l'intégrité d'un message.
⛔ Crypter / Cryptage : Termes à éviter en contexte technique. Ils figurent dans certains dictionnaires, mais l'Académie française les déconseille et les spécialistes les rejettent. Par symétrie avec décrypter (retrouver le message sans la clé), crypter voudrait dire « chiffrer sans clé », ce qui n'a pas de sens. On dit chiffrer / chiffrement.
⛔ Encrypter / Désencrypter : Anglicismes issus de encrypt/decrypt. En français technique, on parle de chiffrer/déchiffrer.
⛔ Chiffrage : Désigne avant tout l'évaluation d'un coût (ex. chiffrage d'un devis). Le dictionnaire de l'Académie française l'admet aussi au sens de chiffrement, mais en contexte technique, on emploie chiffrement.
❗ 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 aucune sécurité : n'importe qui peut décoder, sans clé.
Sources :
- Académie française - Crypter
- CNIL - Chiffrement, hachage, signature
- ANSSI - Crypto : le webdoc, chapitre I « Cryptologie : art ou science du secret ? » (cryptologie, Enigma)
- ANSSI - Crypto : le webdoc, chapitre II « Crypto sensu » (cryptographie, cryptanalyse)
- OQLF - Grand dictionnaire terminologique : déchiffrement (distinction avec décryptage, sans la clé)
- OQLF - Grand dictionnaire terminologique : chiffrement (l'emprunt « encryption » est déconseillé)
- Dictionnaire de l'Académie française, 9e édition - Chiffrage
- NIST - FIPS 180-4 : Secure Hash Standard (fonctions de hachage SHA-2)
- NIST - FIPS 186-5 : Digital Signature Standard