Domanda:
RSA e DSA per le chiavi di autenticazione SSH
jrdioko
2011-07-09 04:22:01 UTC
view on stackexchange narkive permalink

Quando si generano chiavi di autenticazione SSH su un sistema Unix / Linux con ssh-keygen , è possibile scegliere di creare una coppia di chiavi RSA o DSA (utilizzando -t type ).

Qual è la differenza tra le chiavi RSA e DSA? Cosa porterebbe qualcuno a sceglierne uno rispetto all'altro?

@Bhanu Il valore predefinito di `ssh-keygen` da OpenSSH 6.3p1 è 2048 bit. Leggi le risposte di seguito e scoprirai anche che 2048 bit sono sufficienti.
In realtà, non vedo perché il suggerimento è di "scegliere la chiave più veloce". Penso che si voglia scegliere la chiave più lenta, che richiederebbe il tempo più lungo per decifrare; dato che l'autenticazione viene eseguita solo una volta e si può attendere il completamento dell'autenticazione per il tempo "in tempo reale" necessario per una funzione.
Il motivo per cui abbiamo DSA è che prima RSA aveva brevetti.Quindi DSA è stato implementato in strumenti open source.Ora tutti i brevetti di RSA sono scaduti.Quindi nessun vantaggio pratico nell'usare DSA su RSA.Gli strumenti mantengono il supporto per la retrocompatibilità e non c'è motivo di rimuoverli in quanto è anche uno dei buoni crypto
Otto risposte:
emboss
2011-07-09 21:11:49 UTC
view on stackexchange narkive permalink

Scegli RSA.

DSA è più veloce per la generazione della firma ma più lento per la convalida, più lento durante la crittografia ma più veloce quando la decrittografia e la sicurezza può essere considerata equivalente rispetto a una chiave RSA di uguale lunghezza della chiave. Questa è la battuta finale, ora qualche giustificazione.

La sicurezza dell'algoritmo RSA si basa sul fatto che la fattorizzazione di numeri interi grandi è nota per essere "difficile", mentre la sicurezza DSA si basa sul problema del logaritmo discreto. Oggi l'algoritmo più veloce conosciuto per la fattorizzazione di numeri interi di grandi dimensioni è il General Number Field Sieve, anche l'algoritmo più veloce per risolvere il problema del logaritmo discreto in campi finiti modulo un grande primo p come specificato per DSA.

Ora, se la sicurezza può essere considerata uguale, ovviamente preferiremmo l'algoritmo più veloce. Ma ancora una volta, non c'è un vincitore chiaro.

Puoi dare un'occhiata a questo studio o, se hai OpenSSL installato sul tuo computer, eseguire openssl speed codice>. Vedrai che DSA funziona più velocemente nella generazione di una firma ma molto più lentamente quando verifica una firma della stessa lunghezza di chiave. La verifica è generalmente ciò che vuoi essere più veloce se gestisci ad es. con un documento firmato. La firma viene generata una volta, quindi va bene se questo richiede un po 'più di tempo, ma la firma del documento può essere verificata molto più spesso dagli utenti finali.

Entrambi supportano una qualche forma di metodo di crittografia, RSA fuori dal box e DSA utilizzando un El Gamal. DSA è generalmente più veloce nella decrittografia ma più lento per la crittografia, con RSA è il contrario. Ancora una volta, vuoi che la decrittografia sia più veloce qui perché un documento crittografato potrebbe essere decrittografato molte volte.

In termini commerciali, RSA è chiaramente il vincitore, i certificati RSA commerciali sono molto più ampiamente distribuiti rispetto ai certificati DSA.

Ma ho salvato l'argomento killer per la fine: man ssh-keygen dice che una chiave DSA deve essere lunga esattamente 1024 bit per essere conforme a FIPS 186-2 NIST a>. Quindi, sebbene in teoria siano possibili chiavi DSA più lunghe (FIPS 186-3 le consente esplicitamente), sei comunque limitato a 1024 bit. E se prendi le considerazioni di questo [articolo], non siamo più protetti con 1024 bit per RSA o DSA.

Quindi, oggi, stai meglio con un RSA 2048 o 4096 bit chiave.

Mi spiace, hai sbagliato su diversi punti. DSA è definito in un campo finito di dimensione _p_ dove _p_ è un numero intero grande primo, _non_ una potenza di 2. Per quanto riguarda il logaritmo discreto, un campo finito di dimensione _2 ^ 1024_ è più debole di un campo finito di dimensione _p_, con un algoritmo specifico (progettato da Coppersmith) che è più veloce del calcolo dell'indice. L'attuale FIPS 186 è FIPS 186-3, e questo consente chiavi DSA più lunghe di 1024 bit (e `ssh-keygen` può creare chiavi DSA a 2048 bit). Nel caso di SSH (lato client) non si tratta di crittografia, solo firme.
Sebbene FIPS-3 consenta chiavi di lunghezza maggiore, l'attuale ssh-keygen (Fedora 15) * non * -> ssh-keygen -t dsa -b 2048 -> le chiavi DSA devono essere 1024 bit. Sebbene SSH coinvolga solo le firme, penso che sia ancora rilevante sottolineare la differenza. Hai ragione sulla definizione di DSA su Zp, lo cambierò. Grazie per le tue osservazioni!
oh sì, `ssh-keygen` attualmente rifiuta le chiavi DSA più lunghe di 1024 bit. Ma c'era una versione (integrata in OpenBSD) che consentiva chiavi DSA più grandi.
@Thomas, si chiama `openssl gendsa`. (Il formato della chiave è lo stesso.)
* DSA [...] è più veloce quando la decrittografia * non è corretta: DSA può solo firmare / convalidare, non è presente la crittografia incorporata.
@emboss:I non capisce questa risposta.DSA NON è uno schema di crittografia, è uno schema di convalida della firma
Il collegamento all'articolo che spiega perché 1024 bit sono insufficienti sembra mancare. Puoi per favore, fornirne uno dato che ero interessato al motivo?
È ancora vero alla fine del 2014?
@emboss Se stai chiamando la libreria OpenSSL direttamente nel tuo programma, puoi effettivamente ottenere DSA con più di 1024 bit.
@pablox praticamente sì, i più paranoici useranno chiavi RSA a 4096 bit. ed25519 (vedi la risposta di Shnatsel) potrebbe essere un'opzione per alcuni, ma probabilmente ci vorranno ancora qualche anno prima che si possa assumere con sicurezza che ogni host a cui vogliono accedere lo supporti.
C'è anche il GnuPG sul perché RSA 4096 non è l'impostazione predefinita (https://www.gnupg.org/faq/gnupg-faq.html#no_default_of_rsa4096). Fondamentalmente si riduce a: "Perché non ci dà quasi nulla, mentre ci costa un bel po '.".
Per quanto riguarda la generazione di chiavi DSA maggiori di 1024, lo strumento PuTTYgen di PuTTY può anche generare chiavi DSA di dimensioni arbitrarie. Ho appena generato una chiave SSH-2 DSA a 20480 bit. In realtà, sono nel bel mezzo di farlo. Sembra che ci voglia un po '(circa 20 minuti e ancora in corso).
@PaŭloEbermann cosa intendi che DSA può solo firmare / convalidare?
@jayarjo Sì, DSA non è un algoritmo di crittografia, ma solo una firma.(Esistono algoritmi di crittografia basati sulla matematica correlata, ad esempio ElGamal, ma non sono DSA.)
DSA può ora essere utilizzato per la crittografia: https://www.thesecuritybuddy.com/encryption/dsa-vs-rsa/
Shnatsel
2013-12-10 22:42:41 UTC
view on stackexchange narkive permalink

In questo momento la domanda è un po 'più ampia: RSA contro DSA contro ECDSA contro Ed25519 . Quindi:

Una presentazione al BlackHat 2013 suggerisce che sono stati compiuti progressi significativi nella risoluzione dei problemi sulla complessità di cui la forza dei DSA e alcuni altri gli algoritmi sono fondati, quindi possono essere matematicamente rotti molto presto. Inoltre, l'attacco può essere possibile (ma più difficile) da estendere anche a RSA.

La presentazione suggerisce invece di utilizzare la crittografia a curva ellittica. Gli algoritmi ECC supportati da OpenSSH sono ECDSA e, a partire da OpenSSH 6.5, Ed25519.

OpenSSH supporta solo curve NIST per ECDSA e secondo questo studio quelle curve sembrano davvero sospette per le backdoor NSA. E se la NSA è già in grado di decifrarle, allora non sarà così difficile da decifrare per qualcun altro come sarebbe una curva corretta. Ed25519 è la stessa cosa ma con una curva migliore, quindi è la scommessa più sicura contro l'algoritmo sottostante che viene infranto matematicamente .

Inoltre, DSA ed ECDSA hanno una proprietà sgradevole: richiedono che un parametro solitamente chiamato k sia completamente casuale, segreto e unico. In pratica ciò significa che se ti connetti al tuo server da una macchina con un generatore di numeri casuali scadente e ad es. lo stesso k viene utilizzato due volte, un osservatore del traffico può capire la tua chiave privata. (fonte: Wikipedia su DSA e ECDSA, anche questo).

La conclusione è:

  • Non utilizzare mai DSA o ECDSA .
  • Ed25519 è probabilmente il più potente matematicamente (e anche il più veloce), ma non ancora ampiamente supportato. Come bonus, ha una crittografia più forte (protezione tramite password) della chiave privata per impostazione predefinita rispetto ad altri tipi di chiave.
  • RSA è la soluzione migliore se non puoi utilizzare Ed25519 .
Ed25519 non usa un * k * casuale (lo deriva invece dalla chiave privata e dal messaggio), quindi è necessario solo un PRNG per generare la chiave, ma non per firmare. Con DSA ed ECDSA molte implementazioni falliscono è il PRNG è cattivo, ma ci sono modi per implementarlo in modo che sopravviva a PRNG cattivi, ad esempio utilizzando la variante deterministica di Pornin.
I recenti progressi del logaritmo discreto sono stati un piccolo campo caratteristico. Non esiste un modo ovvio per trasferirlo a DSA su campi caratteristici primari o RSA. RSA e DSA sui campi principali sono probabilmente più vicini l'uno all'altro dal punto di vista della sicurezza che DSA sui campi principali è rispetto a DSA sui piccoli campi caratteristici. I progressi nel factoring o nel DL possono verificarsi, ma dovranno andare ben oltre i recenti progressi, quindi abbandonare DSA e / o RSA su questi è un allarmismo inutile. È altrettanto possibile che qualcuno rompa l'ECC.
Sì, mi dà fastidio sentire qualcuno dire "abbandona DSA". Non sono un matematico, né la maggior parte degli utenti di crittografia a chiave pubblica, ma abbandonerei qualcosa solo se ci fosse una minaccia davvero imminente e certamente non adotterei qualcosa di relativamente nuovo fino a quando non fosse stato ampiamente testato sul campo e dimostrato di essere sicuro. Come sappiamo che questo utente non è la NSA che dice che la NSA può rompere più facilmente DSA ed ECDSA, in modo che passiamo ad algoritmi che possono rompere. Oh, quelle fastidiose agenzie di intelligence, ti lasceranno a bocca aperta!
Usa [Ed25519] (https://en.wikipedia.org/wiki/EdDSA) oppure [RSA] (https://en.wikipedia.org/wiki/RSA_%28cryptosystem%29) con chiavi a 4096 bit. Vedi anche l'articolo ben diffuso [secure secure shell] (https://stribika.github.io/2015/01/04/secure-secure-shell.html).
@bitsum La [questione RNG] (http://meyering.net/nuke-your-DSA-keys/) è reale e "imminente". OpenSSH può generare solo chiavi DSA a 1024 bit, che sono troppo deboli. Sebbene possa utilizzare chiavi a 2048 e 3072 bit [generate da OpenSSL] (https://digitalelf.net/2014/02/using-2048-bit-dsa-keys-with-openssh/), è una seccatura. Inoltre, a partire da OpenSSH 7.0, [DSA è disabilitato per impostazione predefinita] (http://www.openssh.com/legacy.html). Vedi anche [la mia risposta Stack Overflow] (https://stackoverflow.com/questions/2821736/whats-the-difference-between-id-rsa-pub-and-id-dsa-pub/27855045#27855045). Vuoi provato e vero? Usa RSA a 4096 bit.
@AdamKatz Avvicinandomi un anno dopo, sono propenso a essere d'accordo con te. La possibilità di un RNG rotto o comunque inadeguato, essendo un obiettivo primario, è una preoccupazione precisa per DSA. Contrariamente al mio commento precedente, ho smesso di usare DSA da solo alcuni mesi fa.
Thomas Pornin
2011-07-10 03:12:57 UTC
view on stackexchange narkive permalink

In SSH, sul lato client, la scelta tra RSA e DSA non ha molta importanza, perché entrambi offrono una sicurezza simile per la stessa dimensione della chiave (usa 2048 bit e sarai felice).

Storicamente, la versione 1 del protocollo SSH supportava solo le chiavi RSA. Quando è stata definita la versione 2, RSA era ancora brevettata, quindi è stato aggiunto il supporto di DSA, in modo che potesse essere realizzata un'implementazione opensource priva di brevetto. Il brevetto RSA è scaduto più di 10 anni fa, quindi non ci sono più preoccupazioni.

Teoricamente, in alcune situazioni molto specifiche, puoi avere un problema di prestazioni con l'una o l'altra: se il server è molto piccolo macchina (ad esempio, un i486), preferirà client con chiavi RSA, perché la verifica di una firma RSA è meno costosa dal punto di vista computazionale rispetto alla verifica di una firma DSA. Al contrario, una firma DSA è più corta (in genere 64 byte contro 256), quindi se sei molto a corto di larghezza di banda preferiresti DSA. Ad ogni modo, avrai difficoltà a rilevare quegli effetti, per non parlare di trovarli importanti.

Sul server , è preferibile una chiave DSA, perché quindi lo scambio di chiavi utilizzerà una chiave Diffie-Hellman transitoria, che apre la strada a "Perfect Forward Secrecy" (cioè se un malintenzionato ruba la chiave privata del server, non può ancora decrittare le connessioni passate che avrebbe registrato).

Puoi approfondire il rischio di utilizzare una chiave RSA sul lato server?
@jrdioko: durante la connessione, viene stabilita una chiave di sessione, utilizzando un meccanismo di scambio di chiavi come RSA (crittografia) o Diffie-Hellman. Una chiave privata corrispondente viene utilizzata sul server. Se quella chiave è transitoria (generata al volo, conservata solo nella RAM, scartata dopo l'uso), allora è sicura contro il successivo furto. Quando la chiave del server (quella che è permanente, memorizzata in un file) è solo per le firme (ad esempio la chiave DSA), allora sei sicuro che la chiave di scambio della chiave sia transitoria (la chiave pubblica viene quindi firmata dal server), e quello è buono.
Non si può usare DHE anche con la firma RSA?
@Paŭlo: in realtà, con SSHv2, DHE viene sempre utilizzato, anche con una chiave RSA. L'uso di una chiave DSA è solo un modo semplice per essere sicuri di ottenere PFS, perché non può essere utilizzato altrimenti.
OpenSSH memorizza le chiavi SSH versione 1 e 2 RSA in file diversi e 1 non è nemmeno più abilitato di default. Sarebbe difficile usare accidentalmente la versione 1, almeno in OpenSSH.
lxgr
2013-08-30 03:35:24 UTC
view on stackexchange narkive permalink

Un altro importante vantaggio di RSA rispetto a DSA ed ECDSA è che non è mai necessario un generatore di numeri casuali sicuro per creare firme.

Per generare una firma, (EC) DSA ha bisogno di un valore che deve essere casuale, segreto / imprevedibile e non può essere mai più utilizzato. Se una di queste proprietà viene violata, è possibile recuperare banalmente la chiave privata da una o due firme .

Questo è già successo (una volta con una patch non funzionante di OpenSSL PRNG in Debian, e una volta con un bug nell'implementazione SecureRandom di Android), ed è piuttosto difficile da prevenire completamente.

Con RSA, in quelle situazioni solo la tua chiave di sessione temporanea sarebbe stata compromessa, se la chiave di autenticazione effettiva le coppie sono state create utilizzando un PRNG correttamente inizializzato in precedenza.

Teoricamente, esiste un modo per far dipendere le firme DSA (EC) dal messaggio e dalla chiave privata, il che può evitare fallimento in caso di un RNG rotto, ma fino a quando questo non viene integrato nel tuo client SSH (non esiste una versione di rilascio di OpenSSL che includa la patch in questo momento), preferirei sicuramente le chiavi RSA.

Quel vantaggio di cui parli: ora sappiamo tutti che il generatore di numeri casuali RSA non è così casuale. Non so se conta molto, ma comunque ...
@rxt questo è un problema tangenziale, è l'RNG predefinito in un prodotto specifico venduto da RSA la società, niente a che fare con il protocollo crittografico a chiave pubblica RSA originale.
CuriousFab
2015-09-10 20:52:27 UTC
view on stackexchange narkive permalink

Non sapendo molto di crittografia, come utente di OpenSSH mi atterrei a un semplice fatto: in http://www.openssh.com/legacy.html, che afferma che SHA1 è ora disabilitato per impostazione predefinita perché è considerato debole:

OpenSSH 7.0 e versioni successive disabilitano in modo simile l'algoritmo della chiave pubblica ssh-dss (DSA) . Anch'esso è debole e ne sconsigliamo l'uso.

Tom Leek ha spiegato che in "[Perché OpenSSH ha deprecato le chiavi DSA] (http://security.stackexchange.com/a/112818/66454)": in poche parole, è una conseguenza della loro pratica di codifica e dell'incapacità di rimanere alla paricon gli standard attuali.
La lettura di questo a marzo 2017 dà una nuova luce a questo commento.SHA1 è stato rotto, quindi OpenSSH ha preso una buona decisione deprecando SHA1.Quindi penso che mi fiderò di loro sulla deprecazione dei DSA.
robmuh
2014-02-09 23:13:34 UTC
view on stackexchange narkive permalink

La matematica potrebbe non avere importanza. Questo thread sembra pre-Snowden. Ecco un articolo Reuters datato 20 dicembre 2013:

(Reuters) - Come parte fondamentale di una campagna per incorporare software di crittografia che potrebbe essere utilizzato ampiamente Reuters ha appreso che la US National Security Agency ha stipulato un contratto segreto da 10 milioni di dollari con RSA, una delle aziende più influenti nel settore della sicurezza informatica.

Documenti trapelati dall'ex appaltatore della NSA Edward Snowden mostrano che La NSA ha creato e promulgato una formula viziata per la generazione di numeri casuali per creare una "porta di servizio" nei prodotti di crittografia, ha riferito il New York Times a settembre. Reuters ha successivamente riferito che RSA è diventato il distributore più importante di quella formula inserendola in uno strumento software chiamato Bsafe che viene utilizzato per migliorare la sicurezza nei personal computer e in molti altri prodotti.

Finora non è stato divulgato che RSA ha ricevuto $ 10 milioni in un accordo che ha impostato la formula NSA come metodo preferito o predefinito per la generazione di numeri nel software BSafe, secondo due fonti che hanno familiarità con il contratto. Sebbene questa somma possa sembrare irrisoria, rappresentava più di un terzo delle entrate che la divisione pertinente di RSA aveva incassato durante l'intero anno precedente, come mostrano le dichiarazioni di titoli.

Durante questo venerdì della scienza podcast Ira chiede a Matt Green, Martin Hellman (inventore di Public Key Cryptography) e Phil Zimmerman (creatore di PGP) cosa pensano che la NSA abbia decifrato:

(intorno alle 17: 26)

Ira : Quali sono alcune delle cose in cui sappiamo che la NSA ha violato?

Matt : Quindi abbiamo sentito una serie di cose che probabilmente possiamo accreditare per davvero. ... generatori di numeri casuali ... sappiamo che la NSA attraverso il NIST ... ha molto probabilmente messo delle porte secondarie in alcuni di quegli algoritmi standard che consentono loro di rompere essenzialmente quei sistemi completamente.

Ira : Vuoi dire che la NSA ha creato quelle porte sul retro?

Matt : È esattamente vero. Quindi il NIST lavora con la NSA --- e sono tenuti a farlo per legge. Pensavamo che la NSA stesse aiutando il NIST sviluppando standard più sicuri da utilizzare per gli americani. Ora sospettiamo - e abbiamo forti prove per credere - che la situazione fosse esattamente l'opposto; che il NIST veniva utilizzato per pubblicare standard che la NSA poteva infrangere.

Considerando queste recenti rivelazioni, la forza degli algoritmi sembra in gran parte irrilevante. RSA sembra essere stata una società privata in qualche modo acquistata dalla NSA e DSA è stata creata dallo stesso NIST, che, secondo questi esperti, è in gran parte una copertura per la ricerca crittografica della NSA.

In altre parole, è davvero non importa se stai usando i generatori di numeri casuali forniti con praticamente qualsiasi computer moderno, cosa che fanno OpenSSH e altri.

Scegli quello che è il più veloce per quello che vuoi. Nel mio caso, riutilizzo la stessa chiave per molte cose, quindi la maggiore velocità di generazione di DSA è meno desiderabile. Inoltre, forse c'è qualche folle possibilità che RSA fosse in realtà un'entità indipendente da NIST e NSA, mentre sappiamo che DSA è stato creato da NIST.

Personalmente uso solo chiavi a 1028 bit perché, come abbiamo visto , non importa a meno che qualcuno non ti stia ponendo dei requisiti che crede ancora che chiavi più grandi ti proteggeranno. L'intera cosa è in gran parte solo un fastidio per chiunque cerchi di entrare.

Giusto. Ho aggiunto le citazioni pertinenti e trascritto parte dell'audio. Grazie per il promemoria.
Sicuramente intendi chiavi a 1024 bit?
La tua risposta non è del tutto coerente. Stai mescolando fatti su un RNG sviluppato dalla società RSA che sembra essere stato manomesso, e sugli algoritmi di chiave pubblica / privata chiamati RSA (sviluppati dai fondatori della suddetta società). L'algoritmo RSA (con chiavi abbastanza grandi) non può essere facilmente violato a meno che tu non abbia un cluster ottimizzato per mostri o un computer quantistico. Per quanto riguarda DSA, questo potrebbe essere pubblicato dal NIST (non ho controllato) ma le pubblicazioni NIST sono anche sottoposte a revisione paritaria da altri crittografi indipendenti. Ad esempio, hanno avvertito del dubbio RNG approvato dal NIST.
Il fatto che il prodotto BSAFE di RSA Inc abbia utilizzato Dual EC DRBG come generatore di numeri casuali * predefinito * (nemmeno l'unico offerto) non ha * nulla * a che fare con le proprietà di sicurezza dell'algoritmo RSA * * o con le proprietà di sicurezza diqualsiasi software che non è stato o non è stato creato per utilizzare BSAFE.Se hai intenzione di lanciare teorie del complotto, almeno ottieni i fatti giusti.C'è abbastanza per incolpare la NSA (e molte altre agenzie di intelligence in tutto il mondo), e ci sono buone ragioni per incolpare RSA per il default, senza bisogno di fare affermazioni che non hanno alcun fondamento nella realtà.
fpmurphy
2011-07-09 19:57:23 UTC
view on stackexchange narkive permalink

RSA e DSA sono due algoritmi completamente diversi. Le chiavi RSA possono arrivare fino a 4096 bit, dove DSA deve essere esattamente 1024 bit (sebbene OpenSSL ne consenta di più). Secondo Bruce Schneier, "sia DSA che RSA con la stessa lunghezza sono quasi identici in termini di difficoltà da decifrare."

FIPS 186-2 ha limitato il modulo a 512-1024 bit. Ma il FIPS 186-3 revisionato, pubblicato nel 2009, limita il modulo a 1024, 2048 o 3072 bit.
user37069
2014-01-13 15:21:32 UTC
view on stackexchange narkive permalink

Il problema con ECDSA non sono tanto le backdoor. Bernstein / Lange menzionano specificamente che la crittoanalisi delle curve non attacca curve specifiche, ma classi di curve (vedi diapositiva 6).

Il problema con ECDSA è che le curve NIST sono difficili da implementare correttamente (es. tempo costante e con tutte le verifiche appropriate) rispetto a Curve25519. OpenSSL ha un ' implementazione P256 a tempo costante, quindi OpenSSH è sicuro sotto questo aspetto.

Se sei ancora preoccupato per le curve NIST, OpenSSH ha recentemente aggiunto il supporto per lo schema Ed25519



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...