Chiavi SSH RSA o ed25519: quale conviene usare?

Usa ed25519 per ogni nuova chiave. Dà all'incirca la stessa sicurezza di RSA 3072 con una chiave molto più corta, ed è supportato da ogni versione di OpenSSH dalla 6.5, del 2014. Usa RSA, con almeno 3072 bit, solo quando un server o un dispositivo non accetta ed25519. Una chiave RSA già esistente da 3072 o 4096 bit va ancora bene, quindi non c'è fretta di sostituirla.

Aggiornata il . Generazione delle chiavi, dimensioni e opzioni legacy provate con OpenSSH 10.0 su Debian 13, su un server di prova limitato al vecchio algoritmo ssh-rsa.

Il confronto

Ed25519RSA 3072RSA 4096
Sicurezza stimataCirca 128 bit128 bitTra 128 e 192 bit
File della chiave pubblica92 byte564 byte736 byte
File della chiave privata, senza passphrase399 byte2590 byte3369 byte
Scelta della dimensioneNessuna, sempre 256 bitSi imposta con -bSi imposta con -b
Cosa serve dall'altra parteOpenSSH 6.5 o successivoQuasi qualsiasi server SSHQuasi qualsiasi server SSH

Le dimensioni dei file vengono da chiavi che abbiamo generato con il commento you@laptop. Le stime di sicurezza vengono da RFC 8032 per ed25519 e da NIST SP 800-57 per RSA.

Cosa conta davvero

  • Meno scelte da sbagliare. Una chiave ed25519 ha una sola dimensione, quindi nessuno può crearne una debole per errore. ssh-keygen ignora -b per questo tipo: abbiamo chiesto 4096 e abbiamo ottenuto 256.
  • Chiavi pubbliche corte. Una riga che sta in un messaggio di chat o in un file di configurazione senza essere tagliata.
  • Protezione del file. Una chiave senza passphrase su un portatile rubato è esposta qualunque sia il suo tipo. Questo conta molto più della differenza tra i due algoritmi.

Per tenere ogni chiave e la sua passphrase in un posto solo, vedi il gestore di chiavi SSH con vault cifrato.

Generare ciascun tipo

ssh-keygen -t ed25519 -C "you@laptop"
ssh-keygen -t rsa -b 4096 -C "you@laptop"

Senza -b, le chiavi RSA sono da 3072 bit, il valore predefinito da OpenSSH 8.0. Da OpenSSH 9.5, ssh-keygen senza -t crea una chiave ed25519. Vedi come generare una chiave ed25519 per i passaggi completi.

Dimensioni delle chiavi RSA

  • Sotto i 1024 bit: ssh-keygen rifiuta con Invalid RSA key length: minimum is 1024 bits.
  • 1024 bit: da non usare. Si può ancora generare, ma un server con un RequiredRSASize più alto la rifiuta. Questa impostazione esiste da OpenSSH 9.1 e il suo valore predefinito è 1024.
  • 2048 bit: il NIST le attribuisce 112 bit di sicurezza. Funziona, ma è il vecchio minimo, quindi sostituiscila alla prossima rotazione delle chiavi.
  • 3072 o 4096 bit: usa una di queste se ti serve RSA.

Quando RSA è ancora la scelta giusta

  • Un server ha un OpenSSH precedente alla 6.5.
  • Un vecchio dispositivo di rete, appliance o sistema embedded elenca nella documentazione solo chiavi RSA.
  • Una regola di conformità o un sistema in modalità FIPS limita i tipi di chiave che puoi usare. Controlla l'elenco del tuo fornitore.

Puoi tenere una chiave per ogni tipo e usare RSA solo per gli host che ne hanno bisogno:

Host old-server
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes

Collegarsi a sistemi vecchi

Una chiave RSA non è la stessa cosa della firma fatta con essa. Da OpenSSH 8.8, il client non usa più la vecchia firma ssh-rsa, che si basa su SHA-1, a meno che tu non lo chieda. Lo stesso file di chiave funziona ancora con le firme più recenti rsa-sha2-256 e rsa-sha2-512, che OpenSSH supporta dalla 7.2.

Un server che conosce solo il vecchio algoritmo ti dà questo errore:

Unable to negotiate with 203.0.113.10 port 22: no matching host key type found. Their offer: ssh-rsa

Per quel solo host, e solo se non puoi aggiornarlo, riattiva il vecchio algoritmo:

ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa user@old-server

Questo indebolisce la connessione, quindi tienilo fuori da Host *. Una nuova chiave RSA qui non aiuta, perché il problema è la firma e non la chiave. Vedi anche no mutual signature supported e no matching key exchange.

DSA ed ECDSA

DSA non c'è più: OpenSSH 10.0 l'ha rimosso, e ssh-keygen -t dsa ora risponde unknown key type dsa. Sostituisci ogni chiave DSA che hai ancora. ECDSA funziona ed è molto supportato, ma non dà alcun vantaggio rispetto a ed25519 a meno che un sistema lo richieda.

Controllare le chiavi che hai

for f in ~/.ssh/*.pub; do ssh-keygen -lf "$f"; done

Il primo numero è la dimensione e l'ultima parola è il tipo, per esempio 3072 SHA256:... you@laptop (RSA).

Domande

RSA 4096 è più forte di ed25519?

Sulla carta ha una stima di sicurezza un po' più alta, ma entrambi sono molto oltre ciò che oggi si può attaccare, quindi non è un motivo per sceglierlo. Il rischio pratico è il furto del file della chiave privata, e in quel caso una passphrase aiuta con entrambi i tipi.

Posso convertire una chiave RSA in ed25519?

No. Sono tipi di chiave diversi. Genera una nuova chiave ed25519, aggiungi la sua chiave pubblica ai tuoi server, prova il login, poi rimuovi la vecchia chiave pubblica.

Un computer quantistico cambia la scelta?

No, non tra questi due: un computer quantistico abbastanza grande romperebbe entrambi. OpenSSH 10.6 attiva un tipo di chiave ibrido post-quantistico, creato con ssh-keygen -t mldsa44-ed25519, ma serve la 10.6 o successiva da entrambe le parti. Per lo scambio di chiavi, vedi la guida sull'avviso post-quantistico.

Fonti

Altro in Chiavi e accesso

Tutte le guide