SSH (Secure Shell) to nie jeden algorytm — to zestaw uzgodnionych mechanizmów kryptograficznych, które razem zapewniają:
- Poufność — szyfrowanie ruchu
- Integralność — ochrona przed modyfikacją danych w transmisji
- Uwierzytelnienie serwera — i często użytkownika
- Perfect Forward Secrecy (PFS) — odporność na ujawnienie klucza długoterminowego w przyszłości
Przy każdym połączeniu klient i serwer negocjują cztery grupy algorytmów:
- KEX — wymiana kluczy i uzgodnienie sekretu sesyjnego
- Host Key — weryfikacja tożsamości serwera
- Ciphers — szyfrowanie danych (poufność)
- MAC lub AEAD — integralność i uwierzytelnienie pakietów
Poniżej praktyczny przewodnik: co rozumieć, co wybierać, czego unikać.
1. KEX — wymiana kluczy (najważniejsza część negocjacji)
KEX odpowiada za uzgodnienie wspólnego sekretu sesyjnego. Współcześnie dominuje ECDH i Curve25519.
Co wybierać
curve25519-sha256— najlepszy domyślny wybór w 2026ecdh-sha2-nistp256/ecdh-sha2-nistp384/ecdh-sha2-nistp521— nadal akceptowalne
Czego unikać
diffie-hellman-group1-sha1— przestarzały, tylko 1024-bitdiffie-hellman-group14-sha1— SHA-1, wycofanydiffie-hellman-group-exchange-sha1— SHA-1
Jeśli masz środowiska legacy wymagające starych algorytmów DH — potraktuj to jako techniczny dług i zaplanuj migrację z konkretnym terminem.
2. Host Key — jak klient weryfikuje serwer
Host Key to klucz długoterminowy serwera. To on odpowiada za komunikat, który widziałeś pewnie setki razy:
The authenticity of host '...' can't be established.
Klient porównuje klucz serwera z zapisanym w known_hosts. Jeśli klucz się zmieni — dostaniesz ostrzeżenie. To może oznaczać atak MITM, ale też normalną rotację kluczy lub reinstalację serwera. W każdym przypadku warto wiedzieć dlaczego.
Co wybierać
ssh-ed25519— nowoczesny, szybki, najlepszy domyślny wybórrsa-sha2-512/rsa-sha2-256— akceptowalne dla kompatybilności wstecznej
Czego unikać
ssh-rsa(RSA + SHA-1) — przestarzałe przez SHA-1, wyłączone domyślnie w nowszych OpenSSHDSA— nie powinno istnieć w aktywnych środowiskach
3. Ciphers — poufność danych w kanale
Najlepsza praktyka to AEAD (Authenticated Encryption with Associated Data) — łączy poufność i integralność w jednym algorytmie.
Polecane (AEAD)
chacha20-poly1305@openssh.comaes256-gcm@openssh.comaes128-gcm@openssh.com
Akceptowalne, ale wymagają osobnego MAC
aes256-ctraes128-ctr
Unikaj bezwzględnie
- Tryb CBC (np.
aes256-cbc) — podatny na ataki padding oracle 3DES— przestarzały
4. MAC vs AEAD — integralność pakietów
Jeśli używasz GCM lub ChaCha20-Poly1305, integralność jest wbudowana — osobny MAC nie jest potrzebny. Jeśli używasz trybu CTR — potrzebujesz zewnętrznego MAC.
Co wybierać (gdy MAC jest potrzebny)
hmac-sha2-256hmac-sha2-512
Czego unikać
hmac-sha1— SHA-1umac-64— za krótki tag (64-bit)
Jak sprawdzić, co jest używane u Ciebie
Jakie algorytmy wspiera Twój klient OpenSSH
ssh -Q kex
ssh -Q key
ssh -Q cipher
ssh -Q mac
Co faktycznie negocjuje się na połączeniu
ssh -vvv user@host
W logu zobaczysz dokładnie wybrane: KEX, host key algorithm, cipher, MAC/AEAD. Szukaj linii zaczynających się od kex: server->client i kex: client->server.
Bezpieczna konfiguracja bazowa dla OpenSSH (serwer)
Plik /etc/ssh/sshd_config:
KexAlgorithms curve25519-sha256,ecdh-sha2-nistp256
HostKeyAlgorithms ssh-ed25519,rsa-sha2-512,rsa-sha2-256
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
MACs hmac-sha2-512,hmac-sha2-256
# Ogranicz powierzchnię ataku
PasswordAuthentication no
PermitRootLogin no
Zanim wdrożysz — trzy zasady:
- Nie kopiuj "na ślepo" — najpierw sprawdź kompatybilność wszystkich klientów w środowisku.
- Po zmianach zawsze wykonaj
sshd -t(test konfiguracji bez restartu). - Przetestuj nowe połączenie w osobnej sesji zanim zamkniesz obecną — żeby nie zablokować się na serwerze.
TL;DR — zapamiętaj cztery rzeczy
| Kategoria | Wybierz | Usuń |
|---|---|---|
| KEX | curve25519-sha256 |
SHA-1, group1, group14 |
| Host Key | ssh-ed25519 |
ssh-rsa, DSA |
| Cipher | chacha20-poly1305, AES-GCM |
CBC, 3DES |
| MAC | hmac-sha2-256/512 |
hmac-sha1, umac-64 |
Dobra kryptografia w SSH to fundament — ale równie ważne są polityki dostępu, hardening sshd_config i obserwowalność: logi, alerty, kontrola zmian.
W praktyce to dobrze działa razem z wdrożeniu MFA oraz regularnym przeglądem konfiguracji i audytu bezpieczeństwa.