Analyse comparative des chiffrements SSH : choisir le chiffrement le plus rapide pour votre réseau
Analysez les chiffrements SSH en toute sécurité avec scp, ssh, dd et pv, puis choisissez AES-GCM ou ChaCha20 en fonction de votre matériel réel.
Analyse comparative des chiffrements SSH : choisir le chiffrement le plus rapide pour votre réseau
L'analyse comparative des chiffrements SSH est utile lorsque les transferts chiffrés sont plus lents que ce que le réseau devrait permettre. Le chiffrement n'est pas toujours le goulot d'étranglement, mais sur des liaisons rapides ou des petits processeurs, il peut décider si scp, sftp ou rsync -e ssh sature la connexion.
La bonne réponse dépend de votre client, serveur, fonctionnalités du processeur, build OpenSSH et chemin réseau. Testez dans votre propre environnement avant de modifier les paramètres par défaut à l'échelle du parc.
Comprendre les chiffrements SSH et leur rôle
Un chiffrement SSH est un algorithme utilisé pour chiffrer et déchiffrer les données échangées entre un client et un serveur SSH. Son objectif principal est d'assurer la confidentialité, l'intégrité et l'authenticité de la communication. Lorsque vous initiez une connexion SSH, le client et le serveur négocient un ensemble d'algorithmes (chiffrements, MAC, méthodes d'échange de clés) qu'ils supportent tous les deux, pour finalement convenir des options les plus fortes et préférées. Ce processus de négociation est essentiel pour établir un canal sécurisé.
Différents chiffrements utilisent des opérations mathématiques distinctes, entraînant des demandes de calcul variables. Certains chiffrements sont optimisés pour l'accélération matérielle, exploitant des instructions CPU spécialisées, tandis que d'autres sont conçus pour fonctionner efficacement en logiciel sur une gamme plus large de processeurs. Le choix du chiffrement impacte donc directement l'utilisation du CPU et les vitesses de transfert de données résultantes.
Principaux chiffrements SSH modernes pour la performance
Dans les environnements SSH modernes, deux familles de chiffrements à authentification intégrée se distinguent pour leur excellent équilibre entre sécurité et performance : AES-GCM et ChaCha20-Poly1305. Les deux fournissent un chiffrement authentifié avec données associées (AEAD), ce qui signifie qu'ils chiffrent les données et fournissent une vérification d'intégrité en une seule passe, ce qui est plus efficace et plus sécurisé que les anciennes approches de chiffrement puis MAC.
AES-GCM (Advanced Encryption Standard - Galois/Counter Mode)
AES-GCM est un chiffrement par blocs très populaire et largement adopté fonctionnant en mode Galois/Counter. Il offre une sécurité solide et est particulièrement rapide sur les systèmes avec support matériel pour AES. La plupart des processeurs modernes (Intel, AMD, et de plus en plus les processeurs ARM) incluent des jeux d'instructions dédiés (comme AES-NI sur les architectures x86/x64) qui accélèrent considérablement les opérations AES, rendant AES-GCM extrêmement efficace.
- Avantages : Excellentes performances sur les processeurs avec accélération matérielle, sécurité solide, largement supporté.
- Inconvénients : Peut être plus lent dans les implémentations purement logicielles (par exemple, sur des processeurs plus anciens ou spécialisés sans AES-NI).
ChaCha20-Poly1305
ChaCha20-Poly1305 est un chiffrement par flux développé par Daniel J. Bernstein. Il est connu pour sa conception adaptée aux logiciels, fonctionnant très bien même sur des processeurs sans accélération matérielle cryptographique spécifique. Cela en fait un excellent choix pour une gamme diversifiée de matériels, y compris les systèmes embarqués, les processeurs plus anciens ou les environnements où l'accélération matérielle n'est pas disponible de manière cohérente ou optimisée pour d'autres algorithmes.
- Avantages : Excellentes performances logicielles, sécurité solide, résistant aux attaques par canal auxiliaire temporel.
- Inconvénients : Généralement pas aussi rapide que AES-GCM accéléré matériellement sur les processeurs de bureau/serveur modernes.
Facteurs affectant les performances du chiffrement
Le chiffrement "le plus rapide" n'est pas universellement fixe ; il dépend de plusieurs facteurs clés :
- Architecture du CPU et accélération matérielle : C'est le facteur le plus significatif. Si votre CPU dispose d'AES-NI ou d'instructions similaires, AES-GCM surpassera presque certainement ChaCha20-Poly1305. Sans cela, ChaCha20-Poly1305 pourrait prendre la tête.
- Implémentations du client et du serveur SSH : L'efficacité du logiciel SSH (par exemple, OpenSSH) et des bibliothèques cryptographiques qu'il utilise (par exemple, OpenSSL) peut impacter les performances réelles. Les versions plus récentes incluent souvent des optimisations.
- Conditions réseau : Bien que non directement lié à la vitesse du chiffrement, la latence du réseau et la bande passante disponible peuvent masquer ou amplifier la différence perçue dans les performances du chiffrement. Sur un réseau très lent, le coût CPU du chiffrement pourrait être négligeable par rapport aux limitations du réseau. Sur un réseau très rapide (par exemple, 10 Gbps ou plus), le chiffrement lié au CPU peut devenir le goulot d'étranglement.
- Volume et type de données : L'analyse comparative avec différentes tailles de données (petits fichiers vs. gros fichiers) et types (compressibles vs. incompressibles) peut révéler différentes caractéristiques de performance. Par exemple, les très petits transferts pourraient être dominés par la surcharge de configuration de la connexion plutôt que par la vitesse du chiffrement.
Comment analyser les performances du chiffrement SSH
L'analyse comparative consiste à dire explicitement à SSH d'utiliser un chiffrement spécifique, puis à mesurer le temps nécessaire pour transférer une quantité connue de données. Cela permet une comparaison directe.
1. Identifier les chiffrements supportés
Avant de commencer, vérifiez quels chiffrements votre client SSH supporte :
ssh -Q cipher
Ensuite, utilisez la sortie SSH verbeuse pour voir ce qu'une connexion réelle négocie :
ssh -vvv user@your_server
Recherchez des lignes similaires à debug1: kex: server->client cipher: [email protected] MAC: <implicit> compression: none. La politique du serveur est contrôlée par Ciphers dans sshd_config, mais le support effectif dépend à la fois du client et du serveur.
2. Spécifier les chiffrements avec ssh -c
Le client ssh vous permet de spécifier le chiffrement souhaité à l'aide du drapeau -c. Vous pouvez fournir une liste séparée par des virgules, et le client tentera d'utiliser le premier chiffrement supporté de la liste.
Chiffrements courants à tester :
3. Choisir une méthode de transfert et une source de données
Pour une analyse comparative cohérente, vous aurez besoin d'un moyen de transférer une quantité connue de données.
scp(Secure Copy) : Idéal pour transférer des fichiers. Utilisez un fichier volumineux et non compressible pour garantir que le chiffrement est le goulot d'étranglement, et non la compression ou les E/S disque.sftp(SSH File Transfer Protocol) : Similaire àscp, utile si vous préférez ce protocole.dd(Data Duplicator) : Peut générer un flux de données à canaliser via SSH, utile pour les tests de débit purs sans surcharge du système de fichiers côté client.
Étapes pratiques d'analyse comparative
Supposons que vous souhaitiez analyser les transferts d'un client vers un serveur. Vous aurez besoin d'un fichier de test sur le client (ou le serveur) suffisamment volumineux (par exemple, 1 Go) pour permettre une mesure significative, mais pas trop volumineux pour que les tests ne prennent pas trop de temps. Une bonne façon de créer un fichier de test non compressible est d'utiliser /dev/urandom. Utilisez /dev/zero uniquement lorsque la compression SSH est désactivée, car les données entièrement nulles sont hautement compressibles.
Sur le client (pour créer un fichier factice de 1 Go) :
pwd=$(pwd)
dd if=/dev/urandom of=$pwd/dummy_1GB.bin bs=1M count=1024 iflag=fullblock
Analyse comparative avec scp :
Test AES256-GCM :
echo "Test AES256-GCM..." time scp -c [email protected] dummy_1GB.bin user@your_server:/tmp/test_gcm.binTest ChaCha20-Poly1305 :
echo "Test ChaCha20-Poly1305..." time scp -c [email protected] dummy_1GB.bin user@your_server:/tmp/test_chacha.binTest AES128-GCM (souvent le plus rapide) :
echo "Test AES128-GCM..." time scp -c [email protected] dummy_1GB.bin user@your_server:/tmp/test_aes128_gcm.bin
Analyse comparative avec dd et pv (pour le débit en temps réel) :
Cette méthode achemine les données via SSH et peut afficher les vitesses en temps réel, réduisant les E/S disque comme goulot d'étranglement. pv (Pipe Viewer) vous donne des informations sur la progression et le débit.
Pour installer pv (s'il n'est pas déjà installé) :
sudo apt-get install pv # Debian/Ubuntu
sudo yum install pv # RHEL/CentOS
sudo brew install pv # macOS
Test AES256-GCM avec
ddetpv:echo "Test AES256-GCM avec dd..." dd if=/dev/zero bs=1M count=1024 | pv | ssh -o Compression=no -c [email protected] user@your_server "cat > /dev/null"Test ChaCha20-Poly1305 avec
ddetpv:echo "Test ChaCha20-Poly1305 avec dd..." dd if=/dev/zero bs=1M count=1024 | pv | ssh -o Compression=no -c [email protected] user@your_server "cat > /dev/null"
Astuce : Exécutez chaque test plusieurs fois (par exemple, 3 à 5 fois) et prenez la moyenne pour tenir compte des fluctuations du réseau ou de la charge du système.
Interprétation des résultats et recommandations
Après avoir exécuté vos analyses comparatives, comparez le temps real des sorties de la commande time ou le débit moyen rapporté par pv. Vous observerez probablement des schémas distincts :
- Processeurs modernes avec AES-NI : Vous constaterez presque certainement que
[email protected]et[email protected]offrent le débit le plus élevé. AES-128 est souvent marginalement plus rapide qu'AES-256 en raison de moins de tours, mais la différence pourrait être négligeable sur les systèmes avec accélération matérielle. - Processeurs plus anciens, ARM (sans extensions cryptographiques spécifiques) ou machines virtuelles : ChaCha20-Poly1305 peut fonctionner de manière comparable ou même surpasser AES-GCM, car sa conception optimisée pour les logiciels brille dans ces scénarios.
Recommandations :
- Pour les serveurs hautes performances avec des processeurs Intel/AMD modernes (et AES-NI) : Privilégiez AES-GCM (en particulier
[email protected]). Il exploite l'accélération matérielle pour une vitesse et une sécurité supérieures. - Pour les environnements diversifiés, le matériel plus ancien, les systèmes basés sur ARM ou les situations favorisant les performances logicielles : ChaCha20-Poly1305 est un excellent choix, offrant une sécurité solide avec des performances élevées et constantes sur diverses architectures sans dépendre de fonctionnalités matérielles spécifiques.
- Sécurité avant tout : Choisissez toujours des chiffrements qui fournissent un chiffrement authentifié (AEAD). AES-GCM et ChaCha20-Poly1305 sont tous deux des chiffrements AEAD et sont considérés comme solides. Évitez les anciens chiffrements non AEAD comme
aes*-cbcsi possible.
Autres considérations de performance SSH
Bien que la sélection du chiffrement soit cruciale, rappelez-vous qu'elle fait partie d'un tableau de performance plus large :
- Compression : SSH peut compresser les données avant le chiffrement (
-o Compression=yesouCompression yesdans~/.ssh/config). Pour les données hautement compressibles sur des liaisons lentes, cela peut améliorer considérablement la vitesse perçue, même si cela ajoute une légère surcharge CPU. Pour des données déjà compressées ou des liaisons très rapides, cela pourrait réduire les performances. - Multiplexage de connexion : Des fonctionnalités comme
ControlMasterdans OpenSSH permettent à plusieurs sessions SSH de réutiliser une seule connexion TCP sous-jacente, réduisant la surcharge de négociation pour les connexions suivantes. - MTU (Maximum Transmission Unit) : Assurez-vous que le MTU de votre réseau est optimisé pour éviter la fragmentation, ce qui peut dégrader les performances.
- Version du client/serveur SSH : Maintenez votre logiciel client et serveur SSH à jour. Les versions plus récentes incluent souvent des améliorations de performances et la prise en charge de chiffrements plus récents et plus rapides.
Choisissez à partir de vos mesures
L'optimisation de la sélection du chiffrement SSH peut améliorer les performances de transfert sécurisé, mais uniquement lorsque le chiffrement est le facteur limitant. Effectuez plusieurs tests, maintenez la compression et la taille du fichier cohérentes, et comparez l'utilisation du CPU ainsi que le temps de transfert.
Pour de nombreux serveurs modernes, AES-GCM fonctionne bien grâce à l'accélération matérielle. Sur les systèmes plus anciens, le matériel embarqué et certains environnements virtualisés, ChaCha20-Poly1305 peut être le meilleur choix. Gardez les anciens chiffrements CBC hors de l'utilisation normale, sauf si vous avez une exigence de compatibilité que vous pouvez isoler et documenter.