Руководство по использованию протокола Diffie-Hellman для TLS

Наш опыт показывает, что современное использование протокола Diffie-Hellman не настолько надежное, как предполагалось ранее. В данной статье вы узнаете, как правильно использовать Diffie-Hellman на вашем сервере.

Есть три способа корректного использования Diffie-Hellman для TLS:

  1. Отключить экспорт шифров (Export Cipher Suites). Не смотря на то, что современные браузеры больше не поддерживают экспорт наборов, атаки FREAK и Logjam позволяют атакам посредника обмануть браузер и использовать export-grade, после чего соединение TLS может быть расшифровано. Экспорт шифров является отголоском политики эры 90-х, которая заключалась в предотвращении вывода мощных криптографических протоколов за пределы США. Современные пользователи не полагаются на экспорт шифров и поэтому есть небольшой недостаток в их отключении.

  2. Использование (Эфимерной) эллиптической кривой Diffie-Hellman (ECDH). Ключ обмена эллиптической кривой Diffie-Hellman обходит всем известные реальные криптоаналитические атаки, также современные браузеры предпочитают ECDH ограниченному пространству Diffie-Hellman. Дискретные логарифмические алгоритмы, которые мы используем для атаки стандартных групп Diffie-Hellman, не получают сильных преимуществ от предварительных вычислений, и индивидуальным серверам не нужно генерировать уникальные эллиптические кривые.

  3. Используйте сильную группу Diffie Hellman. Несколько 1024-битных групп используются миллионами серверов, что делает их идеальной целью для предвычислений и прослушивания. Администраторам следует использовать 2048-битные или более сильные группы Diffie-Hellman с «безопасными» простыми числами.

Пункты (1) и (2) могут быть выполнены одновременно настройкой вашего сервера, таким образом, чтобы он использовал только современные наборы шифров. Ниже мы описываем, как определить современные шифры и создать группу Diffie-Hellman для известных серверов. Вы можете проверить свой сервер здесь или, используя Qualsys SSL Server Test.Если вы знаете другие способы, пожалуйста, сообщите нам.

Использование сильной DH группы

Сначала вам нужно создать новую группу Diffie-Hellman, независимо от того, какое программное обеспечение используется на сервере. Современные браузеры, включая Google Chrome, Mozilla Firefox и Microsoft Internet Explorer, увеличили минимальный размер группы до 1024 бит. Мы рекомендуем создать 2048-битную группу. Простейший способ создания новой группы это OpenSSL:

openssl dhparam -out dhparams.pem 2048

Общие серверные продукты

Для каждого серверного продукта мы предоставляем две опции конфигурации: (1) безопасные наборы шифра, которые вам следует использовать и (2) как определить параметры Diffie Hellman, которые вы сгенерировали выше.

Apache HTTP Server (mod_ssl)

SSL параметры могут быть глобально установлены в httpd.conf или в пределах особого виртуального хоста.

Наборы шифра

Отключите поддержку SSLv2 и SSLv3, включите поддержку TLS, таким образом, разрешая/запрещая особые шифры в приведенном порядке:

SSLProtocol all -SSLv2 -SSLv3

SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

SSLHonorCipherOrder on

Параметры DH

В более новых версиях Apache (2.4.8 and newer) и OpenSSL 1.0.2 или более поздних, вы можете точно определить параметры DH (далее DHparams) следующим образом:

SSLOpenSSLConfCmd DHParameters "{path to dhparams.pem}"

Если вы используете Apache с LibreSSL, или Apache 2.4.7 и OpenSSL 0.9.8a или более поздние версии, вы можете добавлять созданные ранее DHparams к концу вашего файла сертификата.

Перезагрузите конфигурацию

sudo service apache2 reload

nginx

Для размещения в конфигурацию сайта server/block in/etc/nginx/sites-enabled/default:

Набор шифров

ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

ssl_prefer_server_ciphers on;

Параметры DH

ssl_dhparam {path to dhparams.pem}

Перезагрузите конфигурацию

sudo nginx -s reload

Microsoft IIS

  1. Откройте Group Policy Object Editor (т.е. запустите gpedit.msc в командной строке).

  2. Раскрыть Настройки Компьютера, Административные шаблоны, Сеть, и затем выберете настройки конфигурации SSL.

  3. Согласно настройкам конфигурации SSL, откройте настройки порядка набора шифра SSL.

  4. Установите строгий порядок набора шифра. Посмотрите список шифров, поддерживаемых Microsoft, и инструкции конфигурации Mozilla TLS .

Lighttpd

Изменения должны быть сделаны в  /etc/lighttpd/lighttpd.conf

Наборы кодов

ssl.cipher-list = "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA "

Параметры DH

ssl.dh-file="{path to dhparams.pem}"

Перезагрузите конфигурацию

sudo service lighttpd restart

Apache Tomcat

В server.xml (для JSSE)

Наборы шифра

<Connector

ciphers="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_DSS_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_SHA256,TLS_ECDHE_RSA_WITH_AES_128_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_SHA,TLS_ECDHE_RSA_WITH_AES_256_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_SHA384,TLS_ECDHE_RSA_WITH_AES_256_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_SHA,TLS_DHE_RSA_WITH_AES_128_SHA256,TLS_DHE_RSA_WITH_AES_128_SHA,TLS_DHE_DSS_WITH_AES_128_SHA256,TLS_DHE_RSA_WITH_AES_256_SHA256,TLS_DHE_DSS_WITH_AES_256_SHA,TLS_DHE_RSA_WITH_AES_256_SHA"

/>

Примечание: чтобы использовать 256-битные шифры AES, необходимо установить JCE Unlimited Strength Jurisdiction Policy Files, которые можно найти здесь.

Postfix SMTP

Оба параметра должны быть установлены в  /etc/postfix/main.cf.

Наборы шифра

smtpd_tls_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CBC3-SHA, KRB5-DES, CBC3-SHA

Параметры DH

smtpd_tls_dh1024_param_file = ${config_directory}/dhparams.pem

Перезагрузите конфигурацию

sudo postfix reload

Sendmail

Эти изменения могут быть произведены в разделе LOCAL_CONFIG вашего  /etc/mail/sendmail.mc

Наборы шифра

O CipherList=ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

Параметры DH

O DHParameters={path to dhparams.pem}

Перезагрузите конфигурацию

sudo service sendmail restart

Dovecot

Эти изменения должны быть произведены в  /etc/dovecot.conf

Наборы шифра

ssl_cipher_list=ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

ssl_prefer_server_ciphers = yes (Dovecot 2.2.6 or greater)

Параметры DH

#regenerates every week

ssl_dh_parameters_length = 2048

Перезагрузите конфигурацию

sudo doveadm reload

HAProxy

Эти изменения должны быть произведены в глобальном разделе вашей конфигурации.

Наборы шифра

ssl-default-bind-ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

Параметры DH

Добавьте файл параметра DH, созданный с помощью OpenSSL, к вашему сертификату (crt файл).

Примечание: Так как для установки максимального размера первичных файлов, используемых для DHE, существует опция конфигурации под названием tune.ssl.default-dh-param , размещение стандартных параметров в вашем сертификате файла обнуляет его.

Перезагрузите конфигурацию

sudo haproxy -f haproxy.cfg -p $(</var/run/haproxy-private.pid) -st $(</var/run/haproxy-private.pid)

Amazon Elastic Load Balancing

Последний набор встроенных параметров SSL (2015-05) использует не DHE, а ECDHE шифры, и поэтому не является уязвимым к Logjam. Смотрите документацию Amazon.

OpenSSH

Протокол SSH не подвержен LogJam атаке, в которой активный взломщик может прервать соединение с криптографией export-grade. Однако, многие применения SSH, вместе с OpenSSH используют фиксированные простые числа, включая 1024-bit Oakley Group 2. Есть пара опций. Первая и самая легкая опция — это заставить пользователей использовать эллиптическую кривую Diffie-Hellman. Особенно кривую 25519. Это может быть выполнено настройкой вашего алгоритма обмена ключами следующим образом:

KexAlgorithms curve25519-sha256@libssh.org

Если вы хотите продолжать поддерживать неэллиптическую кривую Diffie-Hellman, по крайней мере, вам следует отключить поддержку Group 1, удалив diffie-hellman-group1-sha1 Key Exchange. Можете оставить diffie-hellman-group14-sha1, который использует 2048-битное простое число.

Существует еще одна опция для создания новых групп Diffie-Hellman:

ssh-keygen -G moduli-2048.candidates -b 2048

ssh-keygen -T moduli-2048 -f moduli-2048.candidates

Затем вам необходимо установить moduli-2048 на ваш системный модульный файл. В Debian/Ubuntu, он находится в /etc/ssh/moduli. SSH выбирает из этого файла (практически хаотично), поэтому вам следует заменить существующий модульный файл на новые группы, которые вы создали, вместо добавления этих новых групп.

Перевод: Анна Давыдова

Источник: weakdh.org

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *