- •Федеральное агентство по образованию Воронежский институт высоких технологий
- •Воронеж «Научная книга»
- •Оглавление
- •1. Информация как предмет защиты
- •1.1. Основные угрозы безопасности информации в ивс
- •1.1.1. Основные понятия
- •1.1.2. Классификация угроз безопасности данных
- •1.1.3 Модель потенциального нарушителя
- •1.1.5. Способы мошенничества в информационных системах
- •1.3.2. Принципы организации собд и требования к собд
- •1.3.3. Основные подсистемы, входящие в состав собд ивс
- •2. Методы и средства защиты данных
- •2.1. Основные методы защиты данных
- •2.2 Классификация средств защиты данных
- •2.2.1. Формальные средства защиты
- •2.2.2. Физические средства защиты
- •2.2.3. Аппаратные средства защиты
- •2.3. Криптографические методы и средства защиты данных
- •2.3.1. Симметричные криптоалгоритмы
- •2.3.1.1. Скремблеры
- •2.3.1.2. Блочные шифры
- •2.3.1.3. Общие сведения о конкурсе aes
- •2.3.2. Асимметричные криптоалгоритмы
- •2.3.2.1. Общие сведения об асимметричных криптоалгоритмах
- •2.3.2.2. Алгоритм rsa
- •2.3.2.3 Технологии цифровых подписей
- •2.3.2.4. Механизм распространения открытых ключей
- •2.3.2.5. Обмен ключами по алгоритму Диффи-Хеллмана
- •2.4. Аутентификация пользователя
- •2.5. Защита исходных текстов и двоичного кода
- •2.5.1. Противодействие изучению исходных текстов
- •2.5.2. Противодействие анализу двоичного кода
- •3. Сетевая безопасность
- •3.1. Основные понятия компьютерной безопасности
- •3.2. Особенности безопасности компьютерных сетей
- •3.3 Удаленные атаки на распределенные вычислительные системы
- •3.4. Характеристика и механизмы реализации типовых удаленных атак
- •3.4.1. Анализ сетевого трафика
- •3.4.2. Подмена доверенного объекта или субъекта распределенной вс
- •3.4.3. Ложный объект распределенной вс
- •3.4.3.1. Внедрение в распределенную вс ложного объекта путем навязывания ложного маршрута
- •3.4.3.2. Внедрение в распределенную вс ложного объекта путем использования недостатков алгоритмов удаленного поиска
- •3.4.3.3. Использование ложного объекта для организации удаленной атаки на распределенную вс
- •3.4.3.4. Отказ в обслуживании
- •3.5. Технологии обнаружения сетевых атак
- •3.5.1. Этапы реализации атак
- •3.5.2 Средства обнаружения компьютерных атак
- •Классификация систем обнаружения атак. Существует большое число различных классификаций систем обнаружения атак, однако самой распространенной является классификация по принципу реализации:
- •3.6. Брандмауэр
- •Сравнительные характеристики пакетных фильтров и серверов прикладного уровня
2.3.1.3. Общие сведения о конкурсе aes
В 1980-х г. в США был принят стандарт симметричного криптоалгоритма для внутреннего применения DES (Data Encryption Standard), который получил достаточно широкое распространение в свое время. Однако на текущий момент этот стандарт полностью неприемлем для использования по двум причинам:
– основной длина его ключа составляет 56 бит, что чрезвычайно мало на современном этапе развития ЭВМ;
– второстепенной при разработке алгоритм был ориентирован на аппаратную реализацию, то есть содержал операции, выполняемые на микропроцессорах за неприемлимо большое время (например, такие как перестановка бит внутри машинного слова по определенной схеме).
Все это сподвигло Американский институт стандартизации NIST (National Institute of Standards & Technology) на объявление в 1997 г. конкурса на новый стандарт симметричного криптоалгоритма. На сей раз уже были учтены основные промахи шифра-предшественника, а к разработке были подключены самые крупные центры по криптологии со всего мира. В результате, победитель этого соревнования, названного AES (Advanced Encryption Standard), станет де-факто мировым криптостандартом на ближайшие 10-20 лет.
Требования, предъявленные к кандидитам на AES в 1998 г., были предельно просты:
– алгоритм должен быть симметричным;
– алгоритм должен быть блочным шифром;
– алгоритм должен иметь длину блока 128 бит и поддерживать три длины ключа : 128, 192 и 256 бит;
Таблица 2.4
Финалисты конкурса AES
Алгоритм |
Создатель |
Страна |
Быстродействие (asm, 200МГц) |
MARS |
IBM |
США |
8 Мбайт/с |
RC6 |
R.Rivest & Co |
США |
12 Мбайт/с |
Rijndael |
V.Rijmen & J.Daemen |
Бельгия |
7 Мбайт/с |
Serpent |
Университеты |
Израиль, Великобритания, Норвегия |
2 Мбайт/с |
TwoFish |
B.Schneier & Co |
США |
11 Мбайт/с |
Дополнительно кандидатам рекомендовалось:
– использовать операции, легко реализуемые как аппаратно (в микрочипах), так и программно (на персональных компьютерах и серверах);
– ориентироваться на 32-разрядные процессоры;
– не усложнять без необходимости структуру шифра для того, чтобы все заинтересованные стороны были в состоянии самостоятельно провести независимый криптоанализ алгоритма и убедиться, что в нем не заложено каких-либо недокументированных возможностей.
На первом этапе в оргкомитет соревнования поступило 15 заявок из совершенно разных уголков мира. В течение 2 лет специалисты комитета, исследуя самостоятельно и изучая публикации других исследователей, выбрали 5 лучших представителей, прошедших в «финал» соревнования (табл. 2.4).
Все эти алгоритмы были признаны достаточно стойкими и успешно противостоящими всем широко известным методам криптоанализа.
2 октября 2000 г. NIST объявил о своем выборе победителем конкурса стал бельгийский алгоритм RIJNDAEL. С этого момента с алгоритма-победителя сняты все патентные ограничения его можно будет использовать в любой криптопрограмме без отчисления каких-либо средств создателю.
2.3.1.4. Симметричные криптосистемы
Функции криптосистем. Все исследования, которые мы проводили ранее, касались только криптоалгоритмов, то есть методов преобразования небольшого блока данных (от 4 до 32 байт) в закодированный вид в зависимости от заданного двоичного ключа. Криптоалгоритмы несомненно являются «сердцем» криптографических систем, но, как мы сейчас увидим, их непосредственное применение без каких-либо модификаций для кодирования больших объемов данных на самом деле не очень приемлимо.
Все недостатки непосредственного применения криптоалгоритмов устраняются в криптосистемах. Криптосистема это завершенная комплексная модель, способная производить двусторонние криптопреобразования над данными произвольного объема и подтверждать время отправки сообщения, обладающая механизмом преобразования паролей и ключей и системой транспортного кодирования. Таким образом, криптосистема выполняет три основные функции:
1. Усиление защищенности данных.
2. Облегчение работы с криптоалгоритмом со стороны человека.
3. Обеспечение совместимости потока данных с другим программным обеспечением.
Конкретная программная реализация криптосистемы называется криптопакетом.
Алгоритмы создания цепочек. Первая задача, с которой мы столкнемся при шифровании данных криптоалгоритмом это данные с длиной, неравной длине 1 блока криптоалгоритма. Эта ситуация будет иметь место практически всегда.
Первый вопрос:
Что можно сделать, если мы хотим зашифровать 24 байта текста, если используется криптоалгоритм с длиной блока 8 байт?
Ответ: Последовательно зашифровать три раза по 8 байт и сложить их в выходной файл так, как они лежали в исходном. Если данных много и некоторые блоки по 8 байт повторяются, это значит, что в выходном файле эти же блоки будут зашифрованы одинаково, а это очень плохо.
Второй вопрос:
А что если данных не 24, а 21 байт.
Не шифровать последние 5 байт или чем-то заполнять еще 3 байта, а потом при дешифровании их выкидывать.
– Первый вариант вообще никуда не годится, а второй применяется, но чем заполнять ?
Для решения этих проблем и были введены в криптосистемы алгоритмы создания цепочек (англ. chaining modes). Самый простой метод мы уже в принципе описали. Это метод ECB (Electronic Code Book). Шифруемый файл временно разделяется на блоки, равные блокам алгоритма, каждый из них шифруется независимо, а затем из зашифрованных пакетов данных компонуется в той же последовательности файл, который отныне надежно защищен криптоалгоритмом. Название алгоритм получил из-за того, что в силу своей простоты он широко применялся в простых портативных устройствах для шифрования электронных шифрокнижках. Схема данного метода приведена на рис. 2.7.
Рис. 2.7. Метод ЕСВ
В том случае, когда длина пересылаемого пакета информации не кратна длине блока криптоалгоритма возможно, расширение последнего (неполного) блока байт до требуемой длины либо с помощью генератора псевдослучайных чисел, что не всегда безопасно в отношении криптостойкости, либо с помощью хеш-суммы передаваемого текста. Второй вариант более предпочтителен, так как хеш-сумма обладает лучшими статистическими показателями, а ее априорная известность стороннему лицу равносильна знанию им всего передаваемого текста.
Указанным выше недостатком этой схемы является то, что при повторе в исходном тексте одинаковых символов в течение более, чем 2N байт (где N размер блока криптоалгоритма), в выходном файле будут присутствовать одинаковые зашифрованные блоки. Поэтому, для более «мощной» защиты больших пакетов информации с помощью блочных шифров применяются несколько обратимых схем «создания цепочек». Все они почти равнозначны по криптостойкости, каждая имеет некоторые преимущества и недостатки, зависящие от вида исходного текста.
Все схемы создания цепочек основаны на идее зависимости результирующего зашифровываемого блока от предыдущих либо от позиции его в исходном файле. Это достигается с помощью блока «памяти» пакета информации длины, равной длине блока алгоритма. Блок памяти (к нему применяют термин IV англ. Initial Vector) вычисляется по определенному принципу из всех прошедших шифрование блоков, а затем накладывается с помощью какой-либо обратимой функции (обычно XOR) на обрабатываемый текст на одной из стадий шифрования. В процессе раскодирования на приемной стороне операция создания IV повторяется на основе принятого и расшифрованного текста, вследствие чего алгоритмы создания цепочек полностью обратимы.
Рис. 2.8. Метод СВС
Рис. 2.9. Метод CFB
Рис. 2.10
Метод OFB Два наиболее распространенных алгоритма создания цепочек CBC и CFB. Их структура приведена на рис. 2.8 и рис. 2.9. Метод CBC получил название от английской аббревиатуры Cipher Block Chaining объединение в цепочку блоков шифра, а метод CFB от Cipher FeedBack обратная связь по шифроблоку.
Таблица 2.5
Метод |
Шифрование блока зависит от |
Искажение одного бита при передаче |
Кодируется ли некратное блоку число байт без дополнения? |
На выход криптосистемы поступает |
ECB |
текущего блока |
портит весь текущий блок |
нет |
выход криптоалгоритма |
CBC |
всех предыдущих блоков |
портит весь текущий и все последующие блоки |
нет |
выход криптоалгоритма |
CFB |
всех предыдущих блоков |
портит один бит текущего блока и все последующие блоки |
да |
XOR маска с исходным текстом |
OFB |
позиции блока в файле |
портит только один бит текущего блока |
да |
XOR маска с исходным текстом |
Еще один метод OFB (англ. Output FeedBack обратная связь по выходу) имеет несколько иную структуру (она изображена на рис. 2.10): в нем значение, накладываемое на шифруемый блок, не зависит от предыдущих блоков, а только от позиции шифруемого блока (в этом смысле он полностью соответствует скремблерам), и из-за этого он не распространяет помехи на последующие блоки. Очевидно, что все алгоритмы создания цепочек однозначно восстановимы. Практические алгоритмы создания и декодирования цепочек будут разработаны на практическом занятии.
Сравним характеристики методов создания цепочек в виде таблицы (табл. 2.5.).
Методы рандомизации сообщений. Следующим усовершенствованием, направленным на повышение стойкости всей системы в целом, является создание ключей сеанса. Эта операция необходима в тех случаях, когда производится частое шифрование сходных блоков данных одним и тем же ключом. Например, это имеет место при передаче информации или команд в автоматизированных системах управления, в банковских операциях и многих других случаях передачи информации, имеющей определенный заранее, известный формат.
В этом случае необходимо введение какой-либо случайной величины в процесс шифрования. Это можно сделать несколькими способами:
– записью в начало файла данных псевдослучайной последовательности байт заранее оговоренной длины с отбрасыванием ее при дешифровании этот метод будет работать только при применении алгоритмов создания цепочек с памятью (CBC,CFB,OFB);
– применением модифицированных алгоритмов создания цепочек, которые при шифровании каждого блока смешивают с ним либо а) фиксированную случайную величину, прикрепленную к началу зашифрованного файла, либо б) значения (значение), вычисляемые с помощью того же шифра и ключа от заранее оговоренной величины;
– созданием специально для каждого файла совершенно случайного ключа, так называемого ключа сеанса, которым и шифруется весь файл (сам же ключ сеанса шифруется первоначальным ключом, называемым в этом случае мастер-ключом и помещается в начале зашифрованного файла).
Все схемы принципиально не имеют очевидных недостатков, но из-за большей проработанности последнего метода обычно применяется именно он.
Генераторы случайных и псевдослучайных последовательностей. Самая большая проблема всех методов рандомизации сообщений это порождение действительно случайной последовательности бит. Дело в том, что генераторы случайных последовательностей, используемые для общих целей, например, в языках программирования, являются на самом деле псевдослучайными генераторами. Дело в том, что в принципе существует конечное, а не бесконечное множество состояний ЭВМ, и, как бы сложно не формировалось в алгоритме число, оно все равно имеет относительно немного бит информационной насыщенности.
Давайте рассмотрим проблему создания случайных и псевдослучайных чисел более детально. Наиболее часто в прикладных задачах результат формируют из счетчика тиков системных часов. В этом случае данные о текущем часе несут примерно 16 бит информации, значение счетчика тиков еще 16 бит. Это дает нам 32 бита информации как вы помните, на сегодняшний день границей стойкой криптографии является значение в 40 бит, при реальных длинах ключей в 128 бит. Естественно, подобного метода крайне недостаточно.
Идем дальше, к 32 битам можно добавить еще 16 бит из сверхбыстрого таймера, работающего на частоте 1,2 МГц в компьютерах архитектуры IBM PC AT и этого еще недостаточно. Кроме того, даже если мы сможем набрать длину ключа в 128 бит (что очень сомнительно), она будет нести псевдослучайный характер, поскольку основана на состоянии только лишь данной ЭВМ на момент начала шифрования. Источниками по-настоящему случайных величин могут быть только внешние объекты, например, человек.
Два наиболее часто применяемых метода создания случайных последовательностей с помощью человека основаны на вводе с клавиатуры. В обоих случаях пользователя просят, не задумываясь, понабирать на клавиатуре бессмысленные сочетания букв.
По первому методу над самими введенными значениями производятся действия, повышающие случайность выходного потока. Так, например, обязательно удаляются верхние 3 бита введенного ASCII символа, часто удаляются еще один верхний и еще один нижний биты. Затем, объем полученной последовательности уменьшается еще в три раза наложением первого и второго бита на третий операцией XOR. Это, в принципе, генерирует достаточно случайную последовательность бит.
По второму методу на введенные символы алгоритм не обращает никакого внимания, зато конспектирует интервалы времени, через которые произошли нажатия. Запись моментов производится по отсчетам быстрого системного таймера (частота 1,2 МГц) или по внутреннему счетчику процессора, появившемуся в процессорах, начиная с Intel Pentium (частота соответствует частоте процессора). Так как верхние и младшие биты имеют определенную корреляцию между символами (первые из-за физических характеристик человека, вторые из-за особенностей операционной системы), то они отбрасываются (обычно удаляются 0-8 старших бита и 4-10 младших).
Как более редко встречающиеся варианты можно встретить: комбинацию обоих клавиатурных методов и метод, основанный на манипуляторе «мышь» он выделяет случайную информацию из смещений пользователем указателя мыши.
В мощных криптосистемах военного применения используются действительно случайные генераторы чисел, основанные на физических процессах. Они представляют собой платы либо внешние устройства, подключаемые к ЭВМ через порт ввода-вывода. Два основных источника белого Гауссовского шума высокоточное измерение тепловых флуктуаций и запись радиоэфира на частоте, свободной от радиовещания.
Архивация. Следующей большой темой является архивация данных. Как Вам известно, подавляющее большинство современных форматов записи данных содержат их в виде, удобном для быстрого манипулирования, для удобного прочтения пользователями. При этом данные занимают объем больший, чем это действительно требуется для их хранения. Алгоритмы, которые устраняют избыточность записи данных, называются алгоритмами сжатия данных, или алгоритмами архивации. В настоящее время существует огромное множество программ для сжатия данных, основанных на нескольких основных способах.
Зачем же нужна архивация в криптографии? Дело в том, что в современном криптоанализе, то есть науке о противостоянии криптографии, с очевидностью доказано, что вероятность взлома криптосхемы при наличии корреляции между блоками входной информации значительно выше, чем при отсутствии таковой. А алгоритмы сжатия данных по определению и имеют своей основной задачей устранение избыточности, то есть корреляций между данными во входном тексте.
Все алгоритмы сжатия данных качественно делятся на:
– алгоритмы сжатия без потерь, при использовании которых данные на приемной восстанавливаются без малейших изменений;
– алгоритмы сжатия с потерями, которые удаляют из потока данных информацию, незначительно влияющую на суть данных, либо вообще невоспринимаемую человеком (такие алгоритмы сейчас разработаны только для аудио- и видео- изображений). В криптосистемах, естественно, используется только первая группа алгоритмов.
Существует два основных метода архивации без потерь:
алгоритм Хаффмана (англ. Huffman), ориентированный на сжатие последовательностей байт, не связанных между собой;
алгоритм Лемпеля-Зива (англ. Lempel, Ziv), ориентированный на сжатие любых видов текстов, то есть использующий факт неоднократного повторения «слов» последовательностей байт.
Практически все популярные программы архивации без потерь (ARJ, RAR, ZIP и т. п.) используют объединение этих двух методов алгоритм LZH.
Хеширование паролей. От методов, повышающих криптостойкость системы в целом, перейдем к блоку хеширования паролей методу, позволяющему пользователям запоминать не 128 байт, то есть 256 шестнадцатиричных цифр ключа, а некоторое осмысленное выражение, слово или последовательность символов, называющуюся паролем. Действительно, при разработке любого криптоалгоритма следует учитывать, что в половине случаев конечным пользователем системы является человек, а не автоматическая система. Это ставит вопрос о том, удобно, и вообще реально ли человеку запомнить 128-битный ключ (32 шестнадцатиричные цифры). На самом деле предел запоминаемости лежит на границе 8-12 подобных символов, а, следовательно, если мы будем заставлять пользователя оперировать именно ключом, тем самым мы практически вынудим его к записи ключа на каком-либо листке бумаги или электронном носителе, например, в текстовом файле. Это, естественно, резко снижает защищенность системы.
Для решения этой проблемы были разработаны методы, преобразующие произносимую, осмысленную строку произвольной длины пароль в указанный ключ заранее заданной длины. В подавляющем большинстве случаев для этой операции используются так называемые хеш-функции (от англ. hashing мелкая нарезка и перемешивание). Хеш-функцией называется такое математическое или алгоритмическое преобразование заданного блока данных, которое обладает следующими свойствами:
– хеш-функция имеет бесконечную область определения;
– хеш-функция имеет конечную область значений;
– она необратима;
– изменение входного потока информации на один бит меняет около половины всех бит выходного потока, то есть результата хеш-функции.
Эти свойства позволяют подавать на вход хеш-функции пароли, то есть текстовые строки произвольной длины на любом национальном языке и, ограничив область значений функции диапазоном 0..2N-1, где N длина ключа в битах, получать на выходе достаточно равномерно распределенные по области значения блоки информации ключи.
Нетрудно заметить, что требования, подобные 3 и 4 пунктам требований к хеш-функции, выполняют блочные шифры. Это указывает на один из возможных путей реализации стойких хеш-функций проведение блочных криптопреобразований над материалом строки-пароля. Этот метод и используется в различных вариациях практически во всех современных криптосистемах. Материал строки-пароля многократно последовательно используется в качестве ключа для шифрования некоторого заранее известного блока данных на выходе получается зашифрованный блок информации, однозначно зависящий только от пароля и при этом имеющий достаточно хорошие статистические характеристики. Такой блок или несколько таких блоков и используются в качестве ключа для дальнейших криптопреобразований.
Транспортное кодирование. Поскольку системы шифрования данных часто используются для кодирования текстовой информации : переписки, счетов, платежей электронной коммерции, и при этом криптосистема должна быть абсолютно прозрачной для пользователя, то над выходным потоком криптосистемы часто производится транспортное кодирование, то есть дополнительное кодирование (не шифрование !) информации исключительно для обеспечения совместимости с протоколами передачи данных.
Все дело в том, что на выходе криптосистемы байт может принимать все 256 возможных значений, независимо от того, был ли входной поток текстовой информацией или нет. А при передаче почтовых сообщений многие системы ориентированы на то, что допустимые значения байтов текста лежат в более узком диапазоне: все цифры, знаки препинания, алфавит латиницы плюс, возможно, национального языка. Первые 32 символа набора ASCII служат для специальных целей. Для того, чтобы они и некоторые другие служебные символы никогда не появились, в выходном потоке используется транспортное кодирование.
Наиболее простой метод состоит в записи каждого байта двумя шестнадцатиричными цифрами-символами. Так, байт 252 будет записан двумя символами 'FC'; байт с кодом 26, попадающий на специальный символ CTRL-Z, будет записан двумя допустимыми символами '1A'. Но эта схема очень избыточна : в одном байте передается только 4 бита информации.
На самом деле, практически в любой системе коммуникации без проблем можно передавать около 68 символов (латинский алфавит строчный и прописной, цифры и знаки препинания). Из этого следует, что вполне реально создать систему с передачей 6 бит в одном байте (26<68), то есть кодировать 3 байта произвольного содержания 4-мя байтами из исключительно разрешенных (так называемых печатных) символов. Подобная система была разработана и стандартизирована на уровне протоколов сети Интернет это система Base 64 (стандарт RFC1251).
Процесс кодирования преобразует 4 входных символа в виде 24-битной группы, обрабатывая их слева направо. Эти группы затем рассматриваются как 4 соединенные 6-битные группы, каждая из которых транслируется в одиночную цифру алфавита Base 64. При кодировании Base 64 входной поток байтов должен быть упорядочен старшими битами вперед.
Каждая 6-битная группа используется как индекс для массива 64-х печатных символов. Символ, на который указывает значение индекса, помещается в выходную строку. Эти символы выбраны так, чтобы быть универсально представимыми и исключают символы, имеющие специальное значение (".", CR, LF).
Выходной поток (закодированные байты) должен иметь длину строк не более 76 символов. Все признаки перевода строки и другие символы, отсутствующие в таблице подстановок, должны быть проигнорированы декодером Base 64. Среди данных в Base 64 символы, не перечисленные в таблице подстановок, переводы строки и т. п. должны говорить об ошибке передачи данных, и, соответственно, программа-декодер должна оповестить пользователя о ней.
Если в хвосте потока кодируемых данных осталось меньше, чем 24 бита, справа добавляются нулевые биты до образования целого числа 6-битных групп. А до конца 24-битной группы может оставаться только от 0 до 3-х недостающих 6-битных групп, вместо каждой из которых ставится символ-заполнитель «=». Поскольку весь входной поток представляет собой целое число 8-битных групп (т. е., просто байтных значений), то возможны лишь следующие случаи:
1. Входной поток оканчивается ровно 24-битной группой (длина файла кратна 3). В таком случае выходной поток будет оканчиваться четырьмя символами Base 64 без каких либо дополнительных символов.
2. «Хвост» входного потока имеет длину 8 бит. Тогда в конце выходного кода будут два символа Base 64, с добавлением двух символов «=».
3. «Хвост» входного потока имеет длину 16 бит. В этом случае в конце выходного будут стоять три символа Base 64 и один символ «=».
Так как символ «=» является хвостовым заполнителем, его появление в теле письма может означать только то, что конец данных достигнут. Но опираться на поиск символа «=» для обнаружения конца файла неверно, так как, если число переданных битов кратно 24, то в выходном файле не появится ни одного символа «=».
