Qualcuno può spiegare cosa si ottiene esattamente generando parametri DH?

34

Sto configurando un server node.js:

https.createServer({
    ...
    ciphers: 'ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH',
    honorCipherOrder: true
}, app).listen(443);

Questo è in grado di ottenere un punteggio SSLLabs, che è buono. Ora, sembra che tutte le negoziazioni nella simulazione dell'handshake vengano eseguite utilizzando TLS_RSA_WITH_RC4_128_SHA .

RC4 è resiliente contro BEAST. Se siamo vulnerabili a BEST non possiamo ottenere un rating A.

Vorrei supportare PFS (inoltro segreto) se supportato dal client.

Sulla base della mia lettura, "devo generare un po 'di casualità" generando i parametri Diffie-Hellman e ottenerlo nei miei certificati in qualche modo, prima che il server implementi correttamente l'ECDHE per la segretezza futura. Ho letto da qualche parte che ECDHE richiede meno risorse della CPU rispetto a DHE, quindi questo è un vantaggio.

Bene, ho un sacco di domande. Ma chiederò il primo:

Perché devo generare "alcuni casualità " da aggiungere ai certificati, a che scopo serve e cosa fa effettivamente il comando? La pagina OpenSSL su dhparam non mi dice molto su cosa effettivamente fa.

Ho visto questa risposta e sto cercando una spiegazione più chiara (o almeno riferimenti alla lettura pertinente !).

Secondo OpenSSL Ciphers sembra che ECDHE sia una crittografia TLS 1.2. Su pagina PFS di Qualys si dice che ECDHE è supportato da tutti i principali browser moderni, eppure vedo iOS6 solo nei risultati del mio test SSLLabs che si collega tramite TLS1.2. Immagino di poter prendere la sezione "Simulazione handshake" con una grana di sale.

Un'altra domanda è: perché SSLLabs valuta con una A se lascio la voce HIGH nella lista di codici: questo avrebbe il server che supporta una connessione, ad es. TLS_RSA_WITH_AES_128_CBC_SHA (il report indica tanto), che è vulnerabile a BEAST! Forse perché non è mai stato testato con un "client" che non riporta alcun supporto per RC4.

Un'altra domanda: nella pagina Cipressi OpenSSL l'elenco delle suite di crittografia TLS 1.2 include:

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256     ECDHE-RSA-AES128-SHA256

Questo indica che se ottengo il collegamento con ECDHE che è ora vulnerabile anche a BEAST, a causa dell'uso di CBC? Per esempio. Dovrei cambiarlo per fare come fa Google: ECDHE con RC4. Ma la pagina Ciphers non include nulla che assomigli ad ECDHE-RSA-RC4-SHA. Esiste tuttavia un ECDHE-ECDSA-RC4-SHA. Come è diverso? Modifica: questa risposta SO indica che ECDSA è qualcosa di separato da RSA. Mi piacerebbe replicare ciò che Google sta facendo con ECDHE_RSA + RC4 + SHA in quanto sembra la perfetta combinazione di prestazioni e sicurezza.

Altre note (per favore, dimmi se ho frainteso le cose, specialmente le dichiarazioni travestite da domande):

La resilienza BEAST è controllata attraverso la selezione del codice simmetrico (RC4 vs AES, ecc.). Le modalità di AES che non usano CBC non sono supportate da molti client? Quindi dovremmo semplicemente evitare AES del tutto ...? PFS può essere ottenuto tramite l'uso dello scambio di chiavi Diffie-Hellman, e solo le modalità che includono DHE o ECDHE soddisfano questo. Solo OpenSSL supporta la perfetta segretezza in avanti. RC4 è più veloce di AES. RC4 è migliore di AES (a causa di BEAST)?

Un'altra modifica: vediamo ... qui indica che BEAST non è qualcosa da essere < em> troppo realisticamente preoccupati, anche se influisce negativamente sulla valutazione di SSLLabs. Quella grande "A" sembra così buona ... Vediamo ... Probabilmente dovrei ancora inserire i cifrari RC4_128 all'inizio della catena di cifratura se non altro per il fatto che non sono stati mostrati come "infranti" e più veloce di AES in generale. Ad ogni modo, mi sono allontanato molto dall'argomento originale che è l'ECDHE. E come ottenere correttamente i parametri DH lavorando con Node / Express?

    
posta Steven Lu 30.06.2013 - 06:47
fonte

4 risposte

35

Il tradizionale scambio basato su RSA in SSL è bello in quanto una chiave di sessione casuale viene generata e trasmessa utilizzando la crittografia asimmetrica, quindi solo il proprietario della chiave privata può leggerla. Ciò significa che la conversazione non può essere decifrata da nessuno a meno che non abbia la chiave privata del certificato. Ma se una terza parte salva il traffico crittografato e alla fine acquisisce la chiave privata, può utilizzarla per decrittografare la chiave di sessione dallo scambio SSL e quindi usarla per decrittografare l'intera sessione. Quindi questo è non perfetto segreto in avanti.

La chiave qui per Perfect Forward Secrecy è lo scambio di chiavi Diffie-Hellman . DH è un algoritmo molto interessante per generare una chiave condivisa tra due parti in modo tale che un osservatore che vede tutto - l'intero scambio tra le due parti in chiaro - non può derivare la chiave solo da ciò che è inviato sul filo. La chiave segreta derivata viene utilizzata una volta, mai memorizzata, mai trasmessa e non può essere mai più riprodotta da nessuno. In altre parole, perfetto segreto in avanti.

Il DH da solo non può proteggerti perché è banale giocare a man-in-the-middle dato che non c'è identità e autenticazione. Quindi puoi continuare a utilizzare RSA per l'autenticazione e utilizzare Diffie-Hellman per generare la chiave di sessione. Questo è DHE-RSA-* , quindi ad esempio: DHE-RSA-AES128-SHA1 è una specifica di crittografia che utilizza Diffie-Hellman per generare la chiave, RSA per l'autenticazione, AES-128 per la crittografia e SHA1 per i digest.

Ma Diffie-Hellman richiede alcuni parametri di impostazione per cominciare. Questi non sono segreti e possono essere riutilizzati; in più richiedono diversi secondi per generare. Ma dovrebbero essere "puliti", generati da te in modo che tu sappia che non sono forniti da un aggressore. Il passo dhparam genera i parametri DH (per lo più solo un singolo numero primo grande) in anticipo, che vengono quindi archiviati per il server da utilizzare.

Alcuni recenti studi hanno dimostrato che mentre "interrompere" uno scambio di DH (ovvero derivare la chiave dal traffico) è difficile, una buona parte di quel difficile lavoro può essere fatto in anticipo semplicemente basandosi sui primi. Ciò significa che se gli stessi primer DH vengono utilizzati ovunque, quelli diventano un obiettivo "primo" per le agenzie ben finanziate per eseguire i loro calcoli contro. Questo suggerisce che c'è una certa quantità di sicurezza aumentata nel generare i propri numeri primi (piuttosto che fare affidamento su quelli forniti con il software), e forse nel rigenerarli periodicamente.

Un bit interessante è che curva ellittica Diffie-Hellman è uno scambio Diffie-Hellman modificato che utilizza la crittografia a curva ellittica invece dei tradizionali numeri primi in stile RSA. Quindi, anche se non sono sicuro di quali parametri potrebbe aver bisogno (se ce ne sono), non penso che abbia bisogno del tipo che stai generando.

Vedi anche:

Rispetto a BEAST
L'attacco BEAST si basa su alcuni artefatti del metodo di concatenamento dei blocchi utilizzato con AES su versioni precedenti di SSL. Le versioni più recenti di SSL fanno le cose per bene, quindi non preoccuparti. RC4 non è un codice a blocchi, quindi non c'è concatenamento di blocchi. L'attacco BEAST è così assurdamente difficile da portare fuori che le sue implicazioni nel mondo reale sono decisamente inesistenti. In effetti, RC4 ha alcuni punti deboli, specialmente quando ha abusato del modo in cui l'attacco BEAST avrebbe dovuto fare. Quindi potresti non avere una sicurezza migliore.

Sicuramente forzare TLS 1.2 risolverebbe tutti i tuoi problemi di sicurezza teorici, impedendo allo stesso tempo a molti visitatori di connettersi realmente. Non del tutto diverso dall'uso di ECDHE.

    
risposta data 30.06.2013 - 07:47
fonte
10

In una suite di crittografia "DHE", il server genera al volo un nuovo Diffie-Hellman coppia di chiavi, firma la chiave pubblica con la sua chiave privata RSA o DSA o ECDSA e la invia al cliente. Il tasto DH è "effimero", il che significa che il server non lo memorizza mai sul suo disco; lo tiene nella RAM per tutta la durata dell'handshake SSL, quindi lo dimentica del tutto. Non viene mai memorizzato, non può essere rubato in seguito, ed è ciò che viene dalla PFS . Si noti che questa azienda DH non inserisce mai il certificato: il certificato del server contiene la chiave pubblica permanente del server, di tipo RSA o DSA o ECDSA e utilizzato solo per le firme.

Diffie-Hellman, in generale, è un algoritmo calcolato in un gruppo finito dove i calcoli sono facili, ma logaritmo discreto è difficile. Nel DH "semplice", il gruppo consiste in alcuni interi modulo un grande primo p , con moltiplicazione come legge di gruppo. I parametri DH sono la definizione di quel gruppo, ovvero il grande primo p e il generatore convenzionale g . Per sicurezza, non c'è alcun problema nel riutilizzare gli stessi parametri per diverse coppie di chiavi, incluso l'uso degli stessi parametri DH di qualcun altro. Ciò che è necessario è che i parametri siano "giusti", cioè che il primo p sia stato generato in modo casuale, e non appositamente predisposto per rendere semplice il modulo discreto per il logaritmo.

Generare i propri parametri DH è un modo per "assicurarsi" di utilizzare correttamente i parametri DH casuali. E 'più rituale che scientifico, però: la libreria server SSL dovrebbe avere parametri DH predefiniti che vanno bene, e già, per definizione, tieni fede alla libreria SSL per non giocare brutti scherzi con te.

ECDHE segue le stesse linee, tranne che applica DH in un altro gruppo, vale a dire curva ellittica . Le curve ellittiche hanno alcuni vantaggi computazionali, ma sono meno supportate (ancora). L'analogo di generare i propri parametri DH sarebbe scegliere la propria curva casuale. Nessuno lo fa davvero, perché:

  • Generare una curva casuale con caratteristiche appropriate è un'operazione complessa e costosa.
  • I vantaggi computazionali delle curve ellittiche provengono in parte da entrambe le parti (client e server) ottimizzati per una curva specifica. Generare la tua curva casuale lo sconfiggerebbe.

Per quanto riguarda la BESTIA, non preoccuparti troppo. Si tratta di un attacco al client , non sul server, e i client moderni includono soluzioni alternative (la "divisione 1 / n-1", in particolare). È un bel attacco, ma non funziona più. L'unica cosa che il server poteva fare al riguardo era forzare un vecchio client inconsapevole ad usare RC4 (che non è vulnerabile dalla costruzione).

Notare che BEAST si applica solo a SSL 3.0 e TLS 1.0. Con TLS 1.1 e 1.2, BEAST non funziona affatto, anche se il codice simmetrico è un codice a blocchi in modalità CBC.

    
risposta data 01.07.2013 - 15:17
fonte
0

Gli attacchi NSA su RSA hanno manipolato il PRNG (numeri casuali). È una scommessa giusta che non è l'unico PRNG con cui hanno incasinato. Ecco un generatore casuale non basato su hardware USA che potrebbe essere utile esaminare: link

    
risposta data 25.12.2013 - 01:06
fonte
0

RC4 is resilient against BEAST.

È vero che l'uso di un codice di flusso evita BEAST e POODLE, tuttavia RC4 ha problemi di suo. Il keytream ha pregiudizi noti che possono far trapelare informazioni.

RC4 è stato brevemente consigliato durante un periodo di tempo dopo che la bestia è stata scoperta, ma prima si è realizzato quanto fossero pessimi i problemi di bias del keystream in RC4.

If we are vulnerable to BEAST we cannot get an A rating.

Questo potrebbe essere vero in un punto, non lo è più.

I ragazzi di qualità giudicano la bestia meno malvagia di RC4.

Why must I generate "some randomness" to append to the certificates, what purpose does it serve, and what does the command actually do? The OpenSSL page on dhparam doesn't tell me a lot about what it actually does.

dhparam genera parametri usati per diffie-hellman convenzionale (non ECDH). Questi parametri non sono segreti ma per essere sicuri di DH devono soddisfare alcune condizioni. Ci sono alcuni motivi per cui potresti voler generare i tuoi parametri.

  1. I parametri forniti con il software potrebbero essere troppo brevi. Sebbene il 1024 bit dh non sia stato pubblicamente rotto, si sospetta che alcuni aggressori ben finanziati possano averlo fatto.
  2. Gran parte del lavoro di cracking dh è per set di parametri non per sessione. Quindi, utilizzando gli stessi parametri di chiunque altro, un utente malintenzionato può riutilizzare il proprio lavoro per rompere molte sessioni da server diversi.
  3. È possibile creare parametri backdoor che possono essere facilmente incrinati dall'entità che li ha generati ma che stanno bene a tutti gli altri. Quanto più paranoico potrebbe preoccuparsi che i parametri forniti con il loro software siano backdoor.

Afaict non ci sono cipheruites DHE che usano RC4. Quindi nella tua configurazione ciò avrebbe importanza solo se il client non supporta nessuno dei cifrari che hai identificato esplicitamente e invece finisce con l'utilizzo di una delle cipheruites "DHE" tradzionali dalla lista "HIGH".

I would like to support PFS (forward secrecy) if supported by the client.

Per ottenere la segretezza è necessario utilizzare una cipheruite DHE o ECDHE, quindi se la segretezza in avanti è la tua priorità, dovresti metterla davanti a qualsiasi altra cifresa. Per garantire la massima compatibilità e prestazioni, è necessario inserire le cifrarie ECHDE in anticipo rispetto alla cipheruite DHE corrispondente.

Infine, si prega di riflettere molto attentamente prima di codificare gli elenchi ciphersuite nel software. Quali opzioni sono considerate migliori possono e cambiano nel tempo.

    
risposta data 28.02.2017 - 13:49
fonte

Leggi altre domande sui tag