2015-05-20 12 views
10

Il nuovo attacco Logjam su TLS si basa su gruppi DH comuni. This link consiglia di generare un nuovo gruppo DH 2048 bit personalizzato per ciascun server.Come impostare un gruppo DH personalizzato in Java SSLEngine per impedire l'attacco a Logjam?

Come posso impostare un gruppo DH personalizzato nel codice del server Java che utilizza SSLEngine?

ETA: sarei al sicuro se usassi solo suite di cifratura DH effimere, cioè con DHE o ECDHE e non DH o ECDH nel loro nome? O è questo non correlato?

+0

Logjam si applica solo al numero intero effimero DH in cui il server utilizza parametri deboli perché l'esportazione è falsificata (DHE_EXPORT) o DHE "normale" ma il server è stupidamente configurato/codificato (sezione 3.5 del foglio). Si applicherebbe al numero intero statico DH se potessi ottenere un certificato per la DH che in pratica non puoi, * e * la CA ha permesso parametri stupidamente deboli che non avrebbero. Non si applica all'ECDH né temporaneo né statico, e il documento raccomanda ECDHE come una correzione in generale, ma echa in modo specifico i sospetti delle curve SECG/NIST attualmente comuni. –

+1

Principalmente * debole * (512 bit, probabilmente 768 e forse 1024) che rende possibile l'attacco. La condivisione rende l'attacco più economico, perché ottieni più "output" per un "input". Condiviso 2048 andrebbe bene * se * generato * verificabile * (così puoi essere sicuro che abbia davvero la forza del 2048). –

+1

@ dave_thompson_085 E non abbiamo modo di sapere se i parametri condivisi di 2048 bit in 'sun.security.provider.ParameterCache' sono sicuri? – danarmak

risposta

7

Java (JCE/JSSE) utilizza i parametri DH da alcuni well known DSA groups. Il generatore di parametri JCE consente solo di produrre gruppi con dimensioni tra 512 e 1024 bit (o 2048), ma l'implementazione JSSE sull'altro lato accetta solo dimensioni personalizzate tra 1024 e 2048.

Questo ha l'effetto che non è possibile utilizzare delle dimensioni personalizzate, solo 1024 o 2048 (con Java 8). Tenere presente che Java 7 utilizza ancora solo 768 bit come server (o 512 in modalità crittografica esportabile).

A partire dalla versione 8 i server Java utilizzano per impostazione predefinita 1024 bit. È possibile aumentare il lato server a 2048 bit con jdk.tls.ephemeralDHKeySize=2048. Vedi Customizing Size of Ephemeral DH Keys.

Java come client TLS è meno rigido nelle versioni precedenti e accetta gruppi non sicuri.

Aggiornamento: con OpenJDK 8U65 (JSSE) esiste una proprietà di sicurezza jdk.tls.server.defaultDHEParameters che può definire i parametri del campo finale.

+1

Grazie. Il report di Logjam raccomanda i gruppi DH a 2048 bit come minimo, quindi suppongo che dovrò esaminare l'uso dei provider di BC per manipolarli, dal momento che probabilmente non è possibile influenzare Java. – danarmak

+2

In realtà, il rapporto Logjam dice che i primi di 1024 bit DH sono sicuri se sono generati e non condivisi/standard. Quindi suppongo che Java 8 (server) sia al sicuro per ora. Il client Java 8 potrebbe non essere. – danarmak

+0

Ho aggiunto l'opzione per aumentarlo a 2048 bit. – eckes

Problemi correlati