ssh.rocks

Algorithm reference

Every one of the 77 algorithms this tool rates, what it thinks, and why. Sorted worst first, because the reason to open a page like this is usually to find out what to remove.

Key exchange (19)

How the two sides agree on a shared secret without ever sending it. This is where forward secrecy comes from, and where post-quantum protection is being added — a recorded session is decryptable later if and only if this step was weak.

AlgorithmVerdict
diffie-hellman-group1-sha1 broken 1024-bit fixed MODP group and SHA-1. Precomputation against this exact prime is within reach of a state actor (Logjam, 2015). Disable it
gss-group1-sha1- broken GSSAPI key exchange over the 1024-bit group with SHA-1
rsa1024-sha1 broken 1024-bit RSA key transport with SHA-1. No forward secrecy at all
diffie-hellman-group-exchange-sha1 weak SHA-1 in the key exchange hash
diffie-hellman-group14-sha1 weak SHA-1 in the key exchange hash. The 2048-bit group is fine; the hash is not, and it is trivially avoidable
rsa2048-sha256 weak RSA key transport. No forward secrecy: recovering the host key later decrypts every session recorded before that
curve25519-sha256 good X25519 ECDH. Fast, constant-time, no NIST curve constants. The sane baseline
curve25519-sha256@libssh.org good X25519 ECDH under its pre-standard name. Identical to curve25519-sha256
diffie-hellman-group-exchange-sha256 good negotiated MODP group with SHA-256. Strength depends on the group the server offers
diffie-hellman-group14-sha256 good 2048-bit MODP group with SHA-256. The floor of acceptable finite-field DH
diffie-hellman-group15-sha512 good 3072-bit MODP group with SHA-512
diffie-hellman-group16-sha512 good 4096-bit MODP group with SHA-512
diffie-hellman-group18-sha512 good 8192-bit MODP group with SHA-512. Very conservative, very slow
ecdh-sha2-nistp256 good ECDH over NIST P-256. Sound, but the curve constants have unexplained provenance and the implementations are harder to make constant-time
ecdh-sha2-nistp384 good ECDH over NIST P-384. Same caveat as P-256, larger group
ecdh-sha2-nistp521 good ECDH over NIST P-521. Same caveat as P-256, larger group
mlkem768x25519-sha256 excellent post-quantum hybrid (ML-KEM-768 + X25519). The NIST-standardised KEM; protects today's traffic against a future quantum attacker
sntrup761x25519-sha512 excellent post-quantum hybrid (Streamlined NTRU Prime + X25519). OpenSSH's default since 9.0
sntrup761x25519-sha512@openssh.com excellent post-quantum hybrid (Streamlined NTRU Prime + X25519). OpenSSH's default since 9.0

Ciphers (20)

The symmetric encryption applied to every byte after the handshake. The modern ones are AEAD: they authenticate as well as encrypt, so there is no separate MAC to get wrong.

AlgorithmVerdict
3des-cbc broken 64-bit block cipher, ~112-bit effective key, CBC mode (Sweet32). Deprecated by NIST
3des-ctr broken Triple-DES. 64-bit block, ~112-bit effective key
arcfour broken RC4. Biased keystream, practically broken
arcfour128 broken RC4 with 1536 bytes discarded. Still RC4
arcfour256 broken RC4 with 1536 bytes discarded. Still RC4
blowfish-cbc broken 64-bit block cipher in CBC mode. Birthday-bound collisions after ~32 GB on one key (Sweet32)
cast128-cbc broken 64-bit block cipher in CBC mode (Sweet32)
none broken no encryption at all
rijndael-cbc@lysator.liu.se broken Pre-standard AES naming in CBC mode. Its presence means a very old client
aes128-cbc weak CBC mode — see aes256-cbc
aes192-cbc weak CBC mode — see aes256-cbc
aes256-cbc weak CBC mode. SSH's encrypt-and-MAC construction over CBC enabled a plaintext-recovery attack (CPNI-957037, 2008); CTR or GCM instead
aes128-ctr good AES-128 in counter mode. Pair it with an ETM MAC
aes192-ctr good AES-192 in counter mode. Pair it with an ETM MAC
aes256-ctr good AES-256 in counter mode. Not authenticated by itself, so it leans on the MAC — pair it with an ETM MAC
aes128-gcm excellent AES-128 in GCM (RFC 5647 naming)
aes128-gcm@openssh.com excellent AES-128 in GCM. AEAD, hardware-accelerated on anything modern
aes256-gcm excellent AES-256 in GCM (RFC 5647 naming)
aes256-gcm@openssh.com excellent AES-256 in GCM. AEAD, hardware-accelerated on anything modern
chacha20-poly1305@openssh.com excellent AEAD. Constant-time in software, no timing side channel on hosts without AES instructions

MACs (15)

Integrity protection for ciphers that do not authenticate on their own. The -etm suffix — encrypt-then-MAC — is the axis that matters: without it the receiver must decrypt attacker-chosen bytes before it can check the tag.

AlgorithmVerdict
hmac-md5 broken MD5. Collision-broken hash in an encrypt-and-MAC construction
hmac-md5-96 broken MD5 truncated to 96 bits
none broken no integrity protection at all
hmac-ripemd160 weak RIPEMD-160. Obsolete, little analysed
hmac-sha1 weak SHA-1, and encrypt-and-MAC. Still collision-resistant enough for HMAC in practice, but there is no reason to keep it
hmac-sha1-96 weak SHA-1 truncated to 96 bits, encrypt-and-MAC
hmac-sha1-etm@openssh.com weak encrypt-then-MAC, but the hash is SHA-1
umac-64@openssh.com weak 64-bit tag and encrypt-and-MAC
hmac-sha2-256 good HMAC-SHA-256, but encrypt-and-MAC. Prefer the -etm variant
hmac-sha2-512 good HMAC-SHA-512, but encrypt-and-MAC: the receiver decrypts before authenticating. Prefer the -etm variant
umac-128@openssh.com good UMAC-128, encrypt-and-MAC. Prefer the -etm variant
umac-64-etm@openssh.com good UMAC-64, encrypt-then-MAC. A 64-bit tag is small; prefer the 128-bit variant
hmac-sha2-256-etm@openssh.com excellent HMAC-SHA-256, encrypt-then-MAC
hmac-sha2-512-etm@openssh.com excellent HMAC-SHA-512, encrypt-then-MAC. The tag is checked before anything is decrypted
umac-128-etm@openssh.com excellent UMAC-128, encrypt-then-MAC. Very fast

Host key algorithms (20)

How the server proves it is the server. Note these name the SIGNATURE algorithm, not the key: ssh-rsa and rsa-sha2-512 can be the very same RSA key, differing only in the hash used to sign.

AlgorithmVerdict
ssh-dss broken DSA, fixed at 1024 bits, and fatally sensitive to nonce reuse. Removed from OpenSSH entirely in 10.0
ssh-dss-cert-v01@openssh.com broken DSA certificate. See ssh-dss
ssh-rsa weak RSA signed with SHA-1. OpenSSH disabled this by default in 9.0; the key is fine, the signature hash is not
ssh-rsa-cert-v01@openssh.com weak RSA certificate signed with SHA-1
ecdsa-sha2-nistp256 good ECDSA over NIST P-256. Sound, but ECDSA needs a unique nonce per signature and implementations have leaked keys by getting that wrong
ecdsa-sha2-nistp256-cert-v01@openssh.com good ECDSA P-256 host certificate
ecdsa-sha2-nistp384 good ECDSA over NIST P-384
ecdsa-sha2-nistp384-cert-v01@openssh.com good ECDSA P-384 host certificate
ecdsa-sha2-nistp521 good ECDSA over NIST P-521
ecdsa-sha2-nistp521-cert-v01@openssh.com good ECDSA P-521 host certificate
rsa-sha2-256 good RSA signed with SHA-256
rsa-sha2-256-cert-v01@openssh.com good RSA host certificate signed with SHA-256
rsa-sha2-512 good RSA signed with SHA-512
rsa-sha2-512-cert-v01@openssh.com good RSA host certificate signed with SHA-512
sk-ecdsa-sha2-nistp256-cert-v01@openssh.com good ECDSA P-256 FIDO2 certificate
sk-ecdsa-sha2-nistp256@openssh.com good ECDSA P-256 backed by a FIDO2 authenticator
sk-ssh-ed25519-cert-v01@openssh.com excellent Ed25519 FIDO2 certificate
sk-ssh-ed25519@openssh.com excellent Ed25519 backed by a FIDO2 authenticator
ssh-ed25519 excellent Ed25519. Small, fast, constant-time, no parameter choices to get wrong
ssh-ed25519-cert-v01@openssh.com excellent Ed25519 host certificate — the host's key is vouched for by a CA, so clients need no known_hosts entry

Compression (3)

Almost always the right answer is none. The interesting case is `zlib` versus `zlib@openssh.com`: the same algorithm, but the second only switches on after authentication.

AlgorithmVerdict
zlib weak zlib enabled BEFORE authentication, so it compresses attacker-influenced data alongside secrets
none good no compression. The right default: compression before encryption leaks plaintext length
zlib@openssh.com good zlib, enabled only AFTER authentication. The delay is what makes it safe

How to read the ratings

These are judgements, not facts, and they are checkable — every verdict says why, so you can disagree with the reasoning rather than the score. When in doubt, prefer what your OpenSSH ships with by default: those defaults are chosen carefully, and the most common way to end up with weak cryptography is to override them.