12.1 Криптографические методы защиты информации
12.2 Требования к криптосистемам
12.3 Основные алгоритмы шифрования
12.5 Криптографические хеш-функции
12.6 Криптографические генераторы случайных чисел
12.7 Обеспечиваемая шифром степень защиты
Проблема защиты информации путем ее преобразования, исключающего ее прочтение посторонним лицом, волновала человеческий ум с давних времен. История криптографии - ровесница истории человеческого языка. Более того, первоначально письменность сама по себе была криптографической системой, так как в древних обществах ею владели только избранные. Священные книги Древнего Египта, Древней Индии тому примеры.
Разные люди понимают под шифрованием разные вещи. Дети играют в игрушечные шифры и секретные языки. Это, однако, не имеет ничего общего с настоящей криптографией. Настоящая криптография (strong cryptography) должна обеспечивать такой уровень секретности, чтобы можно было надежно защитить критическую информацию от расшифровки крупными организациями - такими, как мафия, транснациональные корпорации и крупные государства. Настоящая криптография в прошлом использовалась лишь в военных целях. Однако сейчас, со становлением информационного общества, она становится центральным инструментом для обеспечения конфиденциальности.
По мере образования информационного общества крупным государствам становятся доступны технологические средства тотального надзора за миллионами людей. Поэтому криптография становится одним из основных инструментов, обеспечивающих конфиденциальность, доверие, авторизацию, электронные платежи, корпоративную безопасность и бесчисленное множество других важных вещей.
Криптография не является более придумкой военных, с которой не стоит связываться. Настала пора снять с криптографии покровы таинственности и использовать все ее возможности на пользу современному обществу. Широкое распространение криптографии является одним из немногих способов защитить человека от ситуации, когда он вдруг обнаруживает, что живет в тоталитарном государстве, которое может контролировать каждый его шаг.
Бурное развитие криптографические системы получили в годы первой и второй мировых войн. Начиная с послевоенного времени и по нынешний день появление вычислительных средств ускорило разработку и совершенствование криптографических методов.
Почему проблема использования криптографических методов в ИС стала в настоящий момент особо актуальна?
С одной стороны, расширилось использование компьютерных сетей, в частности глобальной сети Интернет, по которым передаются большие объемы информации государственного, военного, коммерческого и частного характера, не допускающего возможность доступа к ней посторонних лиц.
С другой стороны, появление новых мощных компьютеров, технологий сетевых и нейронных вычислений сделало возможным дискредитацию криптографических систем, еще недавно считавшихся практически нераскрываемыми.
Проблемой защиты информации путем ее преобразования занимается криптология (kryptos - тайный, logos - наука). Криптология разделяется на два направления - криптографию и криптоанализ. Цели этих направлений прямо противоположны.
Криптография занимается поиском и исследованием математических методов преобразования информации.
Сфера интересов криптоанализа - исследование возможности расшифровывания информации без знания ключей.
Современная криптография включает в себя 4 крупных раздела.
1. Симметричные криптосистемы.
2. Криптосистемы с открытым ключом.
3. Системы электронной подписи.
4. Управление ключами.
Основные направления использования криптографических методов -передача конфиденциальной информации по каналам связи (например, электронная почта), установление подлинности передаваемых сообщений, хранение информации (документов, баз данных) на носителях в зашифрованном виде.
Терминология. Итак, криптография дает возможность преобразовать информацию таким образом, что ее прочтение (восстановление) возможно только при знании ключа.
В качестве информации, подлежащей шифрованию и дешифрованию, будут рассматриваться тексты, построенные на некотором алфавите. Под этими терминами понимается следующее.
Основная задача
Отправитель и получатель
Допустим, отправителю необходимо послать сообщение получателю. Более того, этот отправитель желает сохранить сообщение в тайне, т.е. сделать так, чтобы человек, перехвативший сообщение, не смог его прочесть.
Сообщения и шифрование
Исходное сообщение называется открытым текстом. Процесс маскировки сообщения способом, позволяющим скрыть его суть, называется зашифрованием. Зашифрованное сообщение называется шифртекстом. Процедура обратного превращения шифртекста в открытый текст называется расшифрованием. Эта последовательность показана на Рис.14.1.
Как правило, современные криптологи хорошо знают математику - им просто не обойтись без нее.

Рисунок 12.1. Зашифрование и расшифрование
Обозначим открытый текст сообщения буквой М(от английского «message» -сообщение), а просто открытый текст - буквой Р (от «plaintext» - открытый текст). Это может быть последовательность (поток) битов, текстовый файл, точечный рисунок, оцифрованный звук, цифровое видеоизображение и т.д. Для компьютеров Л - это просто двоичные данные. (Во всех следующих главах этой книги рассматриваются только двоичные данные и компьютерная криптография.) Открытый текст предназначен для хранения или передачи. В любом случае, М - это сообщение, которое необходимо зашифровать.
Обозначим шифртекст буквой С (от английского «ciphertext»). Это тоже двоичные данные, иногда того же размера, что и Л, а иногда большего. (Если шифрование сочетается со сжатием, размер С может быть меньше, чем М. Однако собственно шифрование не обеспечивает сжатие информации.) Функция зашифрования Е, оперируя с М, создает С. Или в математической форме:
Е{М) = С
В обратном процессе функция расшифрования D , оперируя с С, восстанавливает М:
D(C)=M
Поскольку смысл зашифрования и последующего расшифрования сообщения заключается в восстановлении исходного открытого текста, справедливо следующее равенство:
D(E(M)) = M
Проверка подлинности, целостность и неотрицание авторства
Помимо обеспечения конфиденциальности, криптография часто используется для решения иных задач:
Проверка подлинности (аутентификация). Получатель сообщения должен иметь возможность установить его источник, а злоумышленник - не способен замаскироваться под кого-либо другого.
Целостность. Получатель сообщения может проверить, не было ли сообщение изменено в процессе доставки, а злоумышленник - не способен выдать ложное сообщение за подлинное.
Неотрицание авторства. Отправитель сообщения впоследствии не должен иметь возможности ложно отрицать отсылку сообщения.
Точно так же, как при личном общении, при общении с помощью компьютеров тоже существуют жизненно важные требования к процессу обмена информацией. Например, критически важно, что данное лицо является именно тем, за кого себя выдает, что какие-то документы, скажем, водительское удостоверение, медицинская степень или паспорт -подлинные, что документ, предположительно полученный от кого-то, доставлен именно от этого лица и так далее. Именно это обеспечивает решение задач проверки подлинности, целостности и неотрицания авторства.
Алфавит - конечное множество используемых для кодирования информации знаков.
Текст - упорядоченный набор из элементов алфавита.
В качестве примеров алфавитов, используемых в современных ИС, можно привести следующие:
Шифрование - преобразовательный процесс: исходный текст, который носит также название открытого текста, заменяется шифрованным текстом.
Дешифрование - обратный шифрованию процесс. На основе ключа шифрованный текст преобразуется в исходный.
Ключ - информация, необходимая для беспрепятственного шифрования и дешифрования текстов.
Криптосистемы разделяются на симметричные и с открытым ключом.
В симметричных криптосистемах и для шифрования, и для дешифрования используется один и тот же ключ.
В системах с открытым ключом используются два ключа - открытый и закрытый, которые математически связаны друг с другом. Информация шифруется с помощью открытого ключа, который доступен всем желающим, а расшифровывается с помощью закрытого ключа, известного только получателю сообщения [29].
Термины распределение ключей и управление ключами относятся к процессам системы обработки информации, содержанием которых является составление и распределение ключей между пользователями.
Электронной (цифровой) подписью называется присоединяемое к тексту его криптографическое преобразование, которое позволяет при получении текста другим пользователем проверить авторство и подлинность сообщения.
Криптостойкостью называется характеристика шифра, определяющая его стойкость к дешифрованию без знания ключа (т. е. криптоанализу).
Имеется несколько показателей криптостойкости, среди которых:
Преобразование Тk определяется соответствующим алгоритмом и значением параметра k. ЭФФЕКТИВНОСТЬ шифрования с целью защиты информации зависит от сохранения тайны ключа и криптостойкости шифра.
Процесс криптографического закрытия данных может осуществляться как программно, так и аппаратно. Аппаратная реализация отличается существенно большей стоимостью, однако ей присущи и преимущества: высокая производительность, простота, защищенность и т. д. Программная реализация более практична, допускает известную гибкость в использовании.
Для современных криптографических систем защиты информации сформулированы следующие общепринятые требования:
Алгоритмы и ключи
Криптографический алгоритм, называемый также шифром, представляет собой математическую функцию, которая используется для зашифрования и расшифрования информации. Обычно это две связанные функции: одна для зашифрования, а другая для расшифрования.
Если защита, обеспечиваемая алгоритмом, основана на сохранении в тайне самого алгоритма, это ограниченный алгоритм. Ограниченные алгоритмы представляют некоторый исторический интерес, но совершенно не соответствуют современным стандартам. Группа пользователей, более-менее значительной численности, не может использовать такие алгоритмы, так как всякий раз, когда пользователь покидает группу, оставшиеся члены должны переходить на другой алгоритм. Алгоритм должен быть заменен и в случае, если кто-нибудь посторонний случайно узнает секрет.
Что еще хуже, ограниченные алгоритмы не допускают эффективного контроля или стандартизации. Каждая группа пользователей должна использовать собственный уникальный алгоритм. Такие группы не могут использовать открытые аппаратные или программные продукты - злоумышленник может приобрести такой же продукт и раскрыть алгоритм. Этим группам приходится разрабатывать и реализовывать собственные алгоритмы. Если же в группе нет опытного криптографа, ее члены не сумеют оценить надежность используемого алгоритма.
Несмотря на указанные фундаментальные недостатки, ограниченные алгоритмы необычайно популярны в приложениях с низким уровнем защиты. Пользователи либо не осознают проблем, связанных с безопасностью своих систем, либо не заботятся о них вовсе.
Современная криптография решает эти проблемы с помощью ключа, обозначаемого буквой К. Такой ключ может быть любым значением, выбранным из большого множества. Множество возможных ключей называют пространством ключей. Ключ используется в обеих операциях - как зашифрования, так и расшифрования (т.е. они зависят от ключа, и это обстоятельство указывается индексом К). Таким образом, теперь функции зашифрования и расшифрования принимают следующий вид:
ЕК(М)=С
DK(С)=M
При этом справедливо следующее равенство (см. Рис. 12.2):
DK(EK(M)) = M
В некоторых алгоритмах для зашифрования и расшифрования используют различные ключи (см. Рис. 12.3). Иными словами, ключ зашифрования (Kt) отличается от соответствующего ключа расшифрования (А2). В этом случае:
EKl(M) = C
DKl{C) = M
DK2(EKAM)) = M
Надежность этих алгоритмов полностью зависит от ключа (или ключей), а не от самих алгоритмов. Это означает, что алгоритм может быть опубликован и проанализирован. Программные продукты, использующие этот алгоритм, могут широко распространяться. Причем знание вашего алгоритма злоумышленником не имеет значения - если он не знает конкретный ключ, он не сумеет прочесть ваши сообщения.

Рис. 12.2 Зашифрование и расшифрование с помощью ключа

Рис. 12.3 Зашифрование и расшифрование с помощью двух различных ключей
Таким образом, криптосистема представляет собой алгоритм плюс все возможные открытые тексты, шифртексты и ключи.
Симметричные алгоритмы
Известны два основных типа алгоритмов, основанных на использовании ключей: симметричные алгоритмы и алгоритмы с открытым ключом.
Симметричные алгоритмы, иногда называемые условными алгоритмами, это те, в которых ключ зашифрования может быть вычислен из ключа расшифрования, и наоборот. В большинстве симметричных алгоритмов ключи зашифрования и расшифрования одинаковы. Эти алгоритмы, называемые также алгоритмами с секретным ключом или алгоритмами с единым ключом, требуют, чтобы отправитель и получатель перед началом передачи секретных сообщений согласовали используемый ключ. Защита, обеспечиваемая симметричными алгоритмами, определяется ключом; раскрытие ключа означает, что шифровать и расшифровать сообщения сможет кто угодно. До тех пор, пока передаваемая информация должна оставаться тайной, ключ должен храниться в секрете.
Зашифрование и расшифрование с помощью симметричного алгоритма записывается следующим образом:
ЕК(М)=С
DK(C) = M
Симметричные алгоритмы подразделяются на две категории. Одни алгоритмы обрабатывают открытый текст побитово (иногда побайтово). Такие алгоритмы называют потоковыми алгоритмами или потоковыми шифрами. Другие алгоритмы обрабатывают группы битов открытого текста. Эти группы битов называют блоками, а алгоритмы - блочными алгоритмами или блочными шифрами. В современных компьютерных алгоритмах типичный размер блока составляет 64 бита. Это достаточно большое значение, чтобы затруднить анализ, и в то же время достаточно малое - чтобы быть удобным для работы. (До появления компьютеров алгоритмы обычно обрабатывали открытый текст посимвольно. Такие алгоритмы можно представлять как потоковые алгоритмы, обрабатывающие потоки символов.)
Алгоритмы с открытым ключом
Алгоритмы с открытым ключом (называемые также асимметричными алгоритмами) устроены таким образом, что ключ, используемый для зашифрования, отличается от ключа расшифрования. Более того, ключ расшифрования не может быть (по крайней мере, в течение разумного периода) вычислен из ключа зашифрования. Такие алгоритмы называют алгоритмами с открытым ключом, поскольку ключ зашифрования может быть открытым: кто угодно может воспользоваться этим ключом для зашифрования сообщения, однако расшифровать сообщение может только конкретный человек, знающий ключ расшифрования. В таких системах ключ зашифрования часто называют открытым ключом, а ключ расшифрования - закрытым ключом. Закрытый ключ нередко называют секретным ключом, однако во избежание путаницы с симметричными алгоритмами, здесь этот термин не используется. Зашифрование с открытым ключом К обозначается следующим образом:
Хотя открытый и закрытый ключи различны, расшифрование с соответствующим закрытым ключом обозначается как:
DK(С) = M
В некоторых случаях сообщения следует зашифровывать закрытым ключом, а расшифровывать - открытым ключом. Такой метод используют в цифровых подписях. Несмотря на возможную путаницу, эти операции, соответственно, обозначаются следующим образом:
Ек (М) = С
Криптоанализ
Все предназначение криптографии заключается в сохранении открытого текста (или ключа, или и того, и другого) в тайне от злоумышленников (называемых также соперниками, противниками, перехватчиками, взломщиками, оппонентами или просто врагами). Предполагается, что злоумышленники располагают неограниченным доступом к линиям связи между отправителем и получателем.
Криптоанализом называют науку восстановления (дешифрования) открытого текста без доступа к ключу. Успешный криптоанализ позволяет восстановить открытый текст или
ключ. Кроме того, криптоанализ позволяет обнаружить слабые места в криптосистемах, что, в конце концов, приведет к таким же результатам. (Раскрытие ключа без привлечения методов криптологии называют компрометацией.)
Попытка криптоанализа называется атакой. В реальных условиях криптоаналитики не всегда обладают подробной информацией, такое предположение вполне допустимо. Если противник не может взломать алгоритм, даже зная, как он работает, тем более ему не удастся это сделать, если он этого не знает.
Некоторые из асимметричных алгоритмов могут использоваться для генерирования цифровой подписи. Цифровой подписью называют блок данных, сгенерированный с использованием некоторого секретного ключа. При этом с помощью открытого ключа можно проверить, что данные были действительно сгенерированы с помощью этого секретного ключа. Алгоритм генерации цифровой подписи должен обеспечивать, невозможность без секретного ключа создать подпись, которая при проверке окажется правильной.
Цифровые подписи используются для того, чтобы подтвердить, что сообщение пришло действительно от данного отправителя (в предположении, что лишь отправитель обладает секретным ключом, соответствующим его открытому ключу). Также подписи используются для про-ставления штампа времени (timestamp) на документах: сторона, которой мы доверяем, подписывает документ со штампом времени с помощью своего секретного ключа и, таким образом, подтверждает, что документ уже существовал в момент, объявленный в штампе времени.
Цифровые подписи также можно использовать для удостоверения (сертификации - to certify) того, что документ принадлежит определенному лицу. Это делается так: открытый ключ и информация о том, кому он принадлежит, подписываются стороной, которой доверяем. При этом доверять подписывающей стороне мы можем на основании того, что ее ключ был подписан третьей стороной. Таким образом возникает иерархия доверия. Очевидно, что некоторый ключ должен быть корнем иерархии (т. е. ему мы доверяем не потому, что он кем-то подписан, а потому, что мы верим априори, что ему можно доверять). В централизованной инфраструктуре ключей имеется очень небольшое количество корневых ключей сети (например, облеченные полномочиями государственные агентства; их также называют сертификационными агентствами -certification authorities). В распределенной инфраструктуре нет необходимости иметь универсальные для всех корневые ключи, и каждая из сторон может доверять своему набору корневых ключей (скажем, своему собственному ключу и ключам, им подписанным). Эта концепция носит название сети доверия (web of trust) и реализована, например, в PGP.
Цифровая подпись документа обычно создается так: из документа генерируется так называемый дайджест (message digest) и к нему добавляется информация о том, кто подписывает документ, штамп времени и пр. Получившаяся строка далее зашифровывается секретным ключом подписывающего с использованием того или иного алгоритма. Получившийся зашифрованный набор битов и представляет собой подпись. К подписи обычно прикладывается открытый ключ подписывающего. Получатель сначала решает для себя, доверяет ли он тому, что открытый ключ принадлежит именно тому, кому должен принадлежать (с помощью сети доверия или априорного знания), и затем дешифрует подпись с помощью открытого ключа. Если подпись нормально дешифровалась и ее содержимое соответствует документу (дайджест и др.), то сообщение считается подтвержденным.

Рисунок 12.4 – Схема формирования цифровой подписи

Рисунок 12.5 – Схема проверки цифровой подписи
Свободно доступны несколько методов создания и проверки цифровых подписей. Наиболее известным является алгоритм RSA, ГОСТ 34.10-94.
Криптографические хеш-функции используются обычно для генерации дайджеста сообщения при создании цифровой подписи. Хеш-функции преобразовывают сообщение в имеющее фиксированный размер хеш-значение (hash value) таким образом, что все множество возможных сообщений распределяется равномерно по множеству хеш-значений. При этом криптографическая хеш-функция делает это так, что практически невозможно подобрать документ к заданному хеш-значению.
Криптографические хеш-функции обычно производят значения длиной в 128 и более бит. Это число значительно больше, чем количество сообщений, которые когда-либо будут существовать в мире.
Много хороших криптографических хеш-функций доступно бесплатно. Широко известные включают MD5 и SHA.
Криптографические генераторы случайных чисел производят случайные числа, которые используются в криптографических приложениях, например для генерации ключей. Обычные генераторы случайных чисел, имеющиеся во многих языках программирования и программных средах, не подходят для нужд криптографии (они создавались с целью получить статистически случайное распределение, криптоаналитики могут предсказать поведение таких случайных генераторов).
В идеале случайные числа должны основываться на настоящем физическом источнике случайной информации, которую невозможно предсказать. Примеры таких источников включают шумящие полупроводниковые приборы, младшие биты оцифрованного звука, интервалы между прерываниями устройств или нажатиями клавиш. Полученный от физического источника шум затем «дистиллируется» криптографической хеш-функцией так, чтобы каждый бит зависел от каждого бита. Достаточно часто для хранения случайной информации используется довольно большой пул (несколько тысяч бит) и каждый бит пула делается зависимым от каждого бита шумовой информации и каждого другого бита пула криптографически надежным (strong) способом.
Когда нет настоящего физического источника шума, приходится пользоваться псевдослучайными числами. Такая ситуация нежелательна, но часто возникает на компьютерах общего назначения. Всегда нужно получить некий шум окружения, скажем от величины задержек в устройствах, цифры статистики использования ресурсов, сетевой статистики, прерываний от клавиатуры или чего-то иного. Задачей является получить данные, непредсказуемые для внешнего наблюдателя. Для достижения этого случайный пул должен содержать как минимум 128 бит настоящей энтропии.
Криптографические генераторы псевдослучайных чисел обычно используют большой пул (seed-значение), содержащий случайную информацию. Биты генерируется путем выборки из пула с возможным прогоном через криптографическую хеш-функцию, чтобы спрятать содержимое пула от внешнего наблюдателя. Когда требуется новая порция битов, пул перемешивается путем шифровки со случайным ключом (его можно взять из неиспользованной пока части пула) так, чтобы каждый бит пула зависел от каждого другого бита. Новый шум окружения должен добавляться к пулу перед перемешиваниям, дабы сделать предсказание новых значений пула еще более сложным.
Несмотря на то, что при аккуратном проектировании криптографически надежный генератор случайных чисел реализовать не так уж и трудно, этот вопрос часто упускают из виду. Таким образом, следует подчеркнуть важность криптографического генератора случайных чисел - если он сделан плохо, он может легко стать самым уязвимым элементом системы.
Хорошие криптографические системы создаются таким образом, чтобы сделать их вскрытие как можно более трудным делом. Можно построить системы, которые на практике невозможно вскрыть (хотя доказать сей факт обычно нельзя). При этом не требуется очень больших усилий для реализации. Единственное, что требуется, - это аккуратность и базовые знания. Нет прощения разработчику, если он оставил возможность для вскрытия системы. Все механизмы, которые могут использоваться для взлома системы, надо задокументировать и довести до сведения конечных пользователей.
Теоретически любой шифровальный алгоритм с использованием ключа может быть вскрыт методом перебора всех значений ключа. Если ключ подбирается методом грубой силы (brute force), требуемая мощность компьютера растет экспоненциально с увеличением длины ключа.
Ключ длиной 32 бита требует 232 (около 109) шагов. Такая задача под силу любому дилетанту и решается на домашнем компьютере. Системы с 40-битовым ключом (например, экспортный американский вариант алгоритма RC4) требуют 240 шагов - такие компьютерные мощности имеются в большинстве университетов и даже в небольших компаниях. Системы с 56-битовыми ключами (DES) требуют для вскрытия заметных усилий, однако могут быть легко вскрыты с помощью специальной аппаратуры. Стоимость такой аппаратуры значительна, но доступна для мафии, крупных компаний и правительств. Ключи длиной 64 бита в настоящий момент, возможно, могут быть вскрыты крупными государствами и уже в ближайшие несколько лет будут доступны для вскрытия преступными организациями, крупными компаниями и небольшими государствами. Ключи длиной 80 бит могут в будущем стать уязвимыми. Ключи длиной 128 бит, вероятно, останутся недоступными для вскрытия, методом грубой силы в обозримом будущем. Можно использовать и более длинные ключи. В пределе нетрудно добиться того, чтобы энергия, требуемая для вскрытия (считая, что на один шаг затрачивается минимальный квантовомеханический квант энергии), превзойдет массу Солнца или Вселенной.
Однако длина ключа это еще не все. Многие шифры можно вскрыть и не перебирая всех возможных комбинаций. Вообще говоря, очень трудно придумать шифр, который нельзя было бы вскрыть другим более эффективным способом. Разработка собственных шифров может стать приятным занятием, но для реальных приложений использовать самодельные шифры не рекомендуется, если вы не являетесь экспертом и не уверены на 100 % в том, что делаете.
Вообще говоря, следует держаться в стороне от неопубликованных или секретных алгоритмов. Часто разработчик такого алгоритма не уверен в его надежности или же надежность зависит от секретности самого алгоритма. Вообще говоря, ни один алгоритм, секретность которого зависит от секретности самого алгоритма, не является надежным. В частности, имея шифрующую программу, можно нанять программиста, который дизассемблирует ее и восстановит алгоритм методом обратной инженерии. Опыт показывает, что большинство секретных алгоритмов, ставших впоследствии достоянием общественности, оказались до смешного ненадежными.
Длины ключей, используемых в криптографии с открытым ключом, обычно значительно больше, чем в симметричных алгоритма. Здесь проблема заключается не в подборе ключа, а в воссоздании секретного ключа по открытому. В случае RSA проблема эквивалентна разложению на множители большого целого числа, которое является произведением пары неизвестных простых чисел. В случае некоторых других криптосистем проблема эквивалентна вычислению дискретного логарифма по модулю большого целого числа (такая задача считается примерно аналогичной по трудности задаче разложения на множители). Имеются криптосистемы, которые используют другие проблемы.
Чтобы дать представление о степени сложности вскрытия RSA, скажем, что модули длиной 256 бит легко факторизуются обычными программистами. Ключи в 384 бита могут быть вскрыты исследовательской группой университета или компании; 512-битовые ключи находятся в пределах досягаемости крупных государств. Ключи длиной 768 бит, вероятно, не будут надежны продолжительное время. Ключи длиной 1024 бита могут считаться безопасными до тех пор, пока не будет существенного прогресса в алгоритме факторизации; ключи длиной 2048 бит большинство считает надежными на десятилетия. Более подробную информацию о длинах ключей RSA можно почерпнуть из статьи.
Важно подчеркнуть, что степень надежности криптографической системы определяется ее слабейшим звеном. Нельзя упускать из виду ни одного аспекта разработки системы - от выбора алгоритма до политики использования и распространения ключей.
Криптоанализ - это наука о дешифровке закодированных сообщений, не зная ключей. Имеется много криптоаналитических подходов. Некоторые из наиболее важных для разработчиков приведены ниже.
Атака со знанием лишь шифрованного текста (ciphertext-only attack). Это ситуация, когда атакующий не знает ничего о содержании сообщения и ему приходится работать лишь с самим шифрованным текстом. На практике часто можно сделать правдоподобные предположения о структуре текста, поскольку многие сообщения имеют стандартные заголовки. Даже обычные письма и документы начинаются с легко предсказуемой информации. Также часто можно предположить, что некоторый блок информации содержит заданное слово.
Атака со знанием содержимого шифровки (known-plaintext attack). Атакующий знает или может угадать содержимое всего или части зашифрованного текста. Задача заключается в расшифровке остального сообщения. Это можно сделать либо путем вычисления ключа шифровки, либо минуя это.
Атака с заданным текстом (chosen-plaintext attack). Атакующий имеет возможность получить шифрованный документ для любого нужного ему текста, но не знает ключа. Задачей является нахождение ключа. Некоторые методы шифрования, и в частности RSA, весьма уязвимы для атак этого типа. При использовании таких алгоритмов надо тщательно следить, чтобы атакующий не мог зашифровать заданный им текст.
Атака с подставкой (Man-in-the-middle attack). Атака направлена на обмен шифрованными сообщениями и в особенности на протокол обмена ключами. Идея заключается в том, что, когда две стороны обмениваются ключами для секретной коммуникации (например, используя шифр Диффи-Хелмана, Diffie-Hellman), противник внедряется между ними на линии обмена сообщениями. Далее противник выдает каждой стороне свои ключи. В результате, каждая из сторон будет иметь разные ключи, каждый из которых известен противнику. Теперь противник будет расшифровывать каждое сообщение своим ключом и затем зашифровывать его с помощью другого ключа перед отправкой адресату. Стороны будут иметь иллюзию секретной переписки, в то время как на самом деле противник читает все сообщения.
Одним из способов предотвратить такой тип атак заключается в том, что стороны при обмене ключами вычисляют криптографическую хеш-функцию значения протокола обмена (или по меньшей мере значения ключей), подписывают ее алгоритмом цифровой подписи и посылают подпись другой стороне. Получатель проверит подпись и то, что значение хеш-функции совпадает с вычисленным значением. Такой метод используется, в частности, в системе Фотурис (Photuris).
Атака с помощью таймера (timing attack). Этот новый тип атак основан на последовательном измерении времен, затрачиваемых на выполнение операции возведения в степень по модулю целого числа. Ей подвержены по крайней мере следующие шифры: RSA, Диффи-Хеллман и метод эллиптических кривых.
Имеется множество других криптографических атак и криптоанали-тических подходов. Однако приведенные выше являются, по-видимому, наиболее важными для практической разработки систем. Если кто-либо собирается создавать свой алгоритм шифрования, ему необходимо понимать данные вопросы значительно глубже.
Выбор для конкретных ИС должен быть основан на глубоком анализе слабых и сильных сторон тех или иных методов защиты. Обоснованный выбор той или иной системы защиты, в общем-то, должен опираться на какие-то критерии эффективности. К сожалению, до сих пор не разработаны подходящие методики оценки эффективности криптографических систем.
Наиболее простой критерий такой эффективности - вероятность раскрытия ключа или мощность множества ключей (М). По сути, это то же самое, что и криптостойкость. Для ее численной оценки можно использовать также и сложность раскрытия шифра путем перебора всех ключей.
Однако этот критерий не учитывает других важных требований к криптосистемам:
Желательно, конечно, использование некоторых интегральных показателей, учитывающих указанные факторы.
Для учета стоимости, трудоемкости и объема ключевой информации можно использовать удельные показатели - отношение указанных параметров к мощности множества ключей шифра.
Часто более эффективным при выборе и оценке криптографической системы является применение экспертных оценок и имитационное моделирование.
В любом случае выбранный комплекс криптографических методов должен сочетать как удобство, гибкость и оперативность использования, так и надежную защиту от злоумышленников циркулирующей в ИС информации.
Стеганогра́фия (от греч. Στεγανός — скрытый + γράφω — пишу; буквально «тайнопись») — это наука о скрытой передаче информации путём сохранения в тайне самого факта передачи. Этот термин ввел в 1499 году Иоганн Тритемий в своем трактате «Стеганография» (Steganographia), зашифрованном под магическую книгу.
В отличие от криптографии, которая скрывает содержимое секретного сообщения, стеганография скрывает сам факт его существования. Как правило, сообщение будет выглядеть как что-либо иное, например, как изображение, статья, список покупок, письмо или судоку. Стеганографию обычно используют совместно с методами криптографии, таким образом, дополняя её.
Преимущество стеганографии над чистой криптографией состоит в том, что сообщения не привлекают к себе внимания. Сообщения, факт шифрования которых не скрыт, вызывают подозрение и могут быть сами по себе уличающими в тех странах, в которых запрещена криптография. Таким образом, криптография защищает содержание сообщения, а стеганография защищает сам факт наличия каких-либо скрытых посланий.
Основные понятия
Идентификацию и аутентификацию можно считать основой программно-технических средств безопасности, поскольку остальные сервисы рассчитаны на обслуживание именованных субъектов. Идентификация и аутентификация – это первая линия обороны, "проходная" информационного пространства организации.
Идентификация позволяет субъекту (пользователю, процессу, действующему от имени определенного пользователя, или иному аппаратно-программному компоненту) назвать себя (сообщить свое имя). Посредством аутентификации вторая сторона убеждается, что субъект действительно тот, за кого он себя выдает. В качестве синонима слова "аутентификация" иногда используют словосочетание "проверка подлинности".
(Заметим в скобках, что происхождение русскоязычного термина "аутентификация" не совсем понятно. Английское "authentication" скорее можно прочитать как "аутентикация"; трудно сказать, откуда в середине взялось еще "фи" – может, из идентификации? Тем не менее, термин устоялся, он закреплен в Руководящих документах Гостехкомиссии России, использован в многочисленных публикациях, поэтому исправить его уже невозможно.)
Аутентификация бывает односторонней (обычно клиент доказывает свою подлинность серверу) и двусторонней (взаимной). Пример односторонней аутентификации – процедура входа пользователя в систему.
В сетевой среде, когда стороны идентификации/аутентификации территориально разнесены, у рассматриваемого сервиса есть два основных аспекта:
Субъект может подтвердить свою подлинность, предъявив по крайней мере одну из следующих сущностей:
В открытой сетевой среде между сторонами идентификации/аутентификации не существует доверенного маршрута; это значит, что в общем случае данные, переданные субъектом, могут не совпадать с данными, полученными и использованными для проверки подлинности. Необходимо обеспечить защиту от пассивного и активного прослушивания сети, то есть от перехвата, изменения и/или воспроизведения данных. Передача паролей в открытом виде, очевидно, неудовлетворительна; не спасает положение и шифрование паролей, так как оно не защищает от воспроизведения. Нужны более сложные протоколы аутентификации.
Надежная идентификация затруднена не только из-за сетевых угроз, но и по целому ряду причин. Во-первых, почти все аутентификационные сущности можно узнать, украсть или подделать. Во-вторых, имеется противоречие между надежностью аутентификации, с одной стороны, и удобствами пользователя и системного администратора с другой. Так, из соображений безопасности необходимо с определенной частотой просить пользователя повторно вводить аутентификационную информацию (ведь на его место мог сесть другой человек), а это не только хлопотно, но и повышает вероятность того, что кто-то может подсмотреть за вводом данных. В-третьих, чем надежнее средство защиты, тем оно дороже.
Современные средства идентификации / аутентификации должны поддерживать концепцию единого входа в сеть. Единый вход в сеть – это, в первую очередь, требование удобства для пользователей. Если в корпоративной сети много информационных сервисов, допускающих независимое обращение, то многократная идентификация/аутентификация становится слишком обременительной. К сожалению, пока нельзя сказать, что единый вход в сеть стал нормой, доминирующие решения пока не сформировались.
Таким образом, необходимо искать компромисс между надежностью, доступностью по цене и удобством использования и администрирования средств идентификации и аутентификации.
Любопытно отметить, что сервис идентификации / аутентификации может стать объектом атак на доступность. Если система сконфигурирована так, что после определенного числа неудачных попыток устройство ввода идентификационной информации (такое, например, как терминал) блокируется, то злоумышленник может остановить работу легального пользователя буквально несколькими нажатиями клавиш.