id: Гость   вход   регистрация
текущее время 15:34 06/11/2024
Владелец: SATtva (создано 27/11/2003 12:00), редакция от 27/08/2006 20:08 (автор: SATtva) Печать
Категории: криптография, софт, gnupg, криптоанализ, openpgp, ошибки и баги, уязвимости, управление ключами, стандарты, атаки
https://www.pgpru.com/Новости/2003/11-27-КритическаяОшибкаРаскрытиеСекретныхКлючейВGnuPG
создать
просмотр
редакции
ссылки

27.11 // OpenPGP // Критическая ошибка: раскрытие секретных ключей в GnuPG


Сегодня, 27 ноября в 10:47 МСК, была обнародована информация о серьёзной уязвимости в программе GnuPG (свободном аналоге PGP). Ниже приведено официальное обращение ведущего разработчика программы Вернера Коха.



Ключи подписания по схеме Эльгамаля в реализации GnuPG скомпрометированы

Описание


Phong Nguyen обнаружил серьёзный баг в механизме генерации и использования ключей Эльгамаля для создания ЭЦП. Эта ошибка способна привести к компрометации практически всех ключей Эльгамаля, используемых для подписания. Учтите, это реальная уязвимость, благодаря которой можно за секунды взломать ваш закрытый ключ!


Пожалуйста, примите немедленные меры по аннулированию своих ключей подписания по схеме Эльгамаля! Более того, вы должны принять все возможные меры для ограничения ущерба и потерь в части информации, зашифрованной и подписанной данным ключом!


Пожалуйста, не отправляйте частных емэйлов в ответ на данное сообщение, поскольку у меня нет времени, чтобы ответить на все. Лучшее место для обсуждения текущей проблемы – это список рассылки gnupg-users@gnupg.org (первоначально подпишитесь на него, чтобы ваши сообщения не проходили модераторский контроль 2).


Имейте в виду, что стандартные ключи, генерируемые GnuPG (подписание по алгоритму DSA и шифрование по схеме Эльгамаля), равно, как и ключи RSA, НЕ подвержены данной уязвимости. Также учтите, что ключи подписания Эльгамаля нельзя сгенерировать без использования специального свитча для разблокирования скрытых опций, а также без получения предупреждения о нестандартном типе этого ключа. За сведениями о том, как опознать уязвимые ключи, см. ниже.


Данное сообщение подписано с помощью обычного ключа заверения дистрибутивов GnuPG. 1 Я приножу извинения за этот серьёзный баг и за все вызванные им проблемы.

Предыстория


По историческим причинам 3 GnuPG позволяет генерировать ключи Эльгамаля, предназначенные как для шифрования, так и для подписания. Возможно даже создать один ключ (базовый), способный выполнять обе операции. С криптографической точки зрения это не лучшая практика, однако поддерживаемая стандартом OpenPGP.


Не предполагалось, что эти ключи будут по-прежнему применяться для подписания, поскольку они имеют ряд недостатков: размер их ЭЦП намного больше в сравнении с DSA и RSA, генерация и сличение подписи проходят медленнее, кроме того, применение схемы Эльгамаля для подписания по некоторым криптологическим причинам всегда считалось проблематичным и труднореализуемым. Поэтому я всегда отговаривал людей от использования ключей Эльгамаля для подписания; тем не менее, они всё ещё применяются, и порядка 200 ключей ежегодно генерируется и загружается на общественные депозитарии.


В январе 2000 года в порядке обновления версии 1.0.2 код GnuPG был изменён, чтобы позволить генерацию более эффективных для шифрования ключей Эльгамаля (для них выбирался меньший секретный показатель степени x, а для зашифрования применялся меньший показатель k). Проведение этих изменений привело к непреднамеренному привнесению ошибки в схему подписания: малый показатель k, использовавшийся для зашифрования, применялся и для подписания. Подобная ошибка в реализации может быть использована для проведения криптографической атаки, направленной на получение закрытого ключа (т.е. секретнго показателя степени x), если взломщик располагает ЭЦП, сгенерированной данным ключом. Для базового ключа Эльгамаля такая ЭЦП всегда имеется, поскольку подпись этого ключа (автоподпись, self-signature) нужна, чтобы связать сертификат (ID) пользователя и иной материал с данным базовым ключом. Поэтому ключ должен считаться скомпрометированным, даже если никогда не использовался для подписания документов.


Учтите, что эта уязвимость не относится к обычным ключам "только шифрование по схеме Эльгамаля" (тип 16 в спецификации OpenPGP 5), поскольку GnuPG не позволяет генерировать подписи такими ключами. Уязвимости подвержены только ключи "шифрование+подписание по схеме Эльгамаля" (тип 20) и только в случае применения таких ключей в GnuPG 1.0.2 и выше.

Последствия


Все ключи "шифрование+подписание по схеме Эльгамаля" (тип 20), сгенерированные в GnuPG 1.0.2 и выше, должны считаться скомпрометированными. Ключи, сгенерированные в более ранних версиях, по-видимому остались надёжными, но в идеале также должны быть ануллированы. Имейте в виду, что даже если ключ "шифрование+подписание по схеме Эльгамаля" был сгенерирован в ранней версии, использование этого ключа в GnuPG 1.0.2 и выше для изготовления подписей также его скомпрометирует.


Повторяю, ключи "только шифрование по схеме Эльгамаля" (тип 16) из любой версии GnuPG не подвержены уязвимости.

Решение


Не используйте ключи "шифрование+подписание по схеме Эльгамаля" (тип 20). Немедленно аннулируйте все подобные ключи. Считайте скомпрометированной любую информацю, зашифрованную или подписанную подобными ключами.


Последующие версии GnuPG исключат возможность генерирования таких ключей и возможность создания с их помощью подписей.

Как обнаружить ключи Эльгамаля тип 20


Нужно различать два разных случая: базовый ключ Эльгамаля тип 20 и простые подключи Эльгамаля тип 20.


Первый случай требует незамедлительных действий. Вот он:



За таким ключом могут следовать дополнительные поля uid, sig или sub. Здесь мы видим ключ "шифрование+подписание по схеме Эльгамаля", наверняка сгенерированный в GnuPG 1.0.2 и выше. Заглавная G обозначает ключ типа 20. АННУЛИРУЙТЕ ЕГО НЕМЕДЛЕННО!


Второй случай связан с подключами. Вот пример:



Это мой обычный рабочий ключ, представляющий собой стандартный ключ GnuPG с добавленными со временем несколькими дополнительными подключами. Это хороший пример, поскольку один из подключей – второй – это ключ типа 20 "шифрование и подписание по Эльгамалю":



Заглавная буква G обозначает потенциально скомпрометированный подключ, тогда как первый подключ

– это стандартный подключ "только шифрование" (тип 16), о чём говорит малая g. Этот ключ не подвержен уязвимости.


Подключи, отмеченные большой G должны быть АННУЛИРОВАНЫ, за исключением случаев, когда вы абсолютно уверены, что эти подключи никогда не применялись для создания цифровой подписи с помощью GnuPG 1.0.2 и выше.

Как аннулировать ключ


Чтобы выпустить сертификат аннулирования для ключа в целом (базового и всех подключей), выполните:



Если вы не можете воспользоваться своей ключевой фразой, надеюсь, у вас имеется предварительно сгенерированный сертификат аннулирования (на флоппи-диске или распечатанный на листке бумаги), который можно использовать вместо приведённой выше команды.


Теперь этот сертификат аннулирования нужно нужно импортировать в GnuPG с помощью:



Теперь экспортируйте свой ключ в файл и распространите его по серверам-депозитариям:



Если ваш базовый ключ – не ключ Эльгамаля тип 20, вам следует аннулировать отдельные подключи. Ещё раз напоминаю, что требуют аннулирования только ключи Эльгамаля тип 20 (отмеченные заглавной буквой G) – со стандартными ключами Эльгамаля "только шифрование" (малая g) всё в полном порядке. Воспользуйтесь командой редактирования GnuPG:



Появится описание ключа. Командой key порядковый_номер_подключа выберите подключ, который хотите аннулировать, а затем введите команду revkey и следуйте указаниям. Сделав это, экспортируйте ключ, как описано выше.

Сколько ключей подвержено уязвимости?


Не могу сказать наверняка. По сведениям статистики общественных депозитариев, существует 848 уязвимых ключей подписания по Эльгамалю. Это около 0.04% всех базовых ключей на серверах. Кроме того, на серверах находится 324 уязвимых подключа.


Некоторые из этих подключей скорее всего никогда не использовались для подписания, поскольку вместо созданных подключей шифрования типа 20 для подписания мог применяться базовый ключ DSA. Тем не менее, такие ключи тоже стоит аннулировать.


Ещё раз обращаю внимание на то, что стандартная конфигурация GnuPG не допускает генерацию уязвимых ключей "шифрование+подписание по схеме Эльгамаля", а также на то, что ни DSA (тип 17), ни RSA (тип 1), ни ключи Эльгамаля "только шифрование" (тип 16) не уязвимы.


Благодарности


Phong Nguyen 4 проанализировал реализацию криптографических элементов GnuPG и обнаружил эту уязвимость. Также он написал сам код для проведения подобной атаки и был дал мне достаточно времени на изучение своих материалов и для составления списка владельцев известных ключей типа 20.


Я действительно очень сожалению о случившемся,


Вернер


1 Чтобы получить свежую копию ключа обратитесь на депозитарий или загрузите его с помощью finger wk@g10code.com либо finger dd9jn@gnu.org. (ID 0x57548DCD, – прим. пер.)


2 См. http://lists.gnupg.org/mailman/listinfo/gnupg-users.


3 Патентный статус DSA был неясен, когда в 1997 я начал писать GnuPG.


4 Работает в French National Center for Scientific Research и Ecole normale superieure: http://www.di.ens.fr/~pnguyen/.


5 Diffie-Hellman, или DH, в терминологии PGP, – прим. пер.


Источник: "openPGP в России"


 
Комментариев нет [показать комментарии/форму]
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3