2015-05-20 3 views
10

Новая атака Logjam на TLS основана на общих группах DH. This link рекомендует создать новую настраиваемую 2048-битную группу DH для каждого сервера.Как настроить пользовательскую группу DH в Java SSLEngine для предотвращения атаки Logjam?

Как настроить настраиваемую группу DH в коде сервера Java, которая использует SSLEngine?

ETA: Я был бы в безопасности, если бы использовал только эфемерные комплекты шифрования DH, т. Е. С DHE или ECDHE, а не с DH или ECDH от их имени? Или это не связано?

+0

Logjam применяется только к эфемерному целому DH, где сервер использует слабые параметры, поскольку используется экспорт поддельных (DHE_EXPORT) или «нормальный» DHE, но сервер тупо настроен/закодирован (раздел 3.5 документа). Это применимо к статическому целочисленному DH, если вы можете получить сертификат для DH, который на практике вы не можете, * и * CA разрешили глупо слабые параметры, которых они не хотели. Это не относится к ECDH как эфемерным, так и статическим, и в документе рекомендуется ECDHE в качестве исправления в целом, но, в свою очередь, вызывает подозрения в существующих общих кривых SECG/NIST. –

+1

Это прежде всего * слабость * (512 бит, возможно 768 и, возможно, 1024), что делает атаку возможной. Совместное использование делает атаку более рентабельным, потому что вы получаете больше «вывода» для одного «ввода». Общий 2048 был бы штраф *, если * сгенерирован * достоверно * (так что вы можете быть уверены, что он действительно имеет силу 2048). –

+1

@ dave_thompson_085 И у нас нет способа узнать, безопасны ли общие 2048-битные параметры в 'sun.security.provider.ParameterCache'? – danarmak

ответ

7

Java (JCE/JSSE) использует параметры DH от некоторого well known DSA groups. Генератор параметров JCE позволяет создавать группы с размерами от 512 до 1024 бит (или 2048), но реализация JSSE с другой стороны принимает только пользовательские размеры от 1024 до 2048.

Это влияет на то, что вы не можете использовать пользовательских размеров, всего 1024 или 2048 (с Java 8). Имейте в виду, что Java 7 по-прежнему использует только 768 бит в качестве сервера (или 512 в режиме криптографического экспорта).

Начиная с версии 8 Java-серверы используют по умолчанию 1024 бит. Вы можете увеличить серверную сторону до 2048 бит с помощью jdk.tls.ephemeralDHKeySize=2048. См. Customizing Size of Ephemeral DH Keys.

Java как клиент TLS менее строгий в старых версиях и принимает небезопасные группы.

Обновление: с OpenJDK 8U65 (JSSE) существует свойство безопасности jdk.tls.server.defaultDHEParameters, которое может определять параметры конечного поля.

+1

Спасибо. Отчет Logjam рекомендует 2048-битные группы DH как минимум, поэтому, я думаю, мне придется изучить использование провайдеров BC для управления этим, поскольку на Java, вероятно, не может быть влияние. – danarmak

+2

На самом деле, в отчете Logjam говорится, что 1024-битные DH-номера безопасны, если они созданы, а не общие/стандартные. Поэтому я предполагаю, что Java 8 (сервер) сейчас безопасен. Java 8 клиент может и не быть. – danarmak

+0

Я добавил вариант увеличить его до 2048 бит. – eckes