ГЛАВА 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]