Il confronto
| Ed25519 | RSA 3072 | RSA 4096 | |
|---|---|---|---|
| Sicurezza stimata | Circa 128 bit | 128 bit | Tra 128 e 192 bit |
| File della chiave pubblica | 92 byte | 564 byte | 736 byte |
| File della chiave privata, senza passphrase | 399 byte | 2590 byte | 3369 byte |
| Scelta della dimensione | Nessuna, sempre 256 bit | Si imposta con -b | Si imposta con -b |
| Cosa serve dall'altra parte | OpenSSH 6.5 o successivo | Quasi qualsiasi server SSH | Quasi 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-keygenignora-bper 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-keygenrifiuta conInvalid RSA key length: minimum is 1024 bits. - 1024 bit: da non usare. Si può ancora generare, ma un server con un
RequiredRSASizepiù 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
- ssh-keygen(1), manuale OpenBSD
- Note di rilascio di OpenSSH 8.8
- Note di rilascio di OpenSSH
- RFC 8032, EdDSA
- NIST SP 800-57 Part 1 Rev. 5