← На главную

Badkeys: ошибка в CompleteFTP раскрыла закрытые RSA и DSA ключи

12.06.2026 12:52 · hackernews

Исследователи из проекта badkeys вместе с Ханно Бёком нашли в открытых источниках (CT-логи, TLS- и SSH-сканеры, PGP) сотни RSA-ключей, у которых биты сильно смещены в сторону нуля. Вместо случайного заполнения в таких ключах регулярно встречаются целые блоки нулевых битов — авторы назвали их «короткорукавными» (short-sleeve). Обнаружилось два характерных паттерна.

Первый паттерн попался в сертификатах крупных компаний, включая Yahoo и Verizon, а также на некоторых устройствах NetApp. Сертификаты уже истекли, но причину появления таких ключей выяснить не удалось.

Второй паттерн связан с программным обеспечением CompleteFTP от EnterpriseDT. Баг крылся в функции genRandomBits: при генерации случайного числа массив байтов от RNG копировался в массив 32-битных «лимбов» (limbs), но каждый элемент копировался как 8-битный — в итоге в каждый лимб попадал только один байт случайных данных, а остальные 24 бита оказывались нулями. Эта ошибка затрагивала генерацию RSA-ключей в версиях 10.0.0–12.0.0 (декабрь 2016 – март 2019) и DSA-ключей в версиях 10.0.0–23.0.4 (до декабря 2023). После рефакторинга кода CompleteFTP перешёл на стандартные .NET-библиотеки (RSACryptoServiceProvider и DSA.Create), и уязвимость ушла.

Исследователи восстановили закрытые ключи для 603 уникальных RSA и 74 DSA-ключей, сгенерированных уязвимыми версиями, а также для 26 RSA-ключей с первым паттерном.

Чтобы факторизовать такие модули, они применили полиномиальный трюк: представили числа с блоками нулей как многочлены с маленькими коэффициентами (в базисе 2^32 или 2^128), легко разложили многочлены на множители и восстановили простые сомножители. Метод работает только из-за особой структуры — для обычных RSA-ключей он неэффективен.

EnterpriseDT выпустил версию CompleteFTP 26.1.0 (8 мая 2026), которая автоматически проверяет, не сгенерирован ли ключ уязвимым способом, и отдельную утилиту для проверки. Проект badkeys теперь тоже детектит такие ключи.

Читать оригинал →