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

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

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

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

Блок логики представляет собой устройство, которое генерирует значения некоторой функции: 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 байтов. В ней может храниться информация, необходимая программе для запуска, описывающая количество лицензий на запуск, наименование фирмы покупателя, номер версии программы и т.д.

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

Обычно, применительно к современным ключам, работающим в системах типа WinXX, API разделяется на 2 уровня: API, включаемое в защищенную программу, и драйвер ключа - системный драйвер, обеспечивающий взаимодействие между программой и ключом. Такое "разделение труда" обуславливается несколькими причинами: невозможность выполнения операций ввода/вывода на уровне прикладных задач (в защищенном режиме, для выполнения операций ввода/вывода требуется уровень привилегий "0" [Ring0], в то время как все прикладные задачи выполняются на уровне 3 [Ring3]), затруднение понимания работы ключа, возможность ввода дополнительной шифровки (и, таким образом, повышение стойкости к взлому) и т.д. Кроме того, на уровне API происходит трансформация данных, полученных из ключа и передаваемых в программу, и наоборот. Производители ключей любят преувеличивать не меньше любых других производителей компьютерного железа (и не только железа:), и все их криптоалгоритмы на 90% вынесены в программную часть, а аппаратная выполняет оставшиеся 10% работы. Оно и понятно - в случае усложнения такого устройства оно возрастет в цене и автоматически упадет спрос, а стойкость к взлому они попробуют увеличить другими методами. Кроме того, некоторые функции API выполняет целиком и полностью, даже не обращаясь к ключу! (Например, ключ Novex содержит только память, а вся логика выполняется на программном уровне).

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

Основными производителями электронных ключей защиты являются: 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-ключей.

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

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

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

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

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

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

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

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

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

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

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

По материалам www.3dnews.ru, Kab (kab@ru.ru), Лаптенок Станислав


Компьютерная газета. Статья была опубликована в номере 22 за 2000 год в рубрике разное :: страна советов

©1997-2024 Компьютерная газета