Benchmarking von SSH-Chiffren: Auswahl der schnellsten Verschlüsselung für Ihr Netzwerk
Testen Sie SSH-Chiffren sicher mit scp, ssh, dd und pv und wählen Sie dann AES-GCM oder ChaCha20 basierend auf Ihrer tatsächlichen Hardware.
Benchmarking von SSH-Chiffren: Auswahl der schnellsten Verschlüsselung für Ihr Netzwerk
Das Benchmarking von SSH-Chiffren ist sinnvoll, wenn verschlüsselte Übertragungen langsamer sind, als es das Netzwerk erlauben sollte. Die Chiffre ist nicht immer der Engpass, aber bei schnellen Verbindungen oder kleinen CPUs kann sie entscheiden, ob scp, sftp oder rsync -e ssh die Verbindung auslasten.
Die richtige Antwort hängt von Ihrem Client, Server, CPU-Funktionen, OpenSSH-Build und Netzwerkpfad ab. Testen Sie in Ihrer eigenen Umgebung, bevor Sie die Standardeinstellungen flottenweit ändern.
Verständnis von SSH-Chiffren und ihrer Rolle
Eine SSH-Chiffre ist ein Algorithmus, der verwendet wird, um die zwischen einem SSH-Client und -Server ausgetauschten Daten zu verschlüsseln und zu entschlüsseln. Ihr Hauptziel ist es, Vertraulichkeit, Integrität und Authentizität der Kommunikation zu gewährleisten. Wenn Sie eine SSH-Verbindung herstellen, verhandeln Client und Server eine Reihe von Algorithmen (Chiffren, MACs, Schlüsselaustauschmethoden), die beide unterstützen, und einigen sich letztendlich auf die stärksten und bevorzugtesten Optionen. Dieser Verhandlungsprozess ist entscheidend für die Einrichtung eines sicheren Kanals.
Verschiedene Chiffren verwenden unterschiedliche mathematische Operationen, was zu unterschiedlichen Rechenanforderungen führt. Einige Chiffren sind für Hardwarebeschleunigung optimiert und nutzen spezielle CPU-Befehle, während andere darauf ausgelegt sind, in Software effizient über eine breitere Palette von Prozessoren zu arbeiten. Die Wahl der Chiffre wirkt sich daher direkt auf die CPU-Auslastung und die resultierenden Datenübertragungsgeschwindigkeiten aus.
Wichtige moderne SSH-Chiffren für die Leistung
In modernen SSH-Umgebungen stechen zwei Familien von authentifizierten Verschlüsselungschiffren durch ihre hervorragende Balance aus Sicherheit und Leistung hervor: AES-GCM und ChaCha20-Poly1305. Beide bieten authentifizierte Verschlüsselung mit assoziierten Daten (AEAD), was bedeutet, dass sie die Daten in einem Durchgang verschlüsseln und auf Integrität prüfen, was effizienter und sicherer ist als ältere Encrypt-then-MAC-Ansätze.
AES-GCM (Advanced Encryption Standard - Galois/Counter Mode)
AES-GCM ist eine sehr beliebte und weit verbreitete Blockchiffre, die im Galois/Counter-Modus arbeitet. Sie bietet starke Sicherheit und ist besonders schnell auf Systemen mit Hardwareunterstützung für AES. Die meisten modernen CPUs (Intel, AMD und zunehmend ARM-Prozessoren) enthalten dedizierte Befehlssätze (wie AES-NI auf x86/x64-Architekturen), die AES-Operationen dramatisch beschleunigen und AES-GCM extrem effizient machen.
- Vorteile: Hervorragende Leistung auf hardwarebeschleunigten CPUs, starke Sicherheit, weit verbreitet.
- Nachteile: Kann in reinen Software-Implementierungen langsamer sein (z. B. auf älteren oder spezialisierten CPUs ohne AES-NI).
ChaCha20-Poly1305
ChaCha20-Poly1305 ist eine von Daniel J. Bernstein entwickelte Stromchiffre. Sie ist bekannt für ihr softwarefreundliches Design und funktioniert auch auf CPUs ohne spezifische kryptografische Hardwarebeschleunigung sehr gut. Dies macht sie zu einer ausgezeichneten Wahl für eine Vielzahl von Hardware, einschließlich eingebetteter Systeme, älterer Prozessoren oder Umgebungen, in denen Hardwarebeschleunigung nicht konsistent verfügbar oder für andere Algorithmen optimiert ist.
- Vorteile: Hervorragende Softwareleistung, starke Sicherheit, resistent gegen Timing-Seitenkanalangriffe.
- Nachteile: Im Allgemeinen nicht so schnell wie hardwarebeschleunigtes AES-GCM auf modernen Desktop-/Server-CPUs.
Faktoren, die die Chiffreleistung beeinflussen
Die "schnellste" Chiffre ist nicht universell festgelegt; sie hängt von mehreren Schlüsselfaktoren ab:
- CPU-Architektur und Hardwarebeschleunigung: Dies ist der bedeutendste Faktor. Wenn Ihre CPU AES-NI oder ähnliche Befehle hat, wird AES-GCM ChaCha20-Poly1305 fast sicher übertreffen. Ohne sie könnte ChaCha20-Poly1305 die Führung übernehmen.
- SSH-Client- und Server-Implementierungen: Die Effizienz der SSH-Software (z. B. OpenSSH) und der von ihr verwendeten kryptografischen Bibliotheken (z. B. OpenSSL) kann die reale Leistung beeinflussen. Neuere Versionen enthalten oft Optimierungen.
- Netzwerkbedingungen: Obwohl nicht direkt mit der Chiffrengeschwindigkeit zusammenhängend, können Netzwerklatenz und verfügbare Bandbreite den wahrgenommenen Unterschied in der Chiffreleistung maskieren oder verstärken. In einem sehr langsamen Netzwerk könnten die CPU-Kosten der Verschlüsselung im Vergleich zu Netzwerkbeschränkungen vernachlässigbar sein. In einem sehr schnellen Netzwerk (z. B. 10 Gbit/s oder mehr) kann die CPU-gebundene Verschlüsselung zum Engpass werden.
- Datenvolumen und -typ: Das Benchmarking mit unterschiedlichen Datengrößen (kleine Dateien vs. große Dateien) und -typen (komprimierbar vs. nicht komprimierbar) kann unterschiedliche Leistungsmerkmale aufdecken. Zum Beispiel könnten sehr kleine Übertragungen eher durch den Verbindungsaufbau-Overhead als durch die Chiffrengeschwindigkeit dominiert werden.
So benchmarken Sie die SSH-Chiffreleistung
Beim Benchmarking wird SSH explizit angewiesen, eine bestimmte Chiffre zu verwenden, und dann die Zeit gemessen, die für die Übertragung einer bekannten Datenmenge benötigt wird. Dies ermöglicht einen direkten Vergleich.
1. Unterstützte Chiffren identifizieren
Bevor Sie beginnen, überprüfen Sie, welche Chiffren Ihr SSH-Client unterstützt:
ssh -Q cipher
Verwenden Sie dann die ausführliche SSH-Ausgabe, um zu sehen, was eine echte Verbindung aushandelt:
ssh -vvv benutzer@ihr_server
Suchen Sie nach Zeilen ähnlich wie debug1: kex: server->client cipher: [email protected] MAC: <implicit> compression: none. Die Serverrichtlinie wird durch Ciphers in sshd_config gesteuert, aber die effektive Unterstützung hängt sowohl vom Client als auch vom Server ab.
2. Chiffren mit ssh -c angeben
Der ssh-Client ermöglicht es Ihnen, die gewünschte Chiffre mit dem Flag -c anzugeben. Sie können eine durch Kommas getrennte Liste bereitstellen, und der Client versucht, die erste unterstützte Chiffre aus der Liste zu verwenden.
Häufig zu testende Chiffren:
3. Übertragungsmethode und Datenquelle auswählen
Für konsistentes Benchmarking benötigen Sie eine Möglichkeit, eine bekannte Datenmenge zu übertragen.
scp(Secure Copy): Ideal zum Übertragen von Dateien. Verwenden Sie eine große, nicht komprimierbare Datei, um sicherzustellen, dass die Chiffre der Engpass ist, nicht die Komprimierung oder der Festplatten-I/O.sftp(SSH File Transfer Protocol): Ähnlich wiescp, nützlich, wenn Sie dieses Protokoll bevorzugen.dd(Data Duplicator): Kann einen Datenstrom generieren, der über SSH geleitet wird, nützlich für reine Durchsatzteists ohne Dateisystem-Overhead auf der Client-Seite.
Praktische Benchmarking-Schritte
Angenommen, Sie möchten Übertragungen von einem Client zu einem Server benchmarken. Sie benötigen eine Testdatei auf dem Client (oder Server), die groß genug ist (z. B. 1 GB), um eine aussagekräftige Messung zu ermöglichen, aber nicht so groß, dass die Tests zu lange dauern. Eine gute Möglichkeit, eine nicht komprimierbare Testdatei zu erstellen, ist die Verwendung von /dev/urandom. Verwenden Sie /dev/zero nur, wenn die SSH-Komprimierung deaktiviert ist, da alle Null-Daten stark komprimierbar sind.
Auf dem Client (um eine 1 GB Dummy-Datei zu erstellen):
pwd=$(pwd)
dd if=/dev/urandom of=$pwd/dummy_1GB.bin bs=1M count=1024 iflag=fullblock
Benchmarking mit scp:
Testen von AES256-GCM:
echo "Teste AES256-GCM..." time scp -c [email protected] dummy_1GB.bin benutzer@ihr_server:/tmp/test_gcm.binTesten von ChaCha20-Poly1305:
echo "Teste ChaCha20-Poly1305..." time scp -c [email protected] dummy_1GB.bin benutzer@ihr_server:/tmp/test_chacha.binTesten von AES128-GCM (oft am schnellsten):
echo "Teste AES128-GCM..." time scp -c [email protected] dummy_1GB.bin benutzer@ihr_server:/tmp/test_aes128_gcm.bin
Benchmarking mit dd und pv (für Echtzeit-Durchsatz):
Diese Methode leitet Daten über SSH und kann Echtzeitgeschwindigkeiten anzeigen, wodurch Festplatten-I/O als Engpass reduziert wird. pv (Pipe Viewer) gibt Ihnen Fortschritts- und Durchsatzinformationen.
So installieren Sie pv (falls nicht bereits installiert):
sudo apt-get install pv # Debian/Ubuntu
sudo yum install pv # RHEL/CentOS
sudo brew install pv # macOS
Testen von AES256-GCM mit
ddundpv:echo "Teste AES256-GCM mit dd..." dd if=/dev/zero bs=1M count=1024 | pv | ssh -o Compression=no -c [email protected] benutzer@ihr_server "cat > /dev/null"Testen von ChaCha20-Poly1305 mit
ddundpv:echo "Teste ChaCha20-Poly1305 mit dd..." dd if=/dev/zero bs=1M count=1024 | pv | ssh -o Compression=no -c [email protected] benutzer@ihr_server "cat > /dev/null"
Tipp: Führen Sie jeden Test mehrmals durch (z. B. 3-5 Mal) und nehmen Sie den Durchschnitt, um Netzwerkschwankungen oder Systemlast zu berücksichtigen.
Ergebnisse interpretieren und Empfehlungen
Nachdem Sie Ihre Benchmarks durchgeführt haben, vergleichen Sie die real-Zeit aus den Ausgaben des time-Befehls oder den durchschnittlichen Durchsatz, der von pv gemeldet wird. Sie werden wahrscheinlich unterschiedliche Muster beobachten:
- Moderne CPUs mit AES-NI: Sie werden fast sicher feststellen, dass
[email protected]und[email protected]den höchsten Durchsatz bieten. AES-128 ist aufgrund weniger Runden oft geringfügig schneller als AES-256, aber der Unterschied könnte auf hardwarebeschleunigten Systemen vernachlässigbar sein. - Ältere CPUs, ARM (ohne spezifische Krypto-Erweiterungen) oder virtuelle Maschinen: ChaCha20-Poly1305 kann vergleichbar oder sogar besser als AES-GCM abschneiden, da sein softwareoptimiertes Design in diesen Szenarien glänzt.
Empfehlungen:
- Für leistungsstarke Server mit modernen Intel/AMD-CPUs (und AES-NI): Priorisieren Sie AES-GCM (insbesondere
[email protected]). Es nutzt Hardwarebeschleunigung für überragende Geschwindigkeit und Sicherheit. - Für vielfältige Umgebungen, ältere Hardware, ARM-basierte Systeme oder Situationen, die Softwareleistung bevorzugen: ChaCha20-Poly1305 ist eine ausgezeichnete Wahl, die starke Sicherheit mit konsistenter, hoher Leistung über verschiedene Architekturen hinweg bietet, ohne auf hardwarespezifische Funktionen angewiesen zu sein.
- Sicherheit zuerst: Wählen Sie immer Chiffren, die authentifizierte Verschlüsselung (AEAD) bieten. Sowohl AES-GCM als auch ChaCha20-Poly1305 sind AEAD-Chiffren und gelten als stark. Vermeiden Sie nach Möglichkeit ältere, nicht-AEAD-Chiffren wie
aes*-cbc.
Andere SSH-Leistungsüberlegungen
Während die Chiffreauswahl entscheidend ist, denken Sie daran, dass sie Teil eines breiteren Leistungsbildes ist:
- Komprimierung: SSH kann Daten vor der Verschlüsselung komprimieren (
-o Compression=yesoderCompression yesin~/.ssh/config). Für stark komprimierbare Daten über langsamen Verbindungen kann dies die wahrgenommene Geschwindigkeit dramatisch verbessern, selbst wenn es einen geringen CPU-Overhead hinzufügt. Für bereits komprimierte Daten oder sehr schnelle Verbindungen könnte es die Leistung verringern. - Verbindungsmultiplexing: Funktionen wie
ControlMasterin OpenSSH ermöglichen es mehreren SSH-Sitzungen, eine einzige zugrunde liegende TCP-Verbindung wiederzuverwenden, wodurch der Handshake-Overhead für nachfolgende Verbindungen reduziert wird. - MTU (Maximum Transmission Unit): Stellen Sie sicher, dass die MTU Ihres Netzwerks optimiert ist, um Fragmentierung zu verhindern, die die Leistung beeinträchtigen kann.
- SSH-Client/Server-Version: Halten Sie Ihre SSH-Client- und Server-Software auf dem neuesten Stand. Neuere Versionen enthalten oft Leistungsverbesserungen und Unterstützung für neuere, schnellere Chiffren.
Wählen Sie basierend auf Ihren Messungen
Die Optimierung der SSH-Chiffreauswahl kann die Leistung sicherer Übertragungen verbessern, aber nur, wenn die Verschlüsselung der limitierende Faktor ist. Führen Sie mehrere Tests durch, halten Sie Komprimierung und Dateigröße konsistent und vergleichen Sie sowohl die CPU-Auslastung als auch die Übertragungszeit.
Für viele moderne Server funktioniert AES-GCM aufgrund der Hardwarebeschleunigung gut. Auf älteren Systemen, eingebetteter Hardware und einigen virtualisierten Umgebungen könnte ChaCha20-Poly1305 die bessere Wahl sein. Halten Sie alte CBC-Chiffren aus dem normalen Gebrauch heraus, es sei denn, Sie haben eine Kompatibilitätsanforderung, die Sie isolieren und dokumentieren können.