курсовая работа. Учебное пособие по дисциплине технология разработки программного обеспечения специальность Программирование в компьютерных системах
Скачать 7.57 Mb.
|
4.2. Криптоалгоритмы и протоколы шифрования Криптография - сокрытие смысла информации, представленной в любой форме: в виде данных, хранящихся на диске или сообщений, передаваемых но каналам связи. Функции криптографии: зашифрование/расшифрование (криптопреобразование) информации; контроль целостности и подлинности информации с целью обнаружения случайных и преднамеренных искажений (аутентификация). Тип криптографического преобразования выбирается из семейства преобразований, образующих криптографическую систему. Параметр, выбирающий конкретное преобразование называется ключом. Стойкость шифра должна определяться только секретностью ключа.. Для сокрытия смысла информации применяют два типа преобразований: кодирование; шифрование. Кодирование подразумевает использование кодировочных таблиц, содержащих наборы часто используемых элементов информации (коды, фразы, операторы). Каждому из этих элементов соответствует произвольно выбранный кодовый идентификатор. Недостатком является то, что при несанкционированном использовании кодировочной таблицы, необходимо создать новую и распространить ее среди пользователей надежным образом. Шифрование представляет собой процедуру (алгоритм) преобразования элементов открытого текста в форму, недоступную для распознавания. Современные криптосистемы используют, как правило, оба типа преобразования в определенном сочетании. Все сложные шифры, обеспечивающие высокую степень надежности, могут быть разложены на ряд простейших преобразований: замену и перестановку. В основе преобразования замены лежит метод кодировочной таблицы. Элементы открытого текста замещаются на элементы (кодовые идентификаторы) из кодировочной таблицы. Замена, при которой одинаковым элементам открытого текста ставятся в соответствие одинаковые элементы криптограммы, называется подстановкой. Перестановка заключается в изменении взаимного расположения элементов открытого текста. На практике преобразования замены и перестановки могут дополнять друг друга. Между шагами замены осуществляется перестановка Р элементов в соответствии с определенным алгоритмом. Качественный шифр, кроме .криптостойкости и других параметров, определяющих его эффективность, должен быть удобным для его технической и программной реализации. Этим свойством в полной мере обладают блочные алгоритмы. Суть их заключается в том, что открытый текст разбивается на блоки (например, по 64 бита) каждый из которых зашифровывается отдельно. Простейшим блочным алгоритмом является - электронная кодировочная книга. При его использовании взаимного влияния блоков не проявляется, т. е. два одинаковых блока открытого текста будут представлены одинаковыми зашифрованными блоками. При искажении зашифрованной информации ошибка будет распространяться только в пределах блока, в котором возникла ' ошибка. Это приводит к возможности выявления закономерности повторяющихся блоков и на основании ее анализа расшифровки информации. Поэтому на практике чаще всего используют методы шифрования с обратной связью. При этом информация разбивается на блоки и шифруется. Результаты каждого шага шифрования запоминаются и используются для модификации следующего шифруемого блока исходного текста. Например, каждые 64 бита зашифрованного текста складываются побитно со следующим блоком исходного текста и затем шифруются. Дешифрация осуществляется в обратном порядке. Корректность дешифрации может быть нарушена, если возникли ошибки в передаче данных. Даже искажение единственного бита в зашифрованном тексте приведет к полному искажению информации при расшифровке очередного блока, который в свою очередь приведет к ошибке при расшифровке следующего блока и так далее. Практически все используемые на практике шифры могут быть раскрыты при наличии неограниченных вычислительных возможностей. Существует единственный абсолютно надежный шифр - одноразовый блокнот. Он основан на соблюдении следующих трех принципов: Ключ используется только для одного сеанса криптопреобразования (причина названия шифра). Ключ формируется случайным образом. Число элементов в ключе совпадает с числом элементов открытого текста. Это означает, что сколько бы раз в открытом тексте не встречался определенный элемент, он каждый раз. раз будет иметь новый кодовый идентификатор. Использование абсолютно надежных шифров для защиты больших объемов информации практически невозможно в связи с огромными трудозатратами для производства ключевых последовательностей. В связи с этим, конкретное конструирование шифров должно учитывать, с одной стороны, надежную защиту информации, а с другой - реальные условия реализации и эксплуатации. Это приводит, в первую очередь, к ограничению размера ключа. Современные криптоалгоритмы подразделяются па два класса: ассиметричные и симметричные. В симметричных криптосистемах (классическая криптография) секретный ключ зашифрования совпадает с секретным ключей расшифрования. В России наиболее используемыми симметричными криптоалгоритмами являются DES - Государственный стандарт США на шифрование данных и ГОСТ 28147-89 — отечественный стандарт на шифрование данных. В асимметричных криптосистемах (криптография с открытым ключом открытый ключ шифрования не совпадает с секретным ключом дешифрования. Открытый ключ сообщается всем пользователям криптосистемы. Расшифровать с помощью открытого ключа зашифрованную информацию практически невозможно. В сети с N абонентами, каждый абонент вырабатывает собственную ключевую пару и, следовательно, в таких системах будет N открытых и N секретных ключей. На практике чаще всего применяется криптоалгоритм RSA . Управление ключами. Управление ключами представляет собой процесс, посредством которого ключевые элементы, используемые в симметричных или ассиметричных криптосистемах, предоставляется в распоряжение пользователей и подвергается обработке определенными процедурами безопасности, вплоть до его уничтожения. Управление ключами связано со следующими процедурами: генерация ключей; распределение ключей; хранение ключей; уничтожение ключей; регистрация пользователей. При формировании ключей криптосистем используют механизмы генерации случайных чисел. Данные механизмы могут содержать в себе как случайные, так и псевдослучайные генераторы. Например, учитывая, что числа, вырабатываемые псевдослучайными генераторами, зависимы между собой, т.к. их алгоритмы рекуррентны, необходимо вносить именно случайный фактор в их работу. Помимо качественной генерации ключей криптосистемы при использовании симметричных криптосистем необходимо обеспечить такое распределение их между пользователями , которое гарантировало бы их максимальную секретность и целостность. Одним из подходов является метод, когда ключи в сети распределяются по каналам связи в зашифрованном виде с помощью других ключей. Следовательно, совокупность ключей может образовывать иерархию, в которой каждый ключ распределяется или хранится в зашифрованном виде и зависит от ключа более высокого уровня. В такой иерархии ключи самого высокого уровня не могут передаваться по сети и должны быть распределены другим способом, обеспечивающим конфиденциальность (например, с помощью курьера). На верхнем уровне иерархии находится мастер-ключ всей системы, на базе которого по одному мастер-ключу для каждого абонента сети (зонный мастер-ключ). Так как не рекомендуется использовать один и тот же ключ для шифрования данных в течение длительного времени, то ключи, используемые на самом низком уровне (сеансовые ключи) регулярно меняются и рассылаются по сети в зашифрованном виде на базе зонных мастер-ключей. Более безопасной модификацией данного метода является способ, когда ключ разбивается на несколько частей, которые доставляются пользователям по различным каналам: курьером, по телефону, по почте и другим образом. Существует целый ряд способов распределения ключей, использующих центр распределения ключей. Это позволяет сократить число необходимых ключей, так как не каждому пользователю сети надо секретно взаимодействовать с каждым. Пример протокола распределения ключей с использованием симметричной криптосистемы и ЦРК: ЦРК вырабатывает и передает по защищенному каналу долговременные ключи каждому пользователю системы для связи с ЦРК; Когда пользователь А желает установить секретную связь с пользователем В, он посылает запрос в ЦРК с требованием секретного сеансового ключа для связи с пользователем В; ЦРК вырабатывает сеансовый ключ, зашифровывает его два раза на долговременных ключах пользователей вместе с идентифицирующей пользователей информацией и рассылает соответствующие шифры пользователям А и В; 4. Пользователи А и В расшифровывают поступившие шифротексты и получают сеансовый ключ. Распределение ключей с помощью криптосистем с открытым ключом является более простым в силу возможности использования незащищенных каналов и отсутствия необходимости в секретности при хранении и передаче открытых ключей. Однако распределение открытых ключей также требует подтверждения их подлинности (аутентификации). Для этого также может использоваться ЦРК, где пользователи регистрируют свои открытые ключи, но сам центр при этом не становится активным участником протокола и нагрузка на него не высока. 4. 3. Алгоритмы и протоколы реализации функции цифровой подписи Под аутентификацией понимают установление подлинности и целостности информации исключительно на основе самой информации. Нарушение подлинности и целостности должно обнаруживаться с заданной вероятностью. Для решения этой задачи чаще всего используют концепцию аутентификации на основе цифровой подписи. Система цифровой подписи предполагает, что каждый пользователь вырабатывает свою пару ключей. Открытый ключ расшифрования сообщается всем пользователям сети. На основе этого ключа каждый пользователь может расшифровать(проверить) цифровую подпись и подтвердить целостность и подлинность документа. Зашифровать (создать) цифровую подпись можно только с использованием секретного ключа. Следовательно, схема цифровой подписи является обратной схеме шифрования па базе асимметричных криптоалгоритмов. Для реализации системы цифровой подписи чаще всего используют степенную функцию (алгоритм RSA). Цифровая подпись является избыточной информацией, приписываемой к защищаемому сообщению. При этом необходимо замаскировать наличие цифровой подписи с целью недопущения удаления его из сообщения (например, шифрование подписи вместе со всем сообщением). Основными элементами цифровой подписи являются: идентификатор пользователя; дата и время создания подписи; массив, полностью соответствующий открытому сообщению, для подтверждения подлинности информации. . Для сокращения времени подписывания и размера цифровой подписи при формировании третьего элемента используются так называемые функция хэширования или хэш-функции (hash function). Функцией хэширования называется функция, преобразующая сообщение М в сообщение Н (М) фиксированного малого размера. Пользователь, получивший сообщение заново вычисляет хэш-функцию и сравнивает ее значение со значением, соответствующего элемента цифровой функции. Криптографические хэш-функции подразделяются на два класса: с ключом и без ключа. Значение хэш-функции с ключом может вычислить лишь тот, кто знает некоторый секретный параметр-ключ. Такие функции называются МАС - кодами аутентификации сообщений (стандарт FIPS PUB 113-1985 (МАС)). Российским аналогом этого американского стандарта может служить режим имитоприставки в ГОСТ 28147-89. Хэш-функцией с ключом (зависящей от ключа) называется функция, имеющая следующие свойства: Функции Н(к,х) должна быть известна, а секретная информация должна представлять собой ключ к; Аргумент х функции Н(к,х) может быть строкой чисел произвольной длины, а значение функции должно быть строкой чисел фиксированной длины. При любых данных к и х вычисление Н(к,х) должно быть достаточно быстрым; По любому данному х должно быть трудно угадать значение Н(к,х). Должно быть трудно определить ключ к даже по большому числу известных пар [х, Н(к,х)]. В стандарте FIPS PUB 113-1985 хэш-функция с ключом построена на основе блочного стандарта шифрования DES с ключом из 56 бит. Хэш-функцнн без ключа называются MDS - код определения манипуляции. Они в свою очередь подразделяются на два подкласса: слабые однонаправленные хэш-функцнн и сильные однонаправленные хэш-функции. При разработке систем цифровой подписи криптографу необходимо определить, какими возможностями может располагать злоумышленник при атаке на схему цифровой подписи. По возможности доступа к информации выделяют три класса методов атаки: По открытому ключу. Злоумышленник знает только открытый ключ. По открытому ключу и сообщению. Злоумышленник знает открытый ключ и может наблюдать случайные пары (сообщение/подпись). По выбранным сообщениям. Злоумышленник может получить подписи к сообщениям выбранным им лично. Различают несколько уровней по степени раскрытия схемы подписей: Эпизодическое подделывание. Злоумышленник подделывает подпись одного сообщения, не обязательно им выбранного. Сообщение это может быть или случайным, или не имеющим смысла. 'Выборочное подделывание. Злоумышленник подделывает подпись некоторого сообщения, по своему выбору. Универсальное подделывание. Злоумышленник может подделывать подписи к любому сообщению, но без знания секретного ключа подписи. Он может найти функционально эквивалентный алгоритм. Полное раскрытие схемы подписи. Злоумышленник может вычислить секретный ключ подписывающего. 5. Программно-аппаратная форма защиты интеллектуальной собственности 5.1. Методы защиты от исследования логики работы исполняемых модулей Выбор методов защиты от исследования исполняемых модулей обусловлен формой атаки: статическая или динамическая. 1. Статическая форма предусматривает использование дизассемблеров различного уровня анализа кода программы. Особенно опасны так называемые "умные" дизассемблеры, которые пытаются оформить ассемблерный текст в виде сочетая подпрограмм, процедур и других структур. Это существенно облегчает процесс последующего исследования логики работы исполняемых модулей. Существуют следующие методы защиты от дизассемблирования: шифрование использование самогенерируемых кодов "обман" дизассемблера Шифрование обычно используется как часть защиты и поэтому не обязательно должно быть сложным. Достаточно к каждому байту модуля программы прибавить некоторую константу, чтобы дизассемблер не смог выполнить свою работу. Известны два способа организации дешифрации в оперативной памяти. В простейшем случае модуль дешифрации один и получает управление сразу же после запуска программы. Расшифровав программу, он передает ей управление. Более надежный механизм защиты использует поэтапную дешифрацию программ. При этом программа дешифруется не сразу в полном объеме, а отдельными участками и в несколько этапов, разнесенных по времени работы программы. Самогенерируемые коды это исполняемые коды программы, получаемые в результате некоторого набора арифметических или логических операций над определенным, заранее рассчитанным массивом данных. "Обманом" дизассемблера называется стиль программирования, который позволяет запутать "умный" дизассемблер путем нестандартной интерпретации некоторых команд и нарушением общепринятых соглашений. Существуют следующие способы обмана дизассемблера: использование нестандартной структуры программы; скрытые переходы, вызовы подпрограмм и прерываний и выходы из них; переходы и вызовы подпрограмм по динамически изменяемым адресам; модификация исполняемых кодов. Первый способ заключается в том, что программа не имеет стандартной сегментации (например, отсутствует стековый сегмент). Второй способ заключается в нестандартной реализации некоторых операторов. Третий и четвертый способ подразумевают модификацию исполняемых кодов и адресов в процессе выполнения программы. Для сокрытия алгоритма работы программы используют так называемые пустышки. Это участки программы достаточно большого объема, производящие некоторые сложные вычисления, но не имеющие никакого отношения к назначению программы. 2. Динамическая форма атаки предусматривает использование отладчиков. Проблема защиты заключается в обнаружении факта работы программы под отладчиком. Для этого могут использоваться следующие механизмы: 1.Блокировка отладочных прерываний. Метод защиты зависит от того, восстанавливает ли отладчик среду своего функционирования. Эта функция заключается в переопределении отладчиком текущих векторов 1 и 3 на стандартный либо свой собственный обработчик. При восстановлении среды функционирования отладчиком защита заключается в перехвате отладочных прерываний. Если в процессе выполнения защищенной программы при вызове отладочного прерывания управление получает ее собственный обработчик, то программа функционирует не под отладчиком. В противном случае необходимо предпринять меры, препятствующие отладке. Пример отладчика – Turbo Debugger. Если отладчик не восстанавливает среду функционирования, то обработчики отладочных прерываний программы могут состоять из одной команды RET или выполнять какие-либо действия, фиксирующие факт работы программы под контролем отладчика. Пример отладчика - Debug. 2.Блокировки прерываний от клавиатуры. В ходе трассировки программы необходимо нажимать на клавиши для перехода к очередной команде. Это можно использовать для блокировки отладчика. Так если отладчик не восстанавливает среду функционирования, то достаточно запретить клавиатурное прерывание при выполнении определенного участка программы (например, начало программы или наиболее важный ее участок). Запретить клавиатурное прерывание можно либо написать свой обработчик вектора 9, либо использовав порт контроллера прерываний 21h. При восстановлении отладчиком среды функционирования можно применить метод, описанный для блокировки отладочных прерываний контролируя при этом вектор 9. 3.Использование прерывания таймера. Защищенная программа устанавливает свой обработчик для прерывания таймера, который устанавливает, например, флаг в случае прихода прерывания от таймера. В определенный момент времени она запрещает это прерывание и выполняет какую-либо работу, периодически проверяя флаг. Если программа работает под отладчиком, команда запрета прерываний не работает и флаг будет установлен, сигнализируя о работе под отладчиком. 4.Использование конвейера команд. Этот метод использует наличие в процессоре конвейера команд или внутренней кеш-памяти. Метод заключается в модификации команды программы, находящейся вблизи от той команды, которая выполняет эту модификацию. Если программа работает не под отладчиком, к моменту модификации модифицируемая команда уже находится в очереди команд. Следовательно, модификации не произойдет. При работе отладчика изменение команды осуществится, т. к. в очереди команд будет находиться каждый раз только одна команда. |