Назад

ГЛАВА III

 

ПРОГРАММНАЯ  ЗАЩИТА

 

·      Традиционные методы защиты от копирования

·      Способы создания ключевых дисков

·      Способы создания ключей на жестких дисках

·      Базовые методы программной защиты

·      Парольная защита

·      Шифрование

·      Методы защиты условно-бесплатного программного

обес­печения

 

 

Методы программной защиты, которые мы рассмотрим в этой главе, реализовывают подходы к защите авторских прав, осно­ванные на противодействии либо созданию копий программы (воспроизведению), либо попыткам запуска и/или исполнения неза­конной копии.

!

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

 

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

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

 

Традиционные методы защиты от копирования

 

В связи с тем, что долгое время программные продукты рас­пространялись посредством гибких магнитных дисков, наиболее раз­витыми являлись средства защиты программных продуктов, разме­щенных на гибких магнитных дисках. А методы защиты програм­мных продуктов от копирования часто назывались методами защиты дисков от копирования или, коротко, методами защиты дисков.

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

 Диск, содержащий ключевой признак, называют ключевым диском.

Очевидно, что отсутствие ключа на диске, на котором при­сутствует копия программы, свидетельствует о незаконности копии.

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

!

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

 

Способы создания ключевых дисков

 

Рассмотрим наиболее распространенные приемы создания ключей для защиты от копирования гибких магнитных дисков.

Создать ключ для защиты от копирования можно двумя спо­собами:

1)  аппаратным путем;

2)  программным путем.

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

Замечание. Данный метод применяется в основном для гибких маг­нитных дисков.

Программные методы создания ключевых дисков более раз­нообразны.

          Как и аппаратные методы, они основаны на идее создания такого ключа, который не может быть корректно считан и/или запи­сан.

Необходимо отметить, что первоначально программные методы защиты были ориентированы на программы копирования, которые распозна­вали только стандартные форматы дискет. Стандартный формат дискет обеспечивает строго определенную структуру, в которой параметры форматирования (нумерация цилиндров, дорожек, секторов диска, размер секторов и другие) имеют предопределенные значения. Например, для дискет диаметром 3,5 дюйма и емкостью 1,44 Мб стандартно номера цилиндров из­меняются последовательно от 0 до 79, а секторов - от 1 до 18.

Следовательно, если отформатировать дискету особым (нестандартным) образом и разместить ключ на такой дискете, обыч­ные программы копирования не смогут воспроизвести ключевой признак. Методы защиты от копирования, основанные на данной идее, объединены общим названием - метод нестандартного форма­тирования гибкого магнитного диска. Практическая реализация метода заключается в том, что часть гибкого магнитного диска (обязательно системные об­ласти плюс некоторое пространство диска) форматируется со стан­дартными параметрами. Остальная часть диска форматируется не­стандартно, и здесь размещается защищаемая программа. В стан­дартно отформатированной области  хранится специальная про­грамма, предназначенная для загрузки и запуска на выполнение защищаемой программы, которой «известны» нестандартные параметры.

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

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

Каждый сектор включает

·      поля синхронизации (два, одно - заголовка сектора, другое - области данных сектора);

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

·      идентификационный заголовок, состоящий из номера цилиндра, головки, сектора (логические координаты сектора) и контрольной суммы заголовка сектора (CRC);

·      области данных сектора (для DOS-стандарта - 512 байт);

·      поля, в котором хранится контрольная сумма области данных сектора, предназначенная для контроля целостности данных.

Кроме перечисленных полей, у каждого сектора есть два специальных поля: зазор заголовка сектора (16 байт) и зазор области данных (50 байт), которые предназначены[1] для предотвращения ошибок устройств.

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

Размещение ключа на специально отформатированной дополни­тельной дорожке.

Например, для дискеты емкостью 1,44 Мб можно отформати­ровать дорожку с номером 80 (или более) и разместить на ней ключ. Стандартная программа копирования не может копи­ровать информацию с дорожки с таким номером.

Неформатированные дорожки.

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

Нестандартно пронумерованные секторы на дорожке.

Дело в том, что стандартный формат поддерживает последо­вательное возрастание номеров секторов на дорожке. Но воз­можна произвольная нумерация. Проверка расположения секторов в этом случае осуществляется измерением времени между чтениями двух секторов на стандартной и ключевой дорожке.

 

 

Нестандартный размер секторов.

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

Создание сектора с неправильной контрольной суммой.

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

Изменение контрольной суммы.

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

 

Для противодействия более совершенным программам копирования, которые не зависят от стандартных параметров форматирования, ис­пользуются более сложные способы. Приведем некоторые.

Уменьшение межсекторных промежутков.

Межсекторные промежутки - это зазоры области данных (см. описание формата сектора). За счет уменьшения межсекторных промежутков на дорожке помещается еще один сектор размером 512 байт. В данном случае ключом может являться наличие такого дополнитель­ного сектора и/или его содержимое.

Размещение информации в межсекторных промежутках.

Для получения доступа к межсекторным промежуткам сле­дует задать размер сектора в заголовке большим, чем  его  реа­льный размер, указанный при форматировании. При чтении такого сектора будет прочитано его поле данных, затем межсек­торный промежуток, затем заголовок следующего сектора и т.д. Запись в такой сектор затрет заголовок следующего сек­тора, и на дорожке одновременно будут находится секторы разных размеров.

Отсутствующие маркеры полей секторов.

Напомним, что каждый сектор имеет два маркера - маркер заголовка и мар­кер данных. Каждый маркер может отсутствовать.    

Логическое превышение объема дорожки.                                                                                                                                                                                                                 

Секторы на самом деле поме­щаются на дорожке, но конец последнего сектора попадает на начало дорожки. При записи такого сектора затрется начало первого сектора (конечно, если вовремя не прервать операцию!).

Физическое превышение объема дорожки.

Этот способ называют также многооборотным форматированием. При физическом превышении объема дорожки  сумма реальных размеров секторов (т.е. указанных при форматировании) плюс служебные поля превышает объем дорожки. Тогда форматирование не закончится после одного оборота дискеты, и вначале испор­тится маркер начала дорожки (это допустимо, т.к. он не ис­пользуется ни при каких дисковых операциях), потом заголо­вок и данные первого сектора и т.д. Напомним, что при форматировании после записи на дорожку контрольной суммы поля данных последнего сектора контроллер записывает значение 4Е до тех пор, пока не встретит индексное отверстие, т.е. до конца дорожки (так называемое поле зазор дорожки). Поэтому в рассматриваемом случае после формирования всех секторов до конца дорожки запишется значение 4Е, ко­торое уничтожит секторы, сформированные на первом обо­роте, если, конечно, не прервать форматирование. Копиров­щики, не учитывающие эту возможность, не смогут скопиро­вать такую дорожку.

Методы защиты гибких магнитных дисков предполагают, что при каждом запуске защищенной программы ключевая дискета должна находиться в дисководе. Это не всегда удобно. Кроме того, существует возможность инсталляции программы на винчестер.

Способы создания ключей на жестких дисках

 

Рассмотрим методы защиты от копирования программ, расположенных на жестком магнитном диске (методы защиты жестких дисков).

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

 

Привязка к винчестеру. К индивидуальным характеристикам жест­кого диска, которые могут быть использованы в качестве ключа, от­носятся:

·      серийный номер жесткого диска (для некоторых типов винчестеров);

·      расположение bad-кластеров (заметим, что таких класте­ров может и не быть).

Привязка к BIOS означает проверку таких параметров, как:

·      тип компьютера;

·      дата создания BIOS;

·      сигнатура производителя BIOS и ее адрес в памяти;

·      таблица конфигурации BIOS;

·      контрольные суммы BIOS;

·      точки входа в BIOS некоторых прерываний и др.

Привязка к архитектуре означает проверку конфигурации компью­тера:

·      число и тип накопителей на гибких дисках;

·      число и тип накопителей на жестких дисках;

·      тип видеоадаптера;

·      объем оперативной памяти;

·      наличие (размер) дополнительной и/или расширенной па­мяти.

Иногда используют:

·      тип клавиатуры;

·      тип и интерфейс манипулятора «мышь» и «световое перо»;

·      число параллельных и/или последовательных портов.

Привязка к программному обеспечению означает проверку наличия на жестком диске и/или в оперативной памяти определенных про­грамм (чаще драйверов). Иногда осуществляют проверку наличия в системных файлах определенной последовательности запусков про­грамм и команд.

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

          Еще одним подходом для получения ключа жесткого магнит­ного диска является изменение производительности аппаратуры:

·      скорости вращения дисковода или винчестера;

·      тактовой частоты с точностью до единиц мегагерц;

·      времени доступа к оперативной памяти;

·      скорости подсистемы ввода/вывода и т.п.

Надежность такого ключа также невелика. Колебания температуры, влажность воздуха, напряжение сети, износ частей компьютера влияют на некоторые из перечисленных параметров. Кроме того, может быть включен/выключен TURBO-режим. Некоторые пара­метры совпадают для одной партии компьютеров.

          Для создания собственного ключа на жестком диске можно:

·      нестандартно отформатировать неиспользуемую дорожку.

Метод аналогичен нестандартному форматированию до­рожки на гибком диске, но здесь форматируется неисполь­зуемая, а не дополнительная дорожка.

·      Пометить ложные bad-кластеры.

При этом, чтобы уменьшить вероятность того, что пользователь заметит псевдосбойные кластеры, специалисты рекомендуют [4] помечать таким образом либо пер­вое от начала FAT свободное место (вероятность, что при пе­реносе на другой компьютер этот кластер будет занят, велика, а редактировать цепочки FAT рискнет не всякий), либо в са­мый конец FAT, так чтобы его не показывали средства типа SpeedDisk.

·      Использовать операции длинного чтения/записи.

Эти операции работают с расширенной до 516 байтов длиной сектора. Очевидно, что если произвести операцию длинной записи, а затем операцию обычного чтения, то дополнитель­ные 4 байта не будут считаны. Их можно считать только опе­рацией длинного чтения. Заметим, что обычная запись сек­тора не разрушает дополнительные 4 байта.

·      Модифицировать системные файлы с последующей проверкой.

___________________________________________________________

Для защиты программы от копирования можно осуществлять проверку не индивидуальных параметров компьютера или жесткого диска, а самой защищаемой программы, вернее файла, в котором она записана. Так, для файла жесткого диска уникальными характери­стиками являются:

·      время создания файла (каталога);

·      номера используемых кластеров;

·      информация в неиспользуемом участке последнего кла­стера.

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

___________________________________________________________

Методика защиты, основанная на использовании ключевых дисков, является традиционной. Прежде всего потому, что ключевой диск мог одновременно использоваться и как лицензионный. Кроме того, при всех своих недостатках этот тип защиты очень дешевый. Сегодня упомянутые методы, хорошо зарекомендовавшие себя при работе под управлением операционной системы DOS, используются все реже и реже. Во-первых, потому что на смену абсолютно неза­щищенной операционной системе DOS приходят операционные сис­темы, поддерживающие все больше функций безопасности. Сегодня, например, операционная система Windows NT «не разрешает» пря­мой доступ к диску непривилегированному пользователю, поэтому хранение ключа на неиспользуемой или дополнительно отформати­рованной дорожке и аналогичные приемы нецелесообразны. Во-вторых, ин­тенсивное развитие сетевых технологий диктует новые способы рас­пространения программного обеспечения. Все чаще авторы распро­страняют свои продукты не на гибких магнитных дисках или совре­менных компакт-дисках, а посредством передачи через компьютер­ную сеть. Поэтому традиционные методы защиты дисков становятся все менее актуальными. На смену им приходят другие методы и тех­нологии защиты, многие из которых используют элементы традиционной защиты.

___________________________________________________________

 

Подробнее

 

1.   Физическая организация хранения информации на дискете -

Д.И. Пра­виков «Ключевые дискеты» [17], стр. 31-42.

2.   Способы определения индивидуальных параметров компьютера  - Д.И. Пра­виков «Ключевые дискеты» [17].

3.   Способ определения типа микропроцессора - Д.И. Пра­виков «Ключевые дискеты» [17], стр.23-27.

4.   Механизмы защиты дисков - «Защита программного обеспечения» под ред. Гроувера [18], стр. 48-57.

5.   Методы защиты гибких магнитных дисков - Глава «Идентификация дискет», Юджин Х. Спаффорд «Защита программного обеспечения от несанкционированного доступа» Internet-ресурс [19].

 

 

Базовые методы программной защиты

 

Методы программной защиты, которые будут рассмотрены ниже, предназначены для противодействия попыткам за­пуска и/или исполнения программы незаконным пользователем.

К базовым методам защиты программ от незаконного использования отнесем широко распространенные на практике методы. Это

·      парольная защита;

·      шифрование;

·      а также группа методов, предназначенных для защиты условно-бесплатных программных продуктов.

 

Парольная защита

 

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

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

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

Следует обратить внимание на то, что процесс ввода пароля поддается наблюдению, даже в том случае, если отсутствует режим «эхо». Человек, находящийся рядом с пользователем, вводящим пароль, наблюдая за процессом набора на клавиатуре, может зафиксировать вводимые символы. Кроме того, существует множество специальных программ типа «троянский конь», которые через перехват соответствующего прерывания читают и сохраняют пароли, набираемые на клавиатуре.

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

Очевидно, что оригинальный пароль необходимо хранить в месте, доступном защищенному приложению и малодоступном злоумышленнику. Следовательно, основная задача автора, использующего парольную защиту, - как можно лучше «спрятать» оригинальный пароль.

На практике для хранения эталонного пароля используются следующие способы:

1)   эталон хранится непосредственно в защищенной программе;

2)   эталон хранится в отдельном специально предназначенном файле (этот способ часто используют при защите Windows-приложений);

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

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

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

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

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

          Предварительно отметим (этот вопрос будет рассматриваться в главе «Технологии взлома защит»), что в большинстве случаев как защита, основанная на простом хранении пароля, так и на хеши­ровании пароля, может быть легко «обойдена» злоумышленником. Как любят говорить взломщики, - путем изменения в программе всего лишь одного байта!

          Хорошо зарекомендовал себя метод шифрования пароля. «Шифровка даже при использовании некриптостойких алгоритмов и коротких паролей все же требует трудоемкого изучения алгоритма, написания атакующих программ и часто очень длительного времени на поиск подходящего пароля» [20, стр.86].

!

 Очевидно, что в случае хранения зашифрованного пароля необходимо особое внимание уделить защите программы от исследования алго­ритма шифрования-дешифрования.

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

 

Шифрование

 

Шифрование - это обратимое преобразование информации с целью сокрытия ее содержания для неавторизованных лиц.

Авторизованное (неавторизованное) лицо - пользователь, имеющий (не имеющий) право на доступ к информации.

 

Дешифрование - преобразование информации, обратное шифрованию.

 

          Методы, алгоритмы и средства шифрования информации изучает криптография. Системы, использующие шифрование информации, называют криптографическими системами, или криптосистемами.

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

Криптографические методы и алгоритмы подробно изложены в литературе, например, в учебном пособии Ю.С. Харин, В.И. Берник, Г.В. Матвеев «Математические основы криптологии» [21]. Поэтому здесь только перечислим основные методы и криптоалгоритмы, а также остановимся на способах применения шифрования для защиты авторских прав в сфере программного обеспечения.

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

 

Криптоанализ объединяет методы, алгоритмы, средства дешифрования, а также оценку стойкости криптосистем.

Здесь под стойкостью (надежностью) криптоалгоритма понимают количество компьютерных операций, необходимых криптоаналитику для вскрытия ключа (или исходного текста) [21]

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

!

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

 

          На практике применяются в основном два вида криптосистем:

·      симметричные и

·      асимметричные.

          В симметричных криптосистемах одним и тем же секретным ключом осуществляется и шифрование, и дешифрование. Наиболее известными симметричными криптосистемами являются системы DES, GOST (ГОСТ), IDEA, являющиеся национальными стандартами.

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

          В настоящее время используются и комбинированные системы. Например, при передаче по сети информация шифруется симметричным алгоритмом типа DES, ключ при этом передается также в зашифрованном виде, но с помощью алгоритма шифрования с открытым ключом типа RSA.

!

 Заметим, что специалисты не рекомендуют самостоятельно реализовывать схемы перечисленных классических криптоалгоритмов, так как сложность этих схем часто приводит к ошибкам реализации либо алгоритм реализовывается неэффективно. Лучше использовать готовые реализации, широко представленные на рынке программного обеспечения.

          К простейшим методам шифрования относятся подстановки и перестановки. Произведение простых шифров (подстановок и перестановок) дает составной шифр, который является более надежным, но обеспечивает легкость шифрования и дешифрования. Многократное чередование простых шифров дает, как правило, стойкий криптоалгоритм.

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

В самом деле,

0 xor 0 = 0

0 xor 1 = 1       =>      Text   xor  Key  = Shifr       

1 xor 0 = 1                  Shifr  xor  Key  = Text

1 xor 1 = 0

!

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

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

!

стойкость шифра должна определяться только секретностью ключа (правило Кирхгоффа).

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

          На основе шифрования на практике используются следующие механизмы защиты программ.

Шифрование кода программы

Код программы шифруется с тем, чтобы быть расшифрованным только во время выполнения программы.

Шифрование фрагмента (участка) программы.

Для шифрования чаще выбирается критический участок программы.

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

 Шифрование пароля.

Этот метод упоминался  выше.

Шифрование данных.

Зашифрованные команды после дешифрации легко «узнать на вид», поэтому рекомендуется шифровать данные.

!

 Сильной реализацией специалистами признается шифрова­ние данных прямо в исходном тексте программы.

___________________________________________________________

 

Подробнее

 

1.   История криптологии - В. Жельников «Криптография от папируса до компьютера» [22], стр. 45-95.

2.   Математические модели стандартных криптосистем DES, IDEA, GOST - Ю.С. Харин, В.И. Берник, Г.В. Матвеев «Математические основы криптологии» [ 21], стр. 194-205.

3.   Схема формирования шифра в DES - «Защита программного обеспечения» под ред. Д. Гроувера [18], стр. 103-107.

4.   Описание RSA-криптосистемы - Ю.С. Харин, В.И. Берник,      Г.В. Матвеев «Математические основы криптологии» [21], стр. 243-246; В. Жельников «Криптография от папируса до компьютера» [22], стр. 148-152.

5.   Шифр Эль-Гамаля - В. Жельников «Криптография от папируса до компьютера» [22], стр. 152-154.

6.   Подстановки и перестановки -  «Защита программного обеспечения» под ред. Д. Гроувера [18], стр. 98-100.

7.   Простейшие шифры - В. Жельников «Криптография от папируса до компьютера» [22], стр. 128-137.

8.   Шенноновские модели криптосистем (подстановка символов алфавита, перестановка символов, шифр Виженера и его модификации,  шифр Вернама, биграммная подстановка) - Ю.С. Харин, В.И. Берник, Г.В. Матвеев «Математические основы криптологии» [21], стр. 138-144.

9.   Позиционные и непозиционные системы кодирования - М. К. Буза «Введение в архитектуру компьютеров» [23], стр. 99-114.

___________________________________________________________

 

Методы защиты условно-бесплатного

программного обеспечения

 

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

          Нечестные пользователи, очевидно, всеми способами стре­мятся либо увеличить время бесплатного использования программы, либо и вовсе "снять" все ограничения. Таким образом, разработчикам условно-бесплатного программного обеспечения приходится защи­щать свои творения для того, чтобы получить материальное возна­граждение за труд.

          На практике разработчики используют следующие принципы защиты:

·        регистрационные коды;

·        ограничение по времени;

·        ограничение на число запусков;

·        раздражающие экраны (Nag Screen).

Регистрационные коды.

Наиболее популярным методом является защита, в основе ко­торой лежит регистрация пользователя.

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

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

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

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

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

!

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

          Модным можно назвать метод психологического воздействия на незарегистрированного пользователя с помощью вы­вода на экран сообщений, напоминающих пользователю о регистра­ции. Идея заключается в том, что такого рода сообщения выводятся в виде окон многократно на протяжении всего сеанса работы с прило­жением. Пользователю для продолжения работы приходится посто­янно отключать эти окна, что отвлекает и раздражает его. Более ин­тересной является реализация метода, когда для закрытия такого окна пользователю приходится нажимать каждый раз на разные кла­виши или вводить длинные слова. Называют такую защиту Nag Screen - раздражающий экран (англ. nag - изводить, раздражать). Рассчитывают авторы на то, что постоянное раздражение пользователя либо заставит его отказаться от работы с приложением, либо заплатить за программный продукт и зарегистрироваться.

Заметим, что рассмотренные здесь методы просты в реа­лизации, поэтому используются достаточно широко. Но с другой стороны, они также являются и хорошо изученными с точки зрения взлома защиты, поэтому могут быть рекомендованы только в сочетании с другими механизмами.



[1] «служат для организации задержки при выдачи порции данных с дискеты, так как контроллер имеет определенную инерционность, а также для компенсации разбросов физической длины при перезаписи различных полей, возникающей из-за нестабильности вращения дисковода» [17]

Назад