Общая группа DH, свежие секреты: почему атака дешевеет
Свежие секреты сеанса не исправляют слабую группу над конечным полем. Повторное использование одной группы распределяет самую дорогую стадию атаки по каждому обмену, который её согласует.
Параметры группы публичны по замыслу, и именно эта публичность делает их легко игнорируемыми. В Diffie-Hellman над конечным полем модуль и генератор общие, а личные показатели и получаемые ключи сеанса — нет. Дорогая стадия атаки решетом по числовому полю зависит от группы, а не от одного обмена, поэтому одна слабая группа, используемая везде, становится общей ответственностью. Называть параметры публичными — точно и не по существу, потому что повторно используется стоимость атаки именно на эту группу.
Открытая половина не является уязвимой половиной, и в этом ловушка
Обычный половинчатый довод говорит, что параметры опубликованы в стандарте, значит атакующий их уже знает и сокрытие ничего не изменит. Оба утверждения верны, и ни одно не следует из другого. Поставляемая по умолчанию группа публична, а закрытая группа, созданная вами на прошлой неделе, тоже видна любому, кто завершает рукопожатие. Секретность никогда не была контролем; ими являются стойкость и проверка.
Меняется то, сколько мест делят одну и ту же слабость. Организация, создающая собственную 2048-битную группу, платит за свою атаку, а протокольная величина по умолчанию, выбранная миллионами, амортизирует одну стоимость на всех. В этом смысле необычная группа не лучше автоматически. Слишком маленькая необычная группа — просто меньший общий секрет, за которым меньше глаз.
Проверка важна не меньше размера. Партнёр, присылающий модуль с малыми множителями или не той формы, которую ожидает протокол, может выдать информацию о личном показателе даже тогда, когда битовая длина выглядит солидно. Библиотеки, отвергающие искажённые параметры на входе, делают настоящую работу, поэтому самодельный разбор параметров — плохое место для экономии усилий.
Что предвычисление действительно даёт атакующему
У решета по числовому полю есть стадия, зависящая только от простого числа, и её результат пригоден повторно против каждого обмена, использующего это простое число. Таков весь механизм исторической тревоги: дорогая часть оплачивается один раз, а предельная стоимость каждого следующего сеанса снижается. Свежие показатели по-прежнему защищают каждый отдельный обмен от пассивного наблюдателя, пока группа достаточно велика, чтобы просеивание было неосуществимым. Оба утверждения совместимы, и большинство споров на эту тему возникает из выбора одного и отбрасывания другого.
Работа Logjam 2015 года продемонстрировала понижение до 512-битного Diffie-Hellman экспортного уровня и оценила, во что обойдётся атака на более крупные, широко повторно используемые группы при значительных ресурсах. Демонстрация была конкретной, оценки были оценками, и ни то ни другое не было доказательством того, что конкретный сеанс VPN был расшифрован.
Ссылайтесь на работу ради механизма и продемонстрированного понижения, а не как на измерение вашего развёртывания. Старая статистика о том, сколько серверов делили группу по умолчанию, описывает интернет того года, а не сеть, которую можно обследовать сегодня. Полезное, что стоит перенести, — это вопрос: согласуют ли ваши устройства всё ещё группу, которая мала или слабо проверена?
Стандартизованный не значит слабый
RFC 7919 определяет именованные группы над конечным полем, чтобы обе стороны договаривались о группе по идентификатору и применяли согласованную политику. Стандартизованность — преимущество, потому что она устраняет неоднозначность переговоров и позволяет реализации отвергать неподдерживаемые размеры. Именованная группа слаба только тогда, когда её размер ниже политики, которую вы якобы соблюдаете, а не потому, что она появляется в документе. Та же логика относится к группам эллиптических кривых, у которых другая структура и другие режимы отказа.
Держите конструкции раздельно, когда рассуждаете о них. Вывод о Diffie-Hellman над конечным полем ничего не говорит об X25519, а вывод о 1024-битной группе MODP ничего не говорит о 3072-битной. Политика стойкости задаётся по механизму, по размеру и по версии протокола, поэтому фраза стойкая криптография не является проверяемым утверждением.
Аутентификация — это другая половина, и она не заменяет. Стойкая группа без проверки партнёра оставляет атакующего посередине, а действительный сертификат не спасёт 768-битный обмен. Рассматривайте их как две независимые линии, затем подтвердите, что обе действительно согласуются.
Прочитайте согласованную группу на реальном соединении
Читайте согласованную группу с устройства, а не из шаблона конфигурации. Шаблоны описывают намерение, а интересное значение — то, о котором обе стороны договорились при последнем рукопожатии. На оконечной точке IPsec вывод состояния обычно печатает выбранное предложение, включая группу MODP.
Зафиксируйте эту строку до и после изменения политики и сохраните обе в журнале изменений. Сравнение и есть доказательство.
ipsec statusall | grep -Ei "proposal|ESP|IKE"
openssl dhparam -in /etc/vpn/dh3072.pem -check -nooutЕсли после изменения состояние всё ещё показывает старую группу, соединение не пересогласовало параметры, и правка конфигурации ничего не доказала. Перезапустите партнёра или очистите ассоциацию безопасности, затем снова прочитайте состояние. Политика, применяемая только к новым соединениям, оставит долгоживущие туннели на старых параметрах, пока они подняты.
Проверяйте группу и личность партнёра раздельно
Отделите то, что защищает группа, от того, кто находится на другом конце. Записывайте метод обмена ключами, размер группы и метод аутентификации как три поля, потому что они отказывают независимо. Туннель, согласовавший 3072-битную группу, но принимающий любой сертификат, — не тот же риск, что туннель, закрепляющий партнёра и использующий 2048-битную группу.
Запишите критерии приёмки до начала проверки, чтобы результат был сравнением, а не мнением. Минимальный размер группы для каждой версии протокола, список разрешённых именованных групп и обязательная проверка партнёра достаточны, чтобы сделать решение механическим. Именно неоднозначность этого списка превращает проверку в спор, а споры не исправляются. Тогда вывод — список конечных точек, нарушающих заявленное правило.
ipsec statusall | grep -Ei "peer|auth|cert"
openssl s_client -connect vpn.acme.example:443 -brief -cipher 'DHE-RSA-AES256-GCM-SHA384'Замкните цикл, перечитав согласованные значения после исправления. Соответствующий файл конфигурации не является доказательством того, что туннель его принял. Доказательство — вывод состояния и одно свежее рукопожатие, и собрать их быстрее, чем провести совещание о том, нужны ли они.