Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основы защиты информации. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
1 Мб
Скачать

Существует три способа реализации криптографически безопасных генераторов.

1. На основе криптоалгоритмов

а) Безопасный блочный шифр можно преобразовать в криптографически безопасный генератор, запустив его в режиме счетчика. Тогда, выбрав случайный ключ, можно получать следующий случайный блок, применяя алгоритм к последовательным натуральным числам. Счет можно начинать с произвольного натурального числа. Очевидно, что

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

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

2. На основе вычислительно сложных математических задач

а) Алгоритм BBS (Блюма–Блюма–Шуба) имеет высокую криптостойкость, основанную на предполагаемой сложности факторизации целых чисел. Однако этот алгоритм отличается очень медленной работой.

б) Алгоритм Блюма–Микали основан на задаче дискретного логарифма.

3. Специальные реализации

В таких алгоритмах часто используются дополнительные источники энтропии. Это позволяет дополнительно защититься от атак, направленных на определение исходного состояния. Примерами таких алгоритмов являются алгоритмы Yarrow, Fortuna, специальный файл ОС UNIX /dev/random, функция CryptGenRandom(), предостав-

ленная в CryptoAPI компании Microsoft.

1.7. РАЗРАБОТКА СОБСТВЕННЫХ КРИПТОГРАФИЧЕСКИХ АЛГОРИТМОВ

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

11

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

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

1.8.НАДЕЖНОСТЬ ЗАЩИТЫ ПРИ ПРИМЕНЕНИИ КРИПТОАЛГОРИТМОВ И ПРОТОКОЛОВ

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

Слабости в алгоритмах

Через некоторое время после опубликования и начала практического применения некоторого криптоалгоритма в нем могут обнаружиться уязвимости. Например, в течение примерно двух лет после опубликования спецификации MD4 были представлены как минимум три серьезные независимые работы, посвященные криптоанализу хэшфункции MD4. В одной из этих работ описывался взлом последних двух из трех раундов алгоритма обработки данных, а в остальных работах – взлом первых двух раундов. И хотя алгоритм в целом устойчив ко всем этим методам взлома, MD4 не рекомендуется использовать в реальных приложениях.

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

12

так как при отказе от скомпрометированного алгоритма станет невозможно расшифровать старые архивы.

Ошибки при кодировании алгоритмов

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

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

A = A xor B;

B = B xor A;

A = A xor B.

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

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

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

шифрования только на коротких образцах.

13

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

Многократное использование ключа потокового шифра

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

В качестве примера можно привести одну систему защиты программного обеспечения от компьютерного пиратства (РАСЕ InterLok), которая хранила защищаемую программу на диске в зашифрованном виде и расшифровывала прямо в памяти в момент выполнения. Она использовала специальный драйвер, который устанавливался вместе с программой и не позволял запускать отладчики во время выполнения программы, но при сохранении секретных данных на диск многократно брала одну и ту же последовательность в качестве ключа шифрования, что позволяло достаточно легко получить доступ к секретным данным.

Ошибки в генераторах псевдослучайных чисел

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

Пожалуй, самый известный пример – ошибка в реализации протокола SSL в браузере Netscape. Компания Netscape разработала протокол SSL и реализовала его в своем браузере. Данные, передаваемые посредством SSL, шифровались алгоритмом RC4 со 128-битным ключом. Через некоторое время обнаружился недостаток процедуры выбора ключа, который заключался в том, что начальное состояние генератора псевдослучайных чисел основывалось на трех значениях:

идентификаторе процесса, генерирующего ключ;

14

идентификаторе его родительского процесса;

текущем времени.

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

Применение блочного шифра в режиме простой замены

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

Использование обратимых хэш-функций

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

Например, в программе Hardwood Solitaire (карточные пасьянсы) для защиты основного файла данных от внесения изменений используется цифровая подпись на основе RSA по описанной схеме. Однако для вычисления хэша по непонятным причинам была выбрана функция Adler32, предназначенная для вычисления 32-битной контрольной суммы.

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

15

Неточное следование протоколам

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

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

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

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

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

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

Врезультате удалось создать генераторы регистрационных кодов к нескольким версиям программы, которая была защищена с использованием цифровой подписи Эль-Гамаля с ключом длиной 960 бит, реализованной через библиотеку FGInt.

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

16

1.9. СТЕГАНОГРАФИЧЕСКАЯ ЗАЩИТА ИНФОРМАЦИИ

1.9.1. ОСНОВНЫЕ ПОНЯТИЯ

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

Стеганографическим контейнером может служить все что угодно: газетная заметка, точка в конце предложения, картинка и даже лист белой бумаги. Главное – чтобы существовал способ незаметно разместить в этом контейнере некоторый объем информации.

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

Все алгоритмы встраивания скрытой информации можно разделить на несколько подгрупп:

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

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

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

1.9.2. ЗАЩИТА ПРОГРАММ В ИСХОДНЫХ ТЕКСТАХ

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

17

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

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

Для размещения идентификатора без изменения функциональности программы могут применяться различные приемы:

1)изменение регистра букв (для языков, не различающих прописные и строчные буквы, например Delphi);

2)изменение локальных идентификаторов;

3)изменение порядка следования функций;

4)взаимная замена пробелов и символов табуляции;

5)изменение стиля отступов для блоков кода (begin и end, { и });

6)изменение стиля расстановки пробелов до и после скобок;

7)вставка пробелов в конце строк;

8)вставка пустых строк;

9)изменение порядка операторов case внутри switch.

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

18

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

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

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

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

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

КОНТРОЛЬНЫЕ ВОПРОСЫ

1.Дайте определения основным терминам классической криптографии.

2.Какие симметричные методы криптографии вы знаете? Приведите примеры алгоритмов.

3.Какие асимметричные методы криптографии вы знаете? Приведите примеры алгоритмов.

4.Приведите достоинства и недостатки симметричных методов криптографии.

19

5.Приведите достоинства и недостатки асимметричных методов криптографии.

6.Что такое хэш-функции и для чего они используются?

7.Что такое электронная цифровая подпись и как она применяется

вкриптографии?

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

9.Проблемы, которые могут возникать при применении криптоалгоритмов и протоколов.

10.Что такое стеганографическая защита информации? Дайте определения основным понятиям стеганографии.

11.Как осуществляется зашита от несанкционированного тиражирования программ в исходных кодах?

20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]