Электронные ключи защиты

         

Что представляет собой API (программный интерфейс) ключа защиты?


Также, как блок логики и блок памяти - "аппаратное сердце" ключа защиты, его API - это его "программное сердце". От его качества зависит очень многое: стабильность работы в различных операционных системах, четкость и стабильность работы в локальной сети, стойкость к программному взлому, удобство в использовании для программиста, возможность использования широкого спектра языков программирования и т.д.

Обычно, применительно к современным ключам, работающим в системах типа WinXX, API разделяется на 2 уровня: API, включаемое в защищенную программу, и драйвер ключа - системный драйвер, обеспечивающий взаимодействие между программой и ключом.

Такое "разделение труда" обуславливается несколькими причинами: невозможность выполнения операций ввода/вывода на уровне прикладных задач (в защищенном режиме, для выполнения операций ввода/вывода требуется уровень привилегий "0" [Ring0], в то время как все прикладные задачи выполняются на уровне 3 [Ring3]), затруднение понимания работы ключа, возможность ввода дополнительной шифровки (и, таким образом, повышение стойкости к взлому) и т.д.

Кроме того, на уровне API происходит трансформация данных, полученных из ключа и передаваемых в программу, и наоборот. Производители ключей любят преувеличивать не меньше любых других производителей и все их криптоалгоритмы на 90% вынесены в программную часть, а аппаратная выполняет оставшиеся 10% работы. Оно и понятно - в случае усложнения такого устройства оно возрастет в цене и автоматически упадет спрос, а стойкость к взлому они попробуют увеличить другими методами. Кроме того, некоторые функции API выполняет целиком и полностью, даже не обращаясь к ключу! (Например, ключ Novex содержит только память, а вся логика целиком и полностью выполняется на программном уровне).

Стоит отметить, что внутренности API - это святая святых и, также как и принципиальная схема ключа, является одним из наибольших секретов производителей.



Что внутри у электронного ключа?


Электронный ключ обычно представляет собой небольшое устройство (размером со спичечный коробок), которое присоединяется к компьютеру через один из возможных интерфейсов (обычно это: COM, LPT или USB порты, хотя бывают варианты и в ISA-card исполнении). Наиболее распространенный вариант исполнения - это LPT-ключ. Такой ключ "прозрачен" для принтера и других LPT-устройств, однако это не всегда есть правда (см. раздел "Советы").

Внутри такой ключ состоит из вспомогательных элементов (которые, скажем, преобразуют каким-либо образом электрические сигналы или выравнивают напряжение и т.п.) и двух основных элементов: блок логики и блок памяти.



Интересные ссылки


Aladdin Knowledge Systems: российское представительство, центральный офис

Rainbow Technologies, Inc: российское представительство, центральный офис

НПО "Актив": центральный офис

Прочие производители электронных ключей: Dallas Lock Key, SecureKey, Eutron, KeyLok II, Marx, Dinkey

Сайты, посвященные защите программ: DoreWorld, Hackers-Supply

(очень интересный раздел - Fravia mirror, бывший http://fravia.org).

Прочие сайты, которые интересно посесить: UCL, Dongle-Labs, HackToolz, HIJAQ, Safe-Key.

Поисковый сайт по "неофициальной" информации: Astalavista.

Файловый архив "неофициальной" информации: UCL unofficial ftp.



Как работает электронный ключ?


Блок логики представляет собой устройство, которое генерирует значения некоторой функции: f(x)=y. Значения подаваемые на вход (x) каким-либо образом влияют на выход (y) и таким образом происходит "привязка" к ключу. То есть программа, через специальный код (API) посылает в ключ некоторое число и проверяет ответное значение. Если оно совпадает - то программа работает дальше, если нет - соответственно или не работает, или переходит в демо-режим. Функции, выполняемые в блоке логики могут быть взаимообратными (то есть, f(x)=y, f(y)=x), а могут и не быть таковыми.

Обычно встречаются 3 вида блоков логики:

Основанные на логической матрице (заказной ASIC-чип, Application Specific Integrated Circuit)

Основанные на собственном микропроцессоре (заказной MCU-чип)

Основанные на готовом микропроцессоре (PIC-чип)

Первый вид логики отличается тем, что очень прост и дешев в изготовлении. Однако, вид функции генерируемой эти видом логики (Я имею ввиду "чистую" функцию, возвращаемую ключом. То, что возвращается программе из API ключа - далеко не то же самое, что вернул сам ключ) очень прост и понятен. Потенциально, такие ключи очень опасны тем, что профессиональный хакер (конкретно - кракер, от англ. "cracker" - человек, занимающийся взломом программного обеспечения), "раскусив" ключ может с легкостью обмануть любую часть программы и, таким образом, "отвязать" ее от ключа (попросту говоря - сломать). Однако, с аппаратной точки зрения такой ключ очень стоек, так как использует свой собственный заказной чип и его исследование возможно только с помощью специальных средств (электронный микроскоп и т.д.).

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

Третий вид логики - основанные на готовом микропроцессоре (например, на PIC 16X8X фирмы Microchip Technology Inc.) дают невысокую себестоимость и высокую надежность с программной точки зрения. Однако, применение стандартного микрочипа делает возможным и его стандартное изучение. Мне известны случаи "снятия" битов защиты от чтения с такого микроконтроллера и чтение (с последующим изучением) всей микропрограммы, что дает еще и возможность так называемого аппаратного "клонирования" ключей. То есть покупки чистого PIC-а и зашивки в него той же микропрограммы и получение 100%-го аналога конкретного ключа.

Память, встречающаяся в ключах - обычно составляет от 0 до 4096 байтов памяти. В ней может храниться информация, необходимая программе для запуска, описывающая количество лицензий на запуск, наименование фирмы покупателя, номер версии программы и т.д.



Кто производит ключи защиты?


Основные производители, представленные на российском рынке:

Aladdin Knowledge Systems - [Hasp, Hardlock]

Производит наиболее распространенные в России ключи защиты. Остановимся на них чуть подробнее:

HASP (Hardware Against Software Piracy) - наиболее распространенный ключ защиты от этой компании. В зависимости от модификации может быть сетевым (NetHASP), локальным с памятью (MemoHASP), локальным без памяти (HASP-3) или со встроенными часами (TimeHASP). Виды исполнения: LPT, COM, ISA, USB, ADB (Mac), PCMCIA. Объем памяти - до 496 байт. Логика базируется на заказном ASIC-чипе (логическая матрица).

Наиболее не рекомендуемый к использованию ключ. Имеет массу недостатков. Кроме того, отличается простотой внутренней логики и для него возможно создание эмулирующей программной функции, даже не имея ключа на руках (так как вскрыт не только алгоритм работы ключа, но и взаимосвязь между функцией и системой открывающих паролей!).

Типичные представители программного обеспечения, защищенные этим типом ключей: все виды программ от фирмы "1С", "БЭСТ-4", R-Style Software Labs, ...

Hardlock - один из самых лучших ключей, доступных у нас. В 1996 году компания Aladdin купила небольшую немецкую компанию Fast Software Security и теперь продает этот ключ от своего имени. Выпускается в различных модификациях, в том числе в виде Hardlock Twin ("непрозрачный" ключ - с одной стороны разъем LPT-порта, с другой - COM-порта). Память - до 128 байт. Логика базируется на собственном микропроцессоре (MCU).

Типичные представители программного обеспечения, защищенные этим типом ключей: продукты фирмы "ПроИнвестКонсалтинг" (Project Expert 6.xx), "МОТОР-ТЕСТЕР", ER-Mapper 5.x, ...

Оба ключа выгодно отличает от других конкурентов отличная документация, разветвленная сеть дилеров по всей России, наличие библиотек практически под все известные компиляторы для платформ Dos/WinXX.

Rainbow Technologies, Inc. - [Sentinel]

Самая известная компания во всем мире, кроме России. Контролирует порядка 55% рынка электронных ключей. Выпускает ключи под торговой маркой Sentinel:


Вполне обычные ключи, по своим параметрам схожие с ключами HASP. Выпускаются в исполнениях: LPT, RS232, USB. Имеют до 112 байт энергонезависимой памяти, до 14 шифровальных алгоритмов. Базируются на логическом ASIC-чипе. Есть сетевые варианты, варианты для Mac-ов, для Unix-систем. Достаточно развитое и продуманное программное обеспечение позволяет рекомендовать этот ключ для защит начального и среднего уровня.

Типичные представители программного обеспечения, защищенные этим типом ключей: "БЭСТ-4", "БЭСТ-ПРО", практически все западные продукты, систем CAD/CAM...

НПО "Актив" - [Guardant]

Ранее более известные как ключи "Novex", ключи "Guardant" являются первой отечественной разработкой в этой области:

Достаточно интересные ключи, представленные тремя видами: Guardant Aptus (Novex), Guardant Stealth (Novex Stealth), Guardant Net (Novex Stealth Net). Базируются на стандартном PIC 16XXX от Microchip, имеют до 256 байт памяти и несколько перепрограммируемых алгоритмов шифрования. Выпускаются только в варианте LPT. Из недостатков стоит отметить достаточно слабое ПО и документацию, хотя ключ Novex Stealth по своим параметрам может легко конкурировать с Hardlock.

Типичные представители программного обеспечения, защищенные этим типом ключей: программы "Галактика", "Касатка", "БЭСТ-2+", ...


Куда все идет?


Перспективы развития у этой отрасли достаточно широки. Рождается множество компаний (в том числе и на пространстве бывшего СССР) с альтернативными разработками, предлагающими очень широкий спектр сервисов. Улучшаются используемые алгоритмы, выпускаются ключи с встроенными шифровальными системами по известным, очень стойким к криптоанализу и взлому алгоритмам: DES, RSA, ...

Формат ключей меняется - все больше и больше приобретают популярность миниатюрные, удобные в использовании ключи USB.

Меняется и сфера применения ключей: они начинают использоваться как средство авторизации при работе с компьютером, для защиты в электронной коммерции, для хранения персональных данных и т.п.

С другой стороны, при постоянно возрастающем количестве ключей и защищенных ими программ, становится все сложнее использовать их совместно и производителям нужно явно находить выход из этой ситуации. Хотя вполне возможна ситуация, когда мы в будущем увидим в офисах USB-концентраторы сплошь утыканные гирляндами разноцветных USB-ключей J



Полезные советы


Для разработчиков программного обеспечения только один совет: постарайтесь поменьше верить рекламным проспектам, а побольше доверять собственному опыту (благо, что практически все компании продают один комплект ключей, ПО и всего необходимого для тестирования за символическую плату в 20-50 USD) и советам независимых профессионалов в этой области.

Что можно посоветовать пользователю? Постарайтесь:

Не каскадировать ключи на одном компьютере (хотя все производители в один голос утверждают, что это очень даже можно делать) - это не только не эстетично, но еще и опасно как для порта, так и для ключей.

В случае конфликтов, разнести режимы сетевой авторизации по разным протоколам (TCP/IP, NetBios, IPX).

По возможности не ставьте сетевой ключ на сервер - запросы к ключу занимают много времени, а стабильность работы API и сетевых менеджеров, всвязи с различными анти-отладочными и анти-хакерскими приемами, оставляет желать лучшего. Однако помните - в случае отключения от локальной сети машины, являющейся "сервером ключа", все остальные компьютеры не смогут работать с защищенной программой (этим особенно страдают продукты серии "1С" из-за излишних "наворотов" в системе защиты).

По возможности разнесите ключ и навороченные LPT-устройства, типа последних принтеров от HP, OKI, Lexmark; сканеров и т.п. - ну не любят они друг друга и мешают один другому.

В случае возможности выбора (например, БЭСТ-4 поставляется либо с ключом HASP, либо с ключом Sentinel) - выбирайте наиболее распространенный ключ - его будет легче и проще заменить и получить соответствующую поддержку.

Не подключать и отключать ключ при работающем компьютере, не перетыкать его слишком часто (хотя, опять же, производители обещают до 100,000 циклов записи/чтения и до 10 лет работы), по возможности не подключать к Notebook-ам (сие опять же опасно для Notebook-a, у которого система питания порта достаточно хрупкая).

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

Помните, что ключ - электронное устройство и также, как и другие устройства не любит пыли, статического электричества, воды и т.п., а поэтому хранить и использовать его нужно с соответствующими мерами предосторожности.



бич компьютерной индустрии, как, впрочем,


Не секрет, что пиратство - бич компьютерной индустрии, как, впрочем, и любой другой. Даже в самой благополучной, с этой точки зрения, стране - Англии - около 60% установленных на компьютерах программ - нелицензионные. Поэтому большинство производителей стараются так или иначе защитить свои программы от нелицензионного копирования. Некоторые (например, Microsoft) используют систему серийных номеров, другие (обычно производители игр) - делают привязку программ к CD-дискам, а некоторые (обычно производители финансовых, расчетных, инженерных и т.п. программ) используют программно-аппаратные системы защиты, основанные на электронных ключах.
Электронный ключ - это то "железо", которое нам приходится использовать без нашего желания. Кроме того, производители очень неохотно открывают его параметры, а его описание достаточно специфично и электронный ключ до сих пор остается наиболее неизвестной частью компьютера для пользователя. Поэтому постараюсь описать электронные ключи наиболее понятным для обычного пользователя языком, не "сваливаясь" в профессиональную терминологию.