Quali sono le migliori pratiche di ssh-keygen?

82

La maggior parte degli utenti digiterà semplicemente ssh-keygen e accetterà ciò che viene loro assegnato per impostazione predefinita.

Ma quali sono le migliori pratiche per generare ssh chiavi con ssh-keygen ?

Ad esempio:

  • Utilizza -o per il formato della chiave OpenSSH anziché il vecchio formato PEM (OpenSSH 6.5 ha introdotto questa funzione quasi 3 anni fa nel 2014-01-30 )

  • Come si dovrebbe calcolare quanti round di KDF utilizzare con -a ?

  • Dovrebbe essere usato -T per testare i numeri primi candidati per sicurezza? Quale valore di -a utilizzare con questo?

  • Per i diversi tipi di chiave, quali sono le dimensioni minime consigliate di -b ?

  • etc ... (ci sono una serie di opzioni da capogiro nella pagina del manuale ).

posta Tom Hale 24.11.2016 - 06:17
fonte

4 risposte

78

Raccomando l'articolo Secure Secure Shell , che suggerisce:

ssh-keygen -t ed25519 -a 100

Ed25519 è uno schema EdDSA con tasti di dimensioni molto ridotte (dimensioni fisse), introdotto in OpenSSH 6.5. Questi hanno una complessità simile a RSA a 4096 bit grazie a crittografia a curva ellittica (ECC). L'opzione -a 100 specifica 100 round di derivazioni chiave, rendendo la password della tua chiave più difficile da usare come forza bruta.

Tuttavia, Ed25519 è un algoritmo chiave piuttosto nuovo con incompleta adozione , quindi potrebbe non essere disponibile su tutti server. Per quelli, genera una chiave RSA a 4096 bit:

ssh-keygen -t rsa -b 4096 -o -a 100

(Una nota sull'opzione -o , poiché ora manca (!) dalla pagina man di ssh-keygen : questo impone l'utilizzo del nuovo formato OpenSSH per memorizzare la chiave piuttosto che l'impostazione predefinita precedente, PEM . Ed25519 già richiede questo, quindi non è necessario dichiararlo esplicitamente dato -t ed25519 . -o richiede il client OpenSSH v6.5 +, quindi potrebbe essere necessario saltarlo, ma è meglio mantenere per la sua "maggiore resistenza al cracking delle password brute-force" (come notato dalle pagine man precedenti). a href="https://security.stackexchange.com/questions/143114/what-is-the-difference-between-pem-format-to-dsa-rsa-ecc-might-i-confuse-pem-w/ 143124 # 143124 "title=" Qual è la differenza tra il formato PEM [... e il formato OpenSSH]? (Potrei confondere PEM con questi)? "> Questa risposta per maggiori dettagli.)

Non considerare l'altro nuovo algoritmo ECC chiamato ECDSA . È considerato sospetto (ha punti deboli noti e dal momento che il governo degli Stati Uniti è stato coinvolto nel suo sviluppo, potrebbe essere compromesso oltre a questo) . Ed25519 è stato sviluppato senza alcun coinvolgimento del governo noto.

Stai lontano dai codici DSA ("ssh-dss"): non sono solo sospetti, DSA non è sicuro .

    
risposta data 30.11.2016 - 23:17
fonte
16

Most users would simply type ssh-keygen and accept what they're given by default.

Sì. Per fare una sicurezza per le persone, deve essere semplice. Pertanto l'opzione predefinita dovrebbe essere sicura, compatibile e veloce. È possibile fornire alternative, ma il valore predefinito dovrebbe essere "abbastanza buono" per coloro a cui non interessa. Pertanto RSA (2048) nel vecchio formato PEM è l'impostazione predefinita al momento.

  • Use -o for the OpenSSH key format rather than the older PEM format (OpenSSH 6.5 introduced this feature almost 3 years ago on 2014-01-30)

Tre anni non sono niente. Molti contenitori sono riusciti a evolversi durante questi anni, ma SSH è qui da più di 20 anni e ha ancora bisogno di confrontarsi con i clienti più anziani. Il nuovo formato OpenSSH non è ancora ampiamente adottato e supportato.

  • How should one calculate how many rounds of KDF to use with -a?

Dipende dal caso d'uso. La creazione della chiave per il repository "stuff" su Github sarà diversa dalla creazione di chiavi in la tua agenzia nazionale preferita come autorità di certificazione o per accedere a documenti super-secret su server dedicato.

Come sottolineato, questo è solo per il nuovo formato, che non è ancora ampiamente utilizzato e aumenta il tempo di decodificare la chiave. Il numero predefinito di round è 16 (sarebbe bello vederlo documentato da qualche parte). Ulteriori informazioni nella domanda di crittografia .

  • Should -T be used to test the candidate primes for safety? What -a value to use with this?

No. Viene utilizzato per la generazione di numeri primi ( /etc/ssh/moduli ) per lo scambio di chiavi DH. Non è usato in alcun modo per generare chiavi SSH. Come generare e testare il file moduli è spiegato nel capitolo separato MODULI GENERATION della pagina manuale per ssh-keygen .

  • For the different key types, what are the recommended minimum -b bit sizes?

Questo non è specifico SSH, ma generalmente le dimensioni delle chiavi sono raccomandate dal NIST in questo documento , pagina 12 (per il 2015):

RSA (2048 bits)
ECDSA (Curve P-256)

L'Ed25519 ha una dimensione fissa, quindi il parametro -b viene ignorato.

    
risposta data 25.11.2016 - 22:46
fonte
3

Ecco un rivestimento per Ed25519 basato sui valori raccomandati: (senza passphrase)

ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519 -q -N ""

Un altro per RSA:

ssh-keygen -t rsa -b 4096 -o -a 100 -f ~/.ssh/id_rsa -q -N ""
  • -N : nuova passphrase
  • -q : silenzio ssh-keygen
risposta data 13.10.2017 - 08:15
fonte
-2

Per ulteriore protezione usa chattr su quelle chiavi, ad es. sudo chattr + /home/"username"/.ssh/id_rsa.pub (Anche su / etc / passwd e / etc / shadow ecc.)

    
risposta data 29.11.2018 - 21:40
fonte

Leggi altre domande sui tag