Сеансовые ключи в электронных ключах
Об особенностях использования криптографических алгоритмов в электронных ключах.
Системы защиты программ на основе традиционных электронных ключей редко можно создать таким образом, чтобы передаваемые данные между электронным ключом и защищенным приложением всегда были разные при одних и тех же обстоятельствах. Этим широко пользуются хакеры, прослушивая трафик, запоминая его и создавая эмуляторы, которые вместо реального ключа подставляют эти данные.
По идее с этим несложно бороться, если в электронном ключе есть ассиметричные алгоритмы — данные можно шифровать на сеансовом ключе (он каждый раз разный). Еще один способ, казалось бы такой же хороший, но на мой взгляд спорный, – перенести кусок защищенной программы в электронный ключ (заказные электронные ключи или Guardant Code).
Оба способа характеризуются тем, что в трафик попадают случайные числа, которые либо специально созданы защищенной программой (генератором случайных чисел), либо основываются на тех данных, которые пользователь вводит при использовании программы, либо, что еще лучше, содержат и то и другое вместе.
Если в ключ помещается какой-то алгоритм защищенной программы, то скорее всего, так называемая, энтропия его параметров слишком плохая. Т.е. случайных данных слишком мало, чтобы служить единственной опорой для защиты. Поэтому в любом случае передаваемые между приложением и ключом данные лучше всего шифровать, причем на ключе шифрования, который каждый раз разный. Такие типы ключей называют сеансовыми.
По сути существует всего 2 наиболее распространенных алгоритма выработки сеансовых ключей для шифрования трафика: протокол обмена ключами Диффи-Хеллмана и MQV.
Первый без аутентификации, второй с взаимной аутентификацией. Казалось бы, нет проблем: бери и используй! Но что выясняется при детальном анализе: алгоритм Диффи-Хэлмана вообще не защищает от атаки типа «man-in-the-middle» или, проще говоря, от создания табличного эмулятора (с чем собственно и боремся). А алгоритм MQV защищает до тех пор, пока кто-то из хакеров не отыщет одну из его констант в защищенном приложении (а точнее в API электронного ключа). И тогда также запросто можно создавать табличные эмуляторы.
Интересно, что есть электронные ключи, которые используют подобные алгоритмы (например, ECKAS-DH1 — модификация DH для эллиптических кривых) и позиционируют себя как более защищенные! А в реальности они только пускают пыль в глаза и ничего кроме насмешки у профессионального взломщика вызвать не могут.
По этой причине при создании электронных ключей Guardant Sign, Guardant Time и Guardant Code нам пришлось использовать иные алгоритмы выработки сеансовых ключей, адаптированные применительно к задаче защиты программного обеспечения, с учетом тех современных видов атак, которые может реализовать хакер.
Вывод напрашивается такой: используя криптографию в защите программ, необходимо детально анализировать те тонкости, которые существуют в этой области, т.к. помимо классических, существуют еще свои — особенные.
Комментарии к статье
-
08-12-2008 11:37:10 #
Комментировал backdoorman
Константа может быть не явно задана, к примеру размазана по коду и это сильно затруднит ее получение, а еще лучше, когда их будет несколько. А если появляется возможность узнать константу, то мне не совсем понятно, зачем тогда ее использовать, можно пропатчить нужные места и все.
Мне кажется в вашей статье все же не хватает фактов для обоснования вашей гипотезы. То что, можно построить таблицу-соответствий в случае если поток трафика от ключа к приложению детерминирован, это и так всем понятно. -
08-12-2008 15:23:15
Ответил Константин Черников
Верно, за константы в случае с электронными ключами и применением ассиметрии в них, вообще надо бороться :-) Сильно, по разному и неявно. Но есть алгоритмы, когда и найти константы мало - надо еще многое что сделать чтобы извлечь из них пользу, переменные искать и т.д. Мы именно такой алгоритм и постарались сделать.
Повторюсь, не стал сильно детализировать. Для четкого обоснования надо формулы писать, что не было задачей статьи. Если у Вас есть какая-то интересная теория именно в виде формул, готов прокомментировать.
Обещал уточнить про гомоморфные шифры. У меня есть общий взгляд на системы защиты, который как раз и был озвучен в докладе на Софтуле 2008. Статья на эту тему будет опубликована позже. Из нее можно будет получить ответ на вопрос про гомоморфные шифры, как мне думается. Хотя тема, согласен, интересная и малоизученная в контексте электронных ключей. Я бы не стал утверждать что мы УЖЕ все знаем на этот счет :-) Если есть интересный взгляд, готов его обсудить.
-
08-12-2008 12:56:41 #
Комментировал backdoorman
Вы правильный тогда подход выбрали в своем ключе, но тут многое зависит от реализации :).
Спасибо конечно, но пока воздержусь от публикации своих идей ;).
Ждемс статьи, буду рад прокомментировать.
Автор статьи с удовольствием прочтет комментарии посетителей и по возможности ответит на них.
Чтобы оставить комментарий, необходимо зарегистрироваться и авторизоваться под своей учетной записью.

Действительно в классической схеме Д-Х, есть уязвимость для атаки «человек по середине», но вы как то умолчали о различных модификациях этого протокола, которые не подвержены этой атаке, что вы об этом думаете ?
Вы правы, выработка сеансовых ключей можно делать для наших целей разными способами. Могут использоваться разные протоколы, которые удовлетворяют определенным правилам. Мы не изучали абсолютно ВСЕ традиционные (нам достаточен только один (-: ), но большинство из них не годятся.
Позже я опубликую здесь свой взгляд на общие правила применения криптографии в защите программ на основе доклада, сделанного мною на Конференции по информационной безопасности, которая проходила на выставке Софтул 2008. Там более подробно рассказывается, почему алгоритмы и протоколы традиционной криптографии часто не годятся для целей защиты ПО.
Отвечу только на часть вопроса, т.к. в выходные дети требуют своего внимания. Про гомоморфные алгоритмы отвечу чуть позже.
Задача строго научно определить теорию не было - данный блог не совсем подходящее место для этого :-). Но немного уточнить сказанное могу. Строго говоря алгоритм выработки сеансового ключа по Диффи-Хеллману, защищает от атаки типа «man-in-the-middle», но не защищает от атаки типа «computer-in-the-middle» или точнее «программа по середине». Т.е. для успешной атаки надо налету успеть сделать какие-то вычисления, что доступно только компьютеру или, в нашем случае, программе.
Модификация этого алгоритма по имени MQV (ее еще называют Диффи-Хелман с взаимной аутентификацией) считается, что защищает от атаки «компьютер по середине», но в случае с электронными ключами это не так, поскольку узнав одну из констант внутри защищенной программы можно все равно реализовать эту атаку успешно. Правда придется очень многое перешифровывать на лету, причем 2 раза, но это уже детали реализации.