|
|
|
|
|
Практически ни одна современная книга, посвященная информационной безопасности, не обходится без упоминания о криптографии. И на это есть серьезные причины: криптография — один из основных инструментов, использующихся при защите информации. Термин шифр (cipher) происходит от арабского слова "цифра" — арабы первыми стали защищать текст, заменяя буквы цифрами. Криптография (cryptography) дословно переводится как "тайнопись", искусство тайного письма (от греческих слов kryptos — тайный и grapho — пишу). Потребность в криптографии возникала, когда требовалось передавать сообщения таким образом, чтобы их не мог прочитать противник. В историю вошло множество шифров, изобретенных и применявшихся в разные века, в том числе и до нашей эры.
|
|
|
|
|
|
|
|
|
Теперь рассмотрим, что изменится при использовании таких критериев, как качество, надежность и эффективность в приложении к средствам защиты. Проблема оценки качества защиты заключается в том, что отличить качественную защиту от некачественной очень трудно. Чем может руководствоваться потенциальный потребитель при выборе необходимых ему средств защиты? Например рекламными материалами, исходящими от разработчика или продавца. Но можно предположить, что, желая продать программу, разработчик будет всячески расхваливать преимущества своего продукта и ни словом не обмолвится о слабых сторонах. Причем описываемые достоинства могут быть и выдуманными, а о некоторых недостатках разработчик не всегда знает в силу заблуждений или элементарной технической безграмотности.
|
|
|
|
|
|
|
|
|
Когда речь идет о прикладных программах, довольно легко применять такие понятия, как качество, надежность и эффективность. Все эти категории несут в себе долю субъективизма, но, выяснив мнение нескольких сотен пользователей, на основании собранных статистических данных можно составить вполне реалистичную картину. Если результат работы программы соответствует ожиданиям пользователей или даже превосходит их, то программу считают качественной. Критерий качества применяется для сравнения результатов процессов, которые можно выполнить более чем одним способом. Так при умножении двух чисел может получиться только один возможный результат, и если в какой-то программе получается другое значение, то правильно будет охарактеризовать программу не как низкокачественную, а как неверно выполняющую расчеты. Но, например, при решении дифференциальных уравнений можно использовать различные численные методы интегрирования, и за большее или меньшее время получить отличающиеся по значениям результаты. При этом несовпадение результатов (как по значению, так и по затраченному времени) обусловлено не ошибками в программе, а свойствами того или иного метода интегрирования и выбранным значением шага (увеличение шага, как правило, приводит к уменьшению времени вычислений, но снижению точности). Качественной будет считаться та программа, которая в подавляющем большинстве случаев удовлетворяет всем требованиям, предъявляемым пользователем. И, разумеется, с появлением новых технологий или конкурирующих продуктов критерии качества могут становиться жестче, и программа, считавшаяся качественной на протяжении многих лет,.может перестать быть таковой, хотя ее функциональность никак не изменилась.
|
|
|
|
|
|
|
|
|
Если, приобретая защищенную программу, пользователь оказывается перед необходимостью тратить усилия на создание условий, в которых подсистема защиты согласится работать, ценность программы для него резко снижается. Ведь деньги платились ради автоматизации некоторого процесса, а не для "развлечений" в виде потерянного времени. Вполне разумным кажется следующий подход: лучше ослабить защиту и допустить возможность существования нелегальных пользователей, чем создавать неудобства честным потребителям из-за слишком строгой защиты. Один легальный пользователь, обиженный неудачно реализованной защитой, способен создать продукту изрядную антирекламу.
|
|
|
|
|
|
|
|
|
Если, приобретая защищенную программу, пользователь оказывается перед необходимостью тратить усилия на создание условий, в которых подсистема защиты согласится работать, ценность программы для него резко снижается. Ведь деньги платились ради автоматизации некоторого процесса, а не для "развлечений" в виде потерянного времени. Вполне разумным кажется следующий подход: лучше ослабить защиту и допустить возможность существования нелегальных пользователей, чем создавать неудобства честным потребителям из-за слишком строгой защиты. Один легальный пользователь, обиженный неудачно реализованной защитой, способен создать продукту изрядную антирекламу.
|
|
|
|
|
|
|
|
|
Когда человек приобретает программный продукт, защищенный от несанкционированного тиражирования, он хочет купить только сам продукт, а защиту ему навязывают. Более того, он за эту защиту еще и вынужден платить — аппаратный ключ, идущий в комплекте с программой, стоит даже в небольших партиях несколько десятков долларов. Разумеется, разработчик в каждую продаваемую копию закладывает стоимость ключа. Если защита не использует аппаратных элементов, все равно на ее разработку или приобретение были затрачены материальные ресурсы, и эти затраты необходимо окупить. Следовательно, стоимость продукта для конечного пользователя все равно повышается.
|
|
|
|
|
|
|
|
|
Увеличение сложности защитного механизма, возможно, способно повысить уровень защищенности и снизить вероятность несанкционированного доступа до пренебрежимо малой величины. Но при этом резко возрастет вероятность отказа в доступе легитимному пользователю. В Интернете в форумах, посвященных защите информации, иногда появляются люди, считающие, что им удалось придумать новый, очень хороший способ защиты от несанкционированного распространения и использования программных продуктов.
|
|
|
|
|
|
|
|
|
Производительность (скорость выполнения) тоже довольно часто страдает, если защищаемая программа злоупотребляет функциями зашиты. Чрезмерное потребление процессорного времени В одной из программ, играющих в Gomoku (по-другому TicTacToe— крестикинолики на большом поле), для защиты от исследования применялся следующий подход. Программа была упакована и зашифрована, и при загрузке в память сама себя расшифровывала и подготавливала к работе. При этом вместо прямых вызовов функций из библиотек Windows, таких как kernel32.dll, user32.dll или gdi32.dll, выполнялись вызовы небольших процедур. Каждая из этих процедур вычисляла контрольную сумму определенного фрагмента программы в памяти и на основании полученного значения вычисляла адрес библиотечной функции, которой необходимо передать управление. Если в программе происходили малейшие изменения, например в отладчике задавалась точка останова путем изменения одного байта, контрольная сумма оказывалась иной и переход осуществлялся по неверному адресу. Однократное выполнение подсчета контрольной суммы не занимает слишком много времени. Однако при отображении элементов интерфейса обычно вызы- вается много библиотечных функций подряд. Все это приводило к тому, что программа выводила данные на экран с видимыми невооруженным глазом задержками. Стоит отметить, что алгоритм просчета оптимального хода в игре не требует обращения к Win32 API, а значит, применение такой защиты не сказывается на времени, необходимом компьютеру для выбора лучшего варианта. В противном случае программой с подобной защитой было бы невозможно пользоваться.
|
|
|
|
|
|
|
|
|
Один из распространенных способов защиты программ от несанкционированного копирования (тиражирования) связан с использованием регистрационного кода, который пользователь должен ввести в окне регистрации для получения работоспособной версии программы. Регистрационный код, как правило, вычисляется автором (владельцем прав) или распространителем (продавцом) программного продукта на основании предоставленной пользователем информации (например его имени и названия компании, в которой он работает). Процедура вычисления может быть основана на некотором секретном алгоритме, разработанном автором, или на криптографии с открытым ключом. В обоих случаях в программе должен присутствовать обратный алгоритм, позволяющий проверить правильность регистрационного кода. Но в случае применения криптографии с открытым ключом, зная алгоритм проверки, математически сложно полностью воссоздать алгоритм вычисления регистрационного кода. А при использовании секретного алгоритма чаще всего обращение алгоритма проверки после его извлечения из программы не является математически сложной задачей.
|
|
|
|
|
|
|
|
|
Один из важных вопросов, нуждающихся в рассмотрении, заключается в том, стоит ли усиливать защиту, если для этого есть хоть какая-то возможность, или может возникнуть ситуация, в которой усиление защиты пойдет не на пользу, а во вред? До ответа на этот вопрос стоит отметить, что существуют две принципиально разных категории продуктов, использующих средства защиты информации. К первой категории относятся такие продукты, для которых обеспечение информационной безопасности — первоочередная задача. Во вторую категорию попадают прикладные продукты из любых других, явно не свя- занных с обеспечением безопасности областей, но по тем или иным причинам нуждающиеся в средствах защиты. При разработке решений, относящихся к первой категории, все должно быть нацелено именно на обеспечение максимальной степени защиты, пусть даже в ущерб другим характеристикам. Такие параметры, как удобство использования и быстродействие, являются несущественными, если задача обеспечения безопасности не решена полностью и простора для компромиссов здесь нет. Ненадежное с точки зрения безопасности решение не должно использоваться, даже если оно в 10 раз удобнее и в 100 раз быстрее, чем любая доступная альтернатива.
|
|
|
|
|
|
|