Benchmarking dei cifrari SSH: scegliere la crittografia più veloce per la tua rete
Secure Shell (SSH) è la spina dorsale dell'accesso remoto sicuro e del trasferimento dati per innumerevoli sistemi in tutto il mondo. Sebbene la sua funzione primaria sia la sicurezza, gli algoritmi di crittografia sottostanti, noti come cifrari, possono influire in modo significativo sulle prestazioni, specialmente durante trasferimenti di dati ad alto volume. La scelta del cifrario giusto può fare la differenza tra trasferimenti fulminei e colli di bottiglia frustranti.
Questo articolo approfondisce il mondo della crittografia SSH moderna, confrontando le caratteristiche prestazionali di cifrari popolari come AES-GCM e ChaCha20-Poly1305. Esploreremo i fattori che influenzano la velocità dei cifrari, forniremo metodi pratici per verificarne le prestazioni nel tuo ambiente specifico e ti guideremo nella selezione della crittografia ottimale per le esigenze uniche della tua rete, bilanciando il throughput con una sicurezza robusta.
Comprendere i cifrari SSH e il loro ruolo
Un cifrario SSH è un algoritmo utilizzato per crittografare e decrittografare i dati scambiati tra un client e un server SSH. Il suo obiettivo primario è garantire la riservatezza, l'integrità e l'autenticità della comunicazione. Quando si avvia una connessione SSH, il client e il server negoziano un insieme di algoritmi (cifrari, MAC, metodi di scambio chiavi) che entrambi supportano, concordando in ultima analisi le opzioni più forti e preferite. Questo processo di negoziazione è fondamentale per stabilire un canale sicuro.
Differenti cifrari impiegano distinte operazioni matematiche, portando a diverse richieste computazionali. Alcuni cifrari sono ottimizzati per l'accelerazione hardware, sfruttando istruzioni specializzate della CPU, mentre altri sono progettati per funzionare in modo efficiente via software su una gamma più ampia di processori. La scelta del cifrario, quindi, influisce direttamente sull'utilizzo della CPU e sulle velocità di trasferimento dati risultanti.
Cifrari SSH moderni chiave per le prestazioni
Negli ambienti SSH moderni, due famiglie di cifrari di crittografia autenticata si distinguono per l'eccellente equilibrio tra sicurezza e prestazioni: AES-GCM e ChaCha20-Poly1305. Entrambi forniscono crittografia autenticata con dati associati (AEAD), il che significa che crittografano i dati e forniscono il controllo dell'integrità in un unico passaggio, che è più efficiente e sicuro rispetto ai vecchi approcci encrypt-then-MAC.
AES-GCM (Advanced Encryption Standard - Galois/Counter Mode)
AES-GCM è un cifrario a blocchi altamente popolare e ampiamente adottato che opera in modalità Galois/Counter. Offre una forte sicurezza ed è particolarmente veloce su sistemi con supporto hardware per AES. La maggior parte delle CPU moderne (Intel, AMD e sempre più processori ARM) include set di istruzioni dedicati (come AES-NI nelle architetture x86/x64) che accelerano drasticamente le operazioni AES, rendendo AES-GCM estremamente efficiente.
- Pro: Prestazioni eccellenti su CPU con accelerazione hardware, forte sicurezza, ampiamente supportato.
- Contro: Può essere più lento nelle implementazioni solo software (ad esempio, su CPU più vecchie o specializzate senza AES-NI).
ChaCha20-Poly1305
ChaCha20-Poly1305 è un cifrario a flusso sviluppato da Daniel J. Bernstein. È noto per il suo design orientato al software, che funziona molto bene anche su CPU senza accelerazione hardware crittografica specifica. Questo lo rende un'ottima scelta per una vasta gamma di hardware, inclusi sistemi embedded, processori più vecchi o ambienti in cui l'accelerazione hardware non è costantemente disponibile o ottimizzata per altri algoritmi.
- Pro: Eccellenti prestazioni software, forte sicurezza, resistente agli attacchi side-channel basati sul timing.
- Contro: Generalmente non veloce quanto AES-GCM con accelerazione hardware su CPU desktop/server moderne.
Fattori che influenzano le prestazioni dei cifrari
Il cifrario "più veloce" non è universalmente fisso; dipende da diversi fattori chiave:
- Architettura della CPU e accelerazione hardware: Questo è il fattore più significativo. Se la tua CPU dispone di istruzioni AES-NI o simili, AES-GCM quasi certamente supererà ChaCha20-Poly1305. Senza di esse, ChaCha20-Poly1305 potrebbe prendere il sopravvento.
- Implementazioni del client e del server SSH: L'efficienza del software SSH (ad esempio, OpenSSH) e delle librerie crittografiche che utilizza (ad esempio, OpenSSL) può influire sulle prestazioni reali. Le versioni più recenti spesso includono ottimizzazioni.
- Condizioni di rete: Sebbene non direttamente correlate alla velocità del cifrario, la latenza di rete e la larghezza di banda disponibile possono mascherare o amplificare la differenza percepita nelle prestazioni del cifrario. Su una rete molto lenta, il costo della CPU per la crittografia potrebbe essere trascurabile rispetto ai limiti di rete. Su una rete molto veloce (ad esempio, 10 Gbps o più), la crittografia limitata dalla CPU può diventare il collo di bottiglia.
- Volume e tipo di dati: Il benchmarking con diverse dimensioni di file (file piccoli vs. file grandi) e tipi (compressibili vs. incomprimibili) può rivelare diverse caratteristiche prestazionali. Ad esempio, trasferimenti molto piccoli potrebbero essere dominati dall'overhead di impostazione della connessione piuttosto che dalla velocità del cifrario.
Come eseguire il benchmark delle prestazioni dei cifrari SSH
Il benchmarking implica dire esplicitamente a SSH di utilizzare un cifrario specifico e quindi misurare il tempo impiegato per trasferire una quantità nota di dati. Ciò consente un confronto diretto.
1. Identificare i cifrari supportati
Prima di iniziare, verifica quali cifrari supporta il tuo server SSH. Spesso puoi trovarlo nel file sshd_config sul server o eseguendo una scansione NMAP con nmap --script ssh-auth-methods <IP>. Un modo più semplice per vedere il cifrario negoziato è utilizzare l'output SSH verboso:
ssh -vvv user@your_server
Cerca righe simili a debug1: kex: server->client cipher: [email protected] MAC: <implicit> compression: none.
2. Specificare i cifrari con ssh -c
Il client ssh ti consente di specificare il cifrario desiderato utilizzando l'opzione -c. Puoi fornire un elenco separato da virgole e il client tenterà di utilizzare il primo cifrario supportato dall'elenco.
Cifrari comuni da testare:
* [email protected]
* [email protected]
* [email protected]
3. Scegliere un metodo di trasferimento e una fonte di dati
Per un benchmarking coerente, avrai bisogno di un modo per trasferire una quantità nota di dati.
scp(Secure Copy): Ideale per trasferire file. Usa un file di grandi dimensioni e non comprimibile per garantire che il cifrario sia il collo di bottiglia, non la compressione o l'I/O del disco.sftp(SSH File Transfer Protocol): Simile ascp, utile se preferisci questo protocollo.dd(Data Duplicator): Può generare un flusso di dati da inviare tramite pipe su SSH, utile per test di throughput puri senza overhead del file system lato client.
Passaggi pratici di benchmarking
Supponiamo che tu voglia eseguire il benchmark dei trasferimenti da un client a un server. Avrai bisogno di un file di test sul client (o sul server) abbastanza grande (ad esempio, 1 GB) da consentire una misurazione significativa, ma non così grande da rendere i test troppo lunghi. Un buon modo per creare un file di test non comprimibile è utilizzare /dev/urandom o /dev/zero.
Sul client (per creare un file dummy da 1 GB):
pwd=$(pwd)
dd if=/dev/urandom of=$pwd/dummy_1GB.bin bs=1M count=1024 iflag=fullblock
Benchmarking con scp:
-
Test AES256-GCM:
bash echo "Testing AES256-GCM..." time scp -c [email protected] dummy_1GB.bin user@your_server:/tmp/test_gcm.bin -
Test ChaCha20-Poly1305:
bash echo "Testing ChaCha20-Poly1305..." time scp -c [email protected] dummy_1GB.bin user@your_server:/tmp/test_chacha.bin -
Test AES128-GCM (spesso il più veloce):
bash echo "Testing AES128-GCM..." time scp -c [email protected] dummy_1GB.bin user@your_server:/tmp/test_aes128_gcm.bin
Benchmarking con dd e pv (per throughput in tempo reale):
Questo metodo invia dati tramite SSH e può mostrare velocità in tempo reale, riducendo l'I/O del disco come collo di bottiglia. pv (Pipe Viewer) fornisce informazioni su progresso e throughput.
Per installare pv (se non già installato):
sudo apt-get install pv # Debian/Ubuntu
sudo yum install pv # RHEL/CentOS
sudo brew install pv # macOS
-
Test AES256-GCM con
ddepv:
bash echo "Testing AES256-GCM with dd..." dd if=/dev/zero bs=1M count=1024 | pv | ssh -c [email protected] user@your_server "cat > /dev/null" -
Test ChaCha20-Poly1305 con
ddepv:
bash echo "Testing ChaCha20-Poly1305 with dd..." dd if=/dev/zero bs=1M count=1024 | pv | ssh -c [email protected] user@your_server "cat > /dev/null"
Suggerimento: Esegui ogni test più volte (ad esempio, 3-5 volte) e prendi la media per tenere conto di fluttuazioni di rete o carico del sistema.
Interpretazione dei risultati e raccomandazioni
Dopo aver eseguito i benchmark, confronta il tempo real dagli output del comando time o il throughput medio riportato da pv. Probabilmente osserverai schemi distinti:
- CPU moderne con AES-NI: Quasi certamente scoprirai che
[email protected]e[email protected]offrono il throughput più elevato. AES-128 è spesso marginalmente più veloce di AES-256 a causa di un minor numero di round, ma la differenza potrebbe essere trascurabile sui sistemi con accelerazione hardware. - CPU più vecchie, ARM (senza estensioni crittografiche specifiche) o macchine virtuali: ChaCha20-Poly1305 potrebbe avere prestazioni paragonabili o addirittura superiori ad AES-GCM, poiché il suo design ottimizzato per il software brilla in questi scenari.
Raccomandazioni:
- Per server ad alte prestazioni con CPU Intel/AMD moderne (e AES-NI): Dai la priorità ad AES-GCM (specialmente
[email protected]). Sfrutta l'accelerazione hardware per velocità e sicurezza superiori. - Per ambienti diversificati, hardware più vecchio, sistemi basati su ARM o situazioni che favoriscono le prestazioni software: ChaCha20-Poly1305 è un'ottima scelta, che fornisce una forte sicurezza con prestazioni elevate e costanti su varie architetture senza fare affidamento su funzionalità specifiche dell'hardware.
- La sicurezza prima di tutto: Scegli sempre cifrari che forniscono crittografia autenticata (AEAD). Sia AES-GCM che ChaCha20-Poly1305 sono cifrari AEAD e sono considerati robusti. Evita cifrari più vecchi e non AEAD come
aes*-cbcse possibile.
Altre considerazioni sulle prestazioni di SSH
Sebbene la selezione del cifrario sia cruciale, ricorda che fa parte di un quadro prestazionale più ampio:
- Compressione: SSH può comprimere i dati prima della crittografia (
-o Compression=yesoCompression yesin~/.ssh/config). Per dati altamente comprimibili su collegamenti lenti, questo può migliorare drasticamente la velocità percepita, anche se aggiunge un leggero overhead della CPU. Per dati già compressi o collegamenti molto veloci, potrebbe ridurre le prestazioni. - Multiplexing delle connessioni: Funzionalità come
ControlMasterin OpenSSH consentono a più sessioni SSH di riutilizzare una singola connessione TCP sottostante, riducendo l'overhead di handshake per le connessioni successive. - MTU (Maximum Transmission Unit): Assicurati che l'MTU della tua rete sia ottimizzato per evitare la frammentazione, che può degradare le prestazioni.
- Versione del client/server SSH: Mantieni aggiornato il tuo software client e server SSH. Le versioni più recenti spesso includono miglioramenti delle prestazioni e supporto per cifrari più recenti e più veloci.
Conclusione
Ottimizzare la selezione dei cifrari SSH è un modo potente per migliorare le prestazioni dei tuoi trasferimenti dati sicuri senza compromettere la sicurezza. Comprendendo le caratteristiche dei cifrari moderni come AES-GCM e ChaCha20-Poly1305, ed eseguendo benchmark pratici nel tuo ambiente di rete specifico, puoi prendere decisioni informate.
Ricorda che il cifrario "più veloce" dipende dal contesto. Una rapida sessione di benchmarking può rivelare quale cifrario offre veramente il miglior equilibrio tra velocità e sicurezza per la tua infrastruttura. Rivedi regolarmente le tue configurazioni SSH e tieni d'occhio i nuovi sviluppi nelle prestazioni crittografiche per mantenere una rete efficiente e sicura.