Информационная безопасность сетей

Шифрование

Разбить на страницы
Показывать лекцию целиком

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

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

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

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

Основные концепции шифрования

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

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

С помощью шифрования обеспечиваются три состояния безопасности информации.

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

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

  • Обычный текст. Информация в исходном виде. Также называется открытым текстом.
  • Шифрованный текст. Информация, подвергнутая действию алгоритма шифрования.(рис 12.1) Общий принцип шифрования
  • Алгоритм. Метод, используемый для преобразования открытого текста в шифрованный текст.
  • Ключ. Входные данные, посредством которых с помощью алгоритма происходит преобразование открытого текста в шифрованный или обратно.
  • Шифрование. Процесс преобразования открытого текста в шифр.
  • Дешифрование. Процесс преобразования шифра в открытый текст.
  • Существуют также четыре термина, которые необходимо знать:

  • Криптография. Наука о сокрытии информации с помощью шифрования.
  • Криптограф. Лицо, занимающееся криптографией.
  • Криптоанализ. Искусство анализа криптографических алгоритмов на предмет наличия уязвимостей.
  • Криптоаналитик. Лицо, использующее криптоанализ для определения и использования уязвимостей в криптографических алгоритмах.
  • Атаки на систему шифрования

    Системы шифрования могут подвергнуться атакам тремя следующими способами:

  • Через слабые места в алгоритме.
  • Посредством атаки "грубой силы" по отношению к ключу.
  • Через уязвимости в окружающей системе.
  • При проведении атаки на алгоритм криптоаналитик ищет уязвимости в методе преобразования открытого текста в шифр, чтобы раскрыть открытый текст без использования ключа. Алгоритмы, имеющие такие уязвимости, нельзя назвать достаточно мощными. Причина в том, что известная уязвимость может использоваться для быстрого восстановления исходного текста. Злоумышленнику в этом случае не придется использовать какие-либо дополнительные ресурсы.

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

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

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

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

    Шифрование с секретным ключом

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

    В чем суть шифрования на секретном ключе?

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

    (рис 12.2) Шифрование с секретным ключом

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

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

    Подстановочные шифры

    Подстановочные шифры существуют уже около 2500 лет. Самым ранним примером является шифр Атбаш. Он возник примерно в 600 году до н.э. и заключался в использовании еврейского алфавита в обратном порядке.

    Юлий Цезарь использовал подстановочный шифр, который так и назывался - шифр Цезаря. Этот шифр заключался в замещении каждой буквы другой буквой, расположенной в алфавите на три буквы дальше от шифруемой. Таким образом, буква A преобразовывалась в D, B преобразовывалась в E, а Z преобразовывалась в C.

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

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

    Одноразовые блокноты

    Одноразовые блокноты (One-time Pad, OTP) являются единственной теоретически невзламываемой системой шифрования. Одноразовый блокнот представляет собой список чисел в случайном порядке, используемый для кодирования сообщения (см. табл. 12.1). Как видно из названия системы, OTP может использоваться только один раз. Если числа в OTP являются действительно случайными, OTP имеет большую длину, чем сообщение, и используется только один раз, то шифрованный текст не предоставляет какого-либо механизма для восстановления исходного ключа (т. е. самого OTP) и, следовательно, сообщений.

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

    Функционирование одноразового блокнота
    Сообщение S E N D H E L P
    Буквы, замененные соответствующими числами 19 5 14 4 8 5 12 16
    Одноразовый блокнот 7 9 5 2 12 1 0 6
    Добавление открытого текста в ОТР 26 14 19 6 20 6 12 22
    Шифрованный текст Z N S F T F L V

    Еще одним важным моментом, связанным с OTP, является то, что одноразовые блокноты могут использоваться только один раз. Если OTP используется несколько раз, то его можно проанализировать и взломать. Это происходило с некоторыми советскими OTP в период холодной войны. Тогда для считывания зашифрованной информации в Национальном Агентстве безопасности был создан проект "Верона". Информация о перехватах данных этим проектом находится на сайте NSA (http://www.nsa.gov).

    Внимание!

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

    Data Encryption Standard (DES)

    Алгоритм Data Encryption Standard (DES) был разработан компанией IBM в начале 1970-х гг. Национальный институт стандартов и технологий США (NIST) принял на вооружение алгоритм (публикация FIPS 46) для DES в 1977 г. после изучения, модификации и утверждения алгоритма в NSA. Алгоритм подвергался дальнейшей модификации в 1983, 1988, 1993 и 1999 гг.

    DES использует ключ длиной 56 бит. Используются 7 бит из байта, восьмой бит каждого байта используется для контроля четности. DES является блочным алгоритмом шифрования, обрабатывающим единовременно один 64-битный блок открытого текста (см. рис. 12.3). В алгоритме DES выполняются 16 циклов шифрования с различным подключом в каждом из циклов. Ключ подвергается действию своего собственного алгоритма для образования 16 подключей (см. рис. 12.4).

    (рис 12.4) Блок-схема алгоритма DES(рис 12.3) Алгоритм генерации подключа DES

    На блок-схеме алгоритма DES изображены несколько блоков, в которых происходит перестановка. Рассматриваемый стандарт шифрования предусматривает специальное переупорядочивание битов для каждой перестановки. То же самое относится к алгоритму генерации подключа. Для перестановочной выборки 1 и 2 предусмотрено определенное переупорядочивание битов. На рисунке 12.3 также изображена функция вызова f. В этой функции находятся S-блоки. S-блоки представляют собой блоки табличного поиска (также определенные в стандарте), изменяющие 6-битные выходные данные на 4-битные.

    Алгоритм DES может функционировать в четырех режимах.

  • Электронный шифрблокнот. Это базовый алгоритм блочного шифрования, в котором текст и ключ объединяются и образуют шифрованный текст. В этом режиме идентичный вход образует идентичный выход.
  • Цепочка блоков. В данном режиме каждый блок шифруется как в электронном шифрблокноте, но с добавлением третьего компонента, полученного из предыдущего выхода. В данном случае, идентичный вход (открытый текст) не образует идентичный вывод.
  • Обратная связь по шифрованному тексту. В данном режиме в качестве входных данных в DES используется ранее сгенерированный шифрованный текст. После этого выходные данные комбинируются с открытым текстом и образуют новый шифртекст.
  • Обратная связь по выходу. Этот режим аналогичен обратной связи по шифрованному тексту, однако здесь используются выходные данные DES, и не происходит построение цепочки из шифртекста.
  • Были раскрыты несколько атак, требующих меньше вычислительных мощностей, нежели исчерпывающий поиск (дифференциальный и линейный криптоанализ; для получения более детальных сведений по этим атакам посетите сайт (http://www.rsasecurity.com/rsalabs/faq/). Однако эти атаки требуют большого объема выборочного открытого текста и, следовательно, практически не осуществимы в реальном мире. Сегодня особенно заметным слабым местом шифров стал 56-битный ключ. 56 бит ключа обеспечивают потенциальное число ключей, равное 255. В сегодняшних компьютерных системах все пространство ключей может быть изучено за небольшой промежуток времени. В 1997 г. организация Electronic Frontier Foundation (EFF) анонсировала компьютерную систему, которая сможет найти ключ DES за четыре дня. Создание этой системы стоило 250 000 долларов. С помощью современного оборудования можно определить ключ DES посредством атаки "грубой силы" за 35 минут. Этого времени слишком мало, чтобы защитить информацию, которая должна сохраняться в секрете. В переработанной публикации FIPS (46-2 и текущая 46-3) в NIST признали этот факт, сказав, что простой DES можно использовать только в устаревших системах.

    Тройной DES

    В 1992 году исследования показали, что DES можно использовать трижды для обеспечения более мощного шифрования. Так родилась концепция тройного алгоритма DES (TDES). На рисунке 12.5 показана схема работы алгоритма TDES. Обратите внимание, что вторая операция в действительности представляет собой дешифрование. Используемый при этом ключ обеспечивает большую мощность тройного DES в сравнении с обычным DES.

    (рис 12.5) Блок-схема алгоритма шифрования TDES

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

    Примечание

    TDES подвергался двум атакам. Тем не менее, объем данных, требуемый для проведения атак (как и в случае с атаками на DES), делал проведение атак на этот алгоритм практически неосуществимым в реальных ситуациях.

    Шифрование паролей

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

    У каждого пользователя есть свой пароль. Алгоритм использует первые восемь символов пароля. Если пароль длиннее восьми символов, он усекается. Если пароль короче восьми символов, он дополняется. Пароль преобразуется в 56-битное число с помощью первых 7 бит каждого символа. После этого система выбирает 12.битное число на базе системного времени. Этот элемент называется "крупинкой соли" или расширением. Расширение и пароль используются в качестве входных данных в функции шифрования паролей (см. рис. 12.6).

    (рис 12.6) Функция шифрования пароля UNIX

    Расширение используется для изменения одной из таблиц перестановки в алгоритме DES (перестановка E) любым из 4096 различных способов, в зависимости от числа единиц в двенадцати битах. Начальный открытый текст содержит 56 нулевых битов, а ключом являются 56 бит, полученных из пароля. Алгоритм выполняется 25 раз, причем входные данные каждого этапа являются выходом предыдущего этапа.

    Конечные выходные данные преобразуются в 11 символов, а расширение преобразуется в 2 символа и помещается перед конечными данными выхода.

    Главной уязвимостью этой системы является то, что она основана на выборе пароля. Так как большинство пользователей компьютеров используют пароли, состоящие из символов нижнего регистра, мы имеем общее число возможных комбинаций, равное 268. Это значительно больше, чем 255 возможных ключей DES, поэтому взлом такого шифра посредством "грубой силы" займет гораздо меньше времени и вычислительных ресурсов для раскрытия паролей в системе Unix.

    Примечание

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

    Расширенный стандарт шифрования Rijndael

    Взамен DES NIST анонсировал в 1997 г. появление алгоритма-конкурента стандарту DES с названием AES. В конце 2000 г. NIST объявили о том, что два криптографа из Бельгии (Joan Daemen и Vincent Rijmen) выиграли конкурс, представив алгоритм Rijndael. Этот алгоритм был выбран с учетом его мощности, применимости в высокоскоростных сетях, а также возможности аппаратной реализации.

    Rijndael представляет собой блочный шифр, использующий ключи и блоки длиной 128, 192 или 256 бит. На сегодняшний день такая длина ключей обеспечивает практическую неосуществимость атак с применением грубой силы. Алгоритм состоит из 10-14 циклов, в зависимости от размеров блока открытого текста и размера ключа. На рисунке 12.7 показано, какие вычисления производятся в каждом цикле.

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

    Другие алгоритмы шифрования с секретным ключом

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

  • IDEA (International Data Encryption Algorithm). Разработан в Швейцарии. В IDEA используется 128-битный ключ; кроме этого, IDEA также используется в Pretty Good Privacy (PGP).
  • RC5. Разработан Роном Ривестом в институте MIT. Этот алгоритм позволяет использовать ключи с переменной длиной.
  • Skipjack. Разработан правительством США для использования с Clipper Chip. В нем используется 80-битный ключ, что в ближайшем будущем, скорее всего, станет уже неприемлемым.
  • (рис 12.7) Схема работы цикла алгоритма Rijndael
  • Blowfish. Позволяет использовать переменные ключи длиной до 448 бит; алгоритм оптимизирован для работы на 32-битных процессорах.
  • Twofish. Использует 128-битные блоки, а также ключи длиной 128, 192 или 256 бит.
  • CAST-128. Использует 128-битный ключ. Применяется в новых версиях PGP.
  • Алгоритм ГОСТ (ГОСТ 28147-89). Российский стандарт шифрования, разработанный в ответ на DES. В нем используется ключ длиной 256 бит.
  • Любой из этих алгоритмов может использоваться в средствах обеспечения безопасности информации. Все эти алгоритмы, как правило, являются достаточно мощными для использования в общих целях.

    Внимание!

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

    Шифрование с открытым ключом

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

    В чем заключается шифрование с открытым ключом?

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

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

    (рис 12.8) Шифрование с открытым ключом

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

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

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

    Алгоритм обмена ключами Диффи-Хеллмана

    Уитфилд Диффи (Whitfield Diffie) и Мартин Хеллман (Martin Hellman) разработали свою систему шифрования с открытым ключом в 1976 г. Система Диффи-Хеллмана (Diffie-Hellman) разрабатывалась для решения проблемы распространения ключей при использовании систем шифрования с секретными ключами. Идея заключалась в том, чтобы применять безопасный метод согласования секретного ключа без передачи ключа каким-либо другим способом. Следовательно, необходимо было найти безопасный способ получения секретного ключа с помощью того же метода связи, для которого разрабатывалась защита. Алгоритм Диффи-Хеллмана нельзя использовать для шифрования или дешифрования информации.

    Алгоритм Диффи-Хеллмана работает следующим образом.

  • Предположим, что двум абонентам ( P1 и P2 ) требуется установить между собой безопасное соединение, для которого необходимо согласовать ключ шифрования.
  • P1 и P2 принимают к использованию два больших целых числа a и b, причем 1 < a < b.
  • P1 выбирает случайное число i и вычисляет I = ai mod b. P1 передает I абоненту P2.
  • P2 выбирает случайное число j и вычисляет J = aj mod b. P2 передает J абоненту P1.
  • P1 вычисляет k1 = Ji mod b.
  • P2 вычисляет k2 = Ij mod b.
  • Имеем k1 = k2 = ai*j mod b, следовательно, k1 и k2 являются секретными ключами, предназначенными для использования при передаче других данных.
  • Примечание

    В приведенных выше уравнениях "mod" означает остаток. Например, 12 mod 10 = 2. Два - это остаток от деления 12 на 10.

    Если злоумышленник прослушивает трафик, передаваемый по кабелю, то ему будут известны a, b, I и J. Тем не менее, остаются в секрете i и j. Уровень безопасности системы зависит от сложности нахождения i при известном I = ai mod b. Эта задача называется задачей дискретного логарифмирования и считается очень сложной (т. е. с помощью современного вычислительного оборудования ее решить практически невозможно), если числа очень велики. Следовательно, a и b необходимо выбирать очень тщательно. Например, оба числа b и (b - 1)/2 должны быть простыми и иметь длину не менее 512 бит. Рекомендуемая длина чисел составляет 1024 бит.

    Алгоритм обмена ключами Диффи-Хеллмана используется во многих системах безопасности для реализации обмена ключами, используемыми для дополнительного трафика. Недостатком системы Диффи-Хеллмана является то, что она может быть уязвима для атаки посредником (см. рис. 12.9). Если атакующий сумеет разместить свой компьютер между двумя абонентами P1 и P2, подключить его к каналу связи и осуществлять перехват всей передаваемой информации, то он сможет выполнять обмен данными с P2, выдавая себя за P1, и с P1 под видом P2. Таким образом, обмен ключами будет происходить между P1 и злоумышленником и между P2 и злоумышленником. Тем не менее, осуществление такой атаки требует большого объема ресурсов, и в реальном мире такие атаки происходят редко.

    (рис 12.9) Атака посредником на алгоритм Диффи-Хеллмана

    Алгоритм RSA

    В 1978 г. Рон Ривест, Ади Шамир и Лен Адельман разработали алгоритм шифрования Rivest-Shamir-Adleman (RSA) с открытым ключом. В отличие от алгоритма Диффи-Хеллмана RSA может использоваться для шифрования и дешифрования. Также, в отличие от алгоритма Диффи-Хеллмана, безопасность алгоритма RSA базируется на факторизации больших чисел. Задачу факторизации больших чисел принято считать очень сложной, если числа очень велики (1024 бит или больше).

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

    Шифрованный текст = (открытый текст)e mod n
    Открытый текст = (шифрованный текст)d mod n
    Секретный ключ = {d, n}
    Открытый ключ = {e, n}

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

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

    Шифрованный текст = (открытый текст)d mod n
    Открытый текст = (шифрованный текст)e mod n
    Секретный ключ = {d, n}
    Открытый ключ = {e, n}

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

    Генерация ключей RSA

    При генерировании ключей RSA необходимо соблюдать тщательность. Чтобы сгенерировать ключевую пару RSA, выполните следующие шаги:

  • Выберите два простых числа p и q и содержите их в секрете.
  • Вычислите n = pq.
  • Вычислите ф(n) = (p - 1)(q - 1).
  • Выберите такое e, чтобы оно было взаимно простым по отношению к ф(n).
  • Определите такое d, чтобы (d)(e) = 1 mod ф(n) и d < ф(n).
  • Примечание

    Число n должно содержать порядка 200 знаков или больше. Тогда оба числа p и q должны иметь длину, по крайней мере, 100 знаков. Ключи для использования на практике должны иметь длину 1024 бит. В случае с секретной информацией рекомендуется использовать ключи длиной 2048 бит и более.

    Реальный пример работы RSA

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

  • Сначала я выбрал два простых числа. В данном случае были выбраны числа p = 11 и q = 13.
  • Теперь вычисляем n = pq. Имеем n = 11 * 13 = 143.
  • Теперь нужно вычислить ф(n) = (p - 1)(q - 1) = (11 - 1)(13 - 1) = 10 * 12 = 120.
  • Выбираем число e так, чтобы оно было простым относительно ф(n). Здесь было выбрано значение e = 7.
  • Необходимо определить такое d, чтобы (d)(e) = 1 mod ф(n). Следовательно, (d)(7) = 1 mod 120 ; d должно также быть меньше 120. Находим, что d = 103. (103 умножаем на 7 и получается 721. 721 делим на 120 и получаем 6 с остатком 1.)
  • Секретный ключ: {103, 143}.
  • Открытый ключ: {7, 143}.
  • Для выполнения непосредственно шифрования и дешифрования используем исходные формулы.

    Шифрованный текст = (открытый текст)e mod n
    Открытый текст = (шифрованный текст)d mod n

    Предположим, что нужно отправить сообщение "9". С помощью формулы шифрования получаем следующее:

    Шифрованный текст = (9)7 mod 143 = 48.

    При получении зашифрованной информации она подвергается обработке алгоритмом дешифрования:

    Открытый текст = (48)103 mod 143 = 9.

    Другие алгоритмы с открытым ключом

    Существуют некоторые алгоритмы с открытым ключом, имеющие такие же свойства, как RSA и алгоритм Диффи-Хеллмана. В данном параграфе мы вкратце рассмотрим три наиболее распространенных алгоритма.

    Алгоритм Эль-Гамаля

    Эль-Гамаль (Taher Elgamal) разработал вариант системы Диффи-Хеллмана. Он усовершенствовал алгоритм Диффи-Хеллмана и получил один алгоритм для шифрования и один для обеспечения аутентификации. Алгоритм Эль-Гамаля не был запатентован (в отличие от RSA) и, таким образом, стал более дешевой альтернативой, так как не требовалась уплата лицензионных взносов. Так как этот алгоритм базировался на системе Диффи-Хеллмана, безопасность информации при его использовании обеспечивается сложностью решения задачи дискретного логарифмирования.

    Алгоритм цифровой подписи

    Алгоритм Digital Signature Algorithm (DSA) был разработан правительством США как стандартный алгоритм для цифровых подписей (для получения дополнительной информации по цифровым подписям обратитесь к следующему параграфу). Данный алгоритм базируется на системе Эль-Гамаля, но позволяет осуществлять только аутентификацию. Конфиденциальность этим алгоритмом не обеспечивается.

    Шифрование с использованием эллиптических кривых

    Эллиптические кривые были предложены для использования в системах шифрования в 1985 г. Системы шифрования с использованием эллиптических кривых (ECC) базируются на другой сложной математической задаче, нежели факторизация или дискретное логарифмирование. Данная задача заключается в следующем: имея две точки A и B на эллиптической кривой, такие что A = kB, очень трудно определить целое число k. Существует ряд преимуществ использования ECC перед алгоритмом RSA или Диффи-Хеллмана. Самым большим преимуществом является то, что ключи имеют меньшую длину (по причине сложности задачи), в результате чего вычисления производятся быстрее с сохранением уровня безопасности. Например, безопасность, обеспечиваемая 1024-битным ключом RSA может быть обеспечена 160-битным ключом ECC. Может пройти немало времени, прежде чем ECC будут полностью приняты к использованию, так как в этой области еще необходимо провести ряд исследований, и на существующие ECC зарегистрировано несколько патентов.

    Вопросы для самопроверки

  • Открытый текст преобразуется в ____________ в процессе шифрования.
  • К какому типу систем шифрования относится DES?
  • Цифровые подписи

    Цифровые подписи - это не цифровые изображения рукописных подписей. Цифровые подписи - это форма шифрования, обеспечивающая аутентификацию. Популярность цифровых подписей постоянно растет, и они были разрекламированы как способ перехода на полностью электронную информационную среду. Президент США Билл Клинтон даже издал закон об использовании цифровых подписей как легальных подписей. Но даже несмотря на это, цифровые подписи вводят многих людей в недоумение.

    Что такое цифровая подпись?

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

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

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

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

    Безопасность и полезность цифровых подписей зависит от двух важнейших элементов:

  • Защита секретного ключа пользователя.
  • Безопасная хеш-функция.
  • Примечание

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

    (рис 12.10) Функционирование цифровых подписей

    Безопасные хеш-функции

    Для использования цифровых подписей необходимы безопасные хеш-функции. Хеш-функция может называться безопасной, если:

  • функция является односторонней. Иными словами, функция создает контрольную сумму из информации с невозможностью восстановления информации по контрольной сумме;
  • крайне сложно сконструировать два фрагмента информации с получением одинаковой контрольной суммы при выполнении функции.
  • Второму условию не так-то просто удовлетворить. Рассматриваемые контрольные суммы должны быть меньше по размеру, нежели информация, для обеспечения простоты подписывания, хранения и передачи информации. Если это условие удовлетворяется, то одной и той же контрольной сумме должно соответствовать большое число различных фрагментов информации. Безопасность функций обеспечивается способом связи всех битов в исходных данных со всеми битами контрольной суммы. Таким образом, если один бит информации изменяется, то также изменяется большое количество битов в контрольной сумме.

    Безопасные хеш-функции должны обеспечивать создание контрольной суммы длиной, по крайней мере, в 128 бит. Двумя наиболее распространенными безопасными хеш-функциями являются MD5, генерирующая 128-битную контрольную сумму, и SHA, которая производит контрольную сумму длиной 160 бит. Существует множество других хеш-функций, однако большая их часть признана небезопасными. В MD5 были обнаружены уязвимости, которые могут использоваться при проведении вычислительной атаки. Эта атака позволит создать дополнительный фрагмент информации, что приведет к образованию той же контрольной суммы. Функция SHA была разработана правительством США и в настоящее время считается безопасной. В большей части программного обеспечения по информационной безопасности рассмотренные функции MD5 и SHA доступны для использования.

    Управление ключами

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

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

    Создание ключей

    Очевидно, что ключи должны создаваться с особой тщательностью. Некоторые ключи обеспечивают недостаточную производительность при работе с определенными алгоритмами. Например, ключ, состоящий из одних "нулей", при использовании в DES не обеспечивает высокий уровень защищенности информации. Аналогично, при создании ключей для использования в RSA, необходимо соблюдать внимательность при выборе p и q из набора простых чисел.

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

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

    Также может быть необходимым выбрать правильную длину ключа. В некоторых алгоритмах используются ключи фиксированной длины (например, в алгоритме DES используется ключ длиной 56 бит). Другие алгоритмы могут использовать ключи переменной длины. Чем длиннее ключ, тем выше уровень обеспечиваемой безопасности. Например, 1024-битный ключ RSA более надежен, чем 512.битный ключ RSA. Тем не менее, таким образом нельзя сопоставлять надежность ключа RSA с надежностью ключа DES. В таблице 12.2 представлены относительные степени надежности ключей для различных алгоритмов шифрования.

    Чтобы получить представление о том, насколько надежны ключи на практике, вспомните машину EFF. В 1997 г. она стоила 250 000 долларов и обеспечивала раскрытие ключа DES за 4,5 дня. В других случаях 40-битный ключ RC5 был раскрыт с помощью атаки "грубой силы" за 3,5 часа с использованием 250 компьютеров в UC Berkley. В Швейцарском Федеральном институте технологий посредством "грубой силы" раскрыт 48-битный ключ RC5 за 312 часов с использованием 3500 компьютеров. На данный момент рекомендуется использовать, как минимум, 80-битные ключи при шифровании секретной информации, а также минимум 1024-битные ключи в RSA и алгоритме Диффи-Хеллмана. 160-битные ключи ECC также считаются безопасными.

    Внимание!

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

    Распространение ключей

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

    Относительная надежность ключей различной длины
    Шифрование с секретным ключом(DES, RC5)Шифрование с открытым ключом(RSA, Диффи-Хеллман)Шифрование посредством эллиптических кривых
    40 бит - -
    56 бит 400 бит -
    64 бит 512 бит -
    80 бит 768 бит -
    90 бит 1024 бит 160 бит
    120 бит 2048 бит 210 бит
    128 бит 2304 бит 256 бит

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

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

    Любой ключ, используемый в течение продолжительного периода времени, требует обеспечения основательных мер предосторожности. Нельзя использовать алгоритм обмена ключами Диффи-Хеллмана для передачи пар ключей RSA. В случае с парами ключей RSA один ключ должен содержаться в секрете, а другой может находиться в открытом состоянии. Открытый ключ должен публиковаться так, чтобы предотвратить его подмену (см. раздел ниже "Сертификация ключей"). Если пары ключей генерируются центральным бюро сертификатов, секретный ключ должен безопасно передаваться владельцу ключевой пары. Если пара ключей генерируется владельцем, открытый ключ должен передаваться в центральное бюро сертификатов с обеспечением мер безопасности.

    Примечание

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

    Сертификация ключей

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

    Открытые ключи предназначены для публикации или передачи другим пользователям и должны сертифицироваться как принадлежащие владельцу ключевой пары. Сертификация осуществляется с помощью центрального бюро сертификатов (CA). В данном случае CA предоставляет цифровую подпись на открытом ключе, и благодаря этому CA с доверием воспринимает тот факт, что открытый ключ принадлежит владельцу ключевой пары (см. рис. 12.11).

    Внимание!

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

    (рис 12.11) Сертификация открытого ключа в бюро сертификатов

    Защита ключей

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

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

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

    Аннулирование ключей

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

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

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

    Доверие в информационной системе

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

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

    Иерархия

    Иерархическая модель доверия наиболее проста для восприятия. Говоря простым языком, в данном случае вы доверяете человеку, который находится выше в иерархической цепи, так как от него было получено соответствующее указание о необходимости доверия. На рисунке 12.12 изображена схема этой модели. Как видно из рисунка, пользователи User1 и User2 располагаются под CA1. Следовательно, если CA1 говорит, что сертификат открытого ключа принадлежит пользователю User1, пользователь User2 будет верить этому. На практике User2 передает пользователю User1 свой сертификат открытого ключа, подписанный CA1. Пользователь User1 проверяет подпись CA1 с использованием открытого ключа CA1. Так как CA1 находится в иерархии выше, чем User1, то User1 доверяет CA1 и, следовательно, доверяет сертификату пользователя User2.

    (рис 12.12) Иерархическая модель доверия

    Мы рассмотрели довольно простой случай. Если пользователю User1 нужно проверить информацию от пользователя User3, все несколько усложняется. CA1 не знает о пользователе User3, в отличие от CA2. Тем не менее, пользователь User1 не доверяет CA2, так как это бюро сертификатов напрямую не принадлежит цепочке пользователя User1. Следующий уровень вверх по цепочке - CA4. Пользователь User1 может верифицировать информацию от пользователя User3 посредством проверки с помощью CA4 следующим образом.

  • Пользователь User1 смотрит на сертификат пользователя User3. Он подписан в CA2.
  • Пользователь User1 получает сертификат пользователя CA2. Он подписан в CA4.
  • Так как пользователь User1 доверяет CA4, открытый ключ CA4 может использоваться для верификации сертификата CA2.
  • Как только сертификат CA2 верифицирован, пользователь User1 может верифицировать сертификат пользователя User3.
  • Как только будет верифицирован сертификат пользователя User3, пользователь User1 может использовать открытый ключ пользователя User3 для верификации данных.
  • Как видите, все довольно быстро усложняется. Представьте себе, какой объем операций по верификации необходимо было бы производить, если бы пользователю User1 нужно было верифицировать данные, поступившие от пользователя User4. Две цепочки не пересекаются вплоть до CA9! Так реализована сертификация в X.509. Иерархия устанавливается таким образом, чтобы между любыми двумя нижними объектами могла быть создана цепочка сертификатов.

    С теоретической точки зрения все выглядит неплохо. Однако на практике все иначе. Одной из причин, по которой данная технология не функционировала, заключается в том, что не существовало реальных CA корневого уровня. CA корневого уровня - это наивысшая точка в иерархии. В одно время было принято считать, что в каждой стране должно быть свое бюро сертификатов корневого уровня. Также предполагалось, что компании, выпускающие кредитные карты, должны стать корневыми CA, или что каждая организация должна иметь свое собственное CA. На практике почти ничего не было реализовано. Возникал еще один вопрос, который представлял собой потенциальную проблему: сколько CA должны сертифицировать каждого конечного пользователя? Если конечный пользователь живет в стране А, обладает кредитной картой компании B и работает в организации C, должны ли все три объекта подписывать один и тот же сертификат?

    Установка CA

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

  • Должна быть создана пара открытого ключа CA. Ключ должен быть достаточно большим, чтобы обеспечивать безопасность на большой период времени (как правило, больше чем на два года).
  • Открытый ключ CA должен быть сертифицирован самим CA и, возможно, другим бюро сертификатов, расположенном на более высоком уровне иерархической модели. Если сертификат предоставляется внешней организацией, то это будет стоить определенную сумму денег.
  • Секретный ключ CA должен быть защищен на весь период своего существования. Если он когда-нибудь будет раскрыт, может понадобиться перестройка всей инфраструктуры.
  • Необходимо создать соответствующие политики и процедуры для аутентификации и подписывания сертификатов нижнего уровня.
  • Необходимо реализовать механизм, позволяющий объектам нижних уровней верифицировать сертификаты друг друга. Это означает, что сертификат CA должен быть доступен каждому объекту нижнего уровня. В некоторых случаях это означает непосредственное взаимодействие с CA. В такой структуре необходимо, чтобы CA было доступно в течение всего периода времени, либо это бюро сертификатов вызовет ошибки в работе всей системы.
  • Вопрос к эксперту

    Вопрос. Существуют ли CA общего пользования?

    ) и Thawte (http://www.thawte.com/) являются наиболее яркими примерами таких CA. Организация может создать пару открытого ключа, например для веб-сервера, и отправить открытый ключ в CA. CA создает сертификат и предоставляет его организации. CA получает прибыль от предоставления этой услуги. Использование таких сертификатов можно наблюдать при посещении многих защищенных сайтов в интернете. Так как открытые ключи CA известны большей части веб-браузеров, сертификат веб-сайта верифицируется с помощью открытого ключа CA.

    Примечание

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

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

    Аннулирование сертификатов

    Аннулирование сертификатов может оказаться самой трудной проблемой, связанной с CA. Как уже упоминалось ранее, каждый объект, который использует сертификат, должен уведомляться об аннулировании сертификата. Это уведомление должно осуществляться своевременно. Так как природа системы с открытым ключом не позволяет CA знать о каждом пользователе, который может использовать данный сертификат, CA должно полагаться на тех, кто будет использовать сертификат, для проверки того, что сертификат не был аннулирован. При этом потребуется, чтобы каждый объект проверял CA перед использованием сертификата.

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

    Сеть

    Сеть с доверием представляет собой альтернативную модель доверия. Эта концепция была впервые использована в технологии Pretty Good Privacy (PGP). Она заключается в том, что каждый пользователь сертифицирует свой сертификат и передает его известным ассоциированным объектам. Эти объекты могут подписать сертификат другого пользователя, так как он известен (см. рис. 12.13).

    В данной модели не существует центрального бюро сертификатов. Если пользователю User1 требуется верифицировать информацию, поступающую от пользователя User2, он запрашивает сертификат пользователя User2. Так как пользователь User1 знает пользователя User2, то доверяет сертификату и даже может его подписать.

    Теперь рассмотрим ситуацию, в которой User1 получает информацию от User3. Пользователь User3 не известен пользователю User1, но у пользователя User3 есть сертификат, подписанный пользователем User2. Таким образом, рассматриваемая модель распространяется на всю компьютерную сеть. Единственным решением, которое должно приниматься в процессе работы, является число переходов, которому доверяет пользователь. Как правило, это число равно 3 или 4. Кроме того, может возникнуть ситуация, в которой для установления доверия другому пользователю есть два пути. Например, User2 может использовать два пути установления доверия с пользователем User5: один через пользователя User3 и другой через пользователя User4. Так как оба пользователя User3 и User4 сертифицируют пользователя User5, пользователь User2 может быть уверен в сертификате пользователя User5.

    (рис 12.13) Сеть модели доверия

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

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

    Разработка системы шифрования

    Этот проект предназначен для того, чтобы продемонстрировать использование шифрования в информационной системе для обеспечения аутентификации, конфиденциальности и целостности. В данном проекте подразумевается применение как систем шифрования с секретным ключом (AES), так и систем с открытым ключом (RSA или Диффи-Хеллмана).

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

    Шаг за шагом

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

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

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

    Контрольные вопросы

  • На секретности какого элемента основана защита информации надежными алгоритмами шифрования?
  • Каковы три вида атак на схему шифрования?
  • Как иначе называется шифрование с секретным ключом?
  • Приведите пример раннего подстановочного шифра.
  • Может ли быть взломан правильно реализованный "одноразовый блокнот"?
  • Какую длину имеют ключи DES?
  • В чем заключается основной недостаток DES?
  • За счет чего тройной DES повышает уровень безопасности алгоритма DES?
  • Для чего предназначен алгоритм AES?
  • На сложности какой задачи базируется безопасность, обеспечиваемая алгоритмом Диффи-Хеллмана?
  • Можно ли использовать алгоритм Диффи-Хеллмана для шифрования трафика?
  • Назовите основную атаку, которой подвержен алгоритм Диффи-Хеллмана (с правильно выбранными a и b).
  • Что такое цифровая подпись?
  • Почему открытые ключи должны быть сертифицированными?
  • В чем заключается проблема, связанная с управлением ключами, которая вызывает сбои в большей части систем PKI?
  • Страницы:

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

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

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

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

    Основные концепции шифрования

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

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

    С помощью шифрования обеспечиваются три состояния безопасности информации.

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

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

  • Обычный текст. Информация в исходном виде. Также называется открытым текстом.
  • Шифрованный текст. Информация, подвергнутая действию алгоритма шифрования.(рис 12.1) Общий принцип шифрования
  • Алгоритм. Метод, используемый для преобразования открытого текста в шифрованный текст.
  • Ключ. Входные данные, посредством которых с помощью алгоритма происходит преобразование открытого текста в шифрованный или обратно.
  • Шифрование. Процесс преобразования открытого текста в шифр.
  • Дешифрование. Процесс преобразования шифра в открытый текст.
  • Существуют также четыре термина, которые необходимо знать:

  • Криптография. Наука о сокрытии информации с помощью шифрования.
  • Криптограф. Лицо, занимающееся криптографией.
  • Криптоанализ. Искусство анализа криптографических алгоритмов на предмет наличия уязвимостей.
  • Криптоаналитик. Лицо, использующее криптоанализ для определения и использования уязвимостей в криптографических алгоритмах.
  • Атаки на систему шифрования

    Системы шифрования могут подвергнуться атакам тремя следующими способами:

  • Через слабые места в алгоритме.
  • Посредством атаки "грубой силы" по отношению к ключу.
  • Через уязвимости в окружающей системе.
  • При проведении атаки на алгоритм криптоаналитик ищет уязвимости в методе преобразования открытого текста в шифр, чтобы раскрыть открытый текст без использования ключа. Алгоритмы, имеющие такие уязвимости, нельзя назвать достаточно мощными. Причина в том, что известная уязвимость может использоваться для быстрого восстановления исходного текста. Злоумышленнику в этом случае не придется использовать какие-либо дополнительные ресурсы.

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

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

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

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

    Шифрование с секретным ключом

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

    В чем суть шифрования на секретном ключе?

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

    (рис 12.2) Шифрование с секретным ключом

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

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

    Подстановочные шифры

    Подстановочные шифры существуют уже около 2500 лет. Самым ранним примером является шифр Атбаш. Он возник примерно в 600 году до н.э. и заключался в использовании еврейского алфавита в обратном порядке.

    Юлий Цезарь использовал подстановочный шифр, который так и назывался - шифр Цезаря. Этот шифр заключался в замещении каждой буквы другой буквой, расположенной в алфавите на три буквы дальше от шифруемой. Таким образом, буква A преобразовывалась в D, B преобразовывалась в E, а Z преобразовывалась в C.

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

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

    Одноразовые блокноты

    Одноразовые блокноты (One-time Pad, OTP) являются единственной теоретически невзламываемой системой шифрования. Одноразовый блокнот представляет собой список чисел в случайном порядке, используемый для кодирования сообщения (см. табл. 12.1). Как видно из названия системы, OTP может использоваться только один раз. Если числа в OTP являются действительно случайными, OTP имеет большую длину, чем сообщение, и используется только один раз, то шифрованный текст не предоставляет какого-либо механизма для восстановления исходного ключа (т. е. самого OTP) и, следовательно, сообщений.

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

    Функционирование одноразового блокнота
    Сообщение S E N D H E L P
    Буквы, замененные соответствующими числами 19 5 14 4 8 5 12 16
    Одноразовый блокнот 7 9 5 2 12 1 0 6
    Добавление открытого текста в ОТР 26 14 19 6 20 6 12 22
    Шифрованный текст Z N S F T F L V

    Еще одним важным моментом, связанным с OTP, является то, что одноразовые блокноты могут использоваться только один раз. Если OTP используется несколько раз, то его можно проанализировать и взломать. Это происходило с некоторыми советскими OTP в период холодной войны. Тогда для считывания зашифрованной информации в Национальном Агентстве безопасности был создан проект "Верона". Информация о перехватах данных этим проектом находится на сайте NSA (http://www.nsa.gov).

    Внимание!

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

    Data Encryption Standard (DES)

    Алгоритм Data Encryption Standard (DES) был разработан компанией IBM в начале 1970-х гг. Национальный институт стандартов и технологий США (NIST) принял на вооружение алгоритм (публикация FIPS 46) для DES в 1977 г. после изучения, модификации и утверждения алгоритма в NSA. Алгоритм подвергался дальнейшей модификации в 1983, 1988, 1993 и 1999 гг.

    DES использует ключ длиной 56 бит. Используются 7 бит из байта, восьмой бит каждого байта используется для контроля четности. DES является блочным алгоритмом шифрования, обрабатывающим единовременно один 64-битный блок открытого текста (см. рис. 12.3). В алгоритме DES выполняются 16 циклов шифрования с различным подключом в каждом из циклов. Ключ подвергается действию своего собственного алгоритма для образования 16 подключей (см. рис. 12.4).

    (рис 12.4) Блок-схема алгоритма DES(рис 12.3) Алгоритм генерации подключа DES

    На блок-схеме алгоритма DES изображены несколько блоков, в которых происходит перестановка. Рассматриваемый стандарт шифрования предусматривает специальное переупорядочивание битов для каждой перестановки. То же самое относится к алгоритму генерации подключа. Для перестановочной выборки 1 и 2 предусмотрено определенное переупорядочивание битов. На рисунке 12.3 также изображена функция вызова f. В этой функции находятся S-блоки. S-блоки представляют собой блоки табличного поиска (также определенные в стандарте), изменяющие 6-битные выходные данные на 4-битные.

    Алгоритм DES может функционировать в четырех режимах.

  • Электронный шифрблокнот. Это базовый алгоритм блочного шифрования, в котором текст и ключ объединяются и образуют шифрованный текст. В этом режиме идентичный вход образует идентичный выход.
  • Цепочка блоков. В данном режиме каждый блок шифруется как в электронном шифрблокноте, но с добавлением третьего компонента, полученного из предыдущего выхода. В данном случае, идентичный вход (открытый текст) не образует идентичный вывод.
  • Обратная связь по шифрованному тексту. В данном режиме в качестве входных данных в DES используется ранее сгенерированный шифрованный текст. После этого выходные данные комбинируются с открытым текстом и образуют новый шифртекст.
  • Обратная связь по выходу. Этот режим аналогичен обратной связи по шифрованному тексту, однако здесь используются выходные данные DES, и не происходит построение цепочки из шифртекста.
  • Были раскрыты несколько атак, требующих меньше вычислительных мощностей, нежели исчерпывающий поиск (дифференциальный и линейный криптоанализ; для получения более детальных сведений по этим атакам посетите сайт (http://www.rsasecurity.com/rsalabs/faq/). Однако эти атаки требуют большого объема выборочного открытого текста и, следовательно, практически не осуществимы в реальном мире. Сегодня особенно заметным слабым местом шифров стал 56-битный ключ. 56 бит ключа обеспечивают потенциальное число ключей, равное 255. В сегодняшних компьютерных системах все пространство ключей может быть изучено за небольшой промежуток времени. В 1997 г. организация Electronic Frontier Foundation (EFF) анонсировала компьютерную систему, которая сможет найти ключ DES за четыре дня. Создание этой системы стоило 250 000 долларов. С помощью современного оборудования можно определить ключ DES посредством атаки "грубой силы" за 35 минут. Этого времени слишком мало, чтобы защитить информацию, которая должна сохраняться в секрете. В переработанной публикации FIPS (46-2 и текущая 46-3) в NIST признали этот факт, сказав, что простой DES можно использовать только в устаревших системах.

    Тройной DES

    В 1992 году исследования показали, что DES можно использовать трижды для обеспечения более мощного шифрования. Так родилась концепция тройного алгоритма DES (TDES). На рисунке 12.5 показана схема работы алгоритма TDES. Обратите внимание, что вторая операция в действительности представляет собой дешифрование. Используемый при этом ключ обеспечивает большую мощность тройного DES в сравнении с обычным DES.

    (рис 12.5) Блок-схема алгоритма шифрования TDES

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

    Примечание

    TDES подвергался двум атакам. Тем не менее, объем данных, требуемый для проведения атак (как и в случае с атаками на DES), делал проведение атак на этот алгоритм практически неосуществимым в реальных ситуациях.

    Шифрование паролей

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

    У каждого пользователя есть свой пароль. Алгоритм использует первые восемь символов пароля. Если пароль длиннее восьми символов, он усекается. Если пароль короче восьми символов, он дополняется. Пароль преобразуется в 56-битное число с помощью первых 7 бит каждого символа. После этого система выбирает 12.битное число на базе системного времени. Этот элемент называется "крупинкой соли" или расширением. Расширение и пароль используются в качестве входных данных в функции шифрования паролей (см. рис. 12.6).

    (рис 12.6) Функция шифрования пароля UNIX

    Расширение используется для изменения одной из таблиц перестановки в алгоритме DES (перестановка E) любым из 4096 различных способов, в зависимости от числа единиц в двенадцати битах. Начальный открытый текст содержит 56 нулевых битов, а ключом являются 56 бит, полученных из пароля. Алгоритм выполняется 25 раз, причем входные данные каждого этапа являются выходом предыдущего этапа.

    Конечные выходные данные преобразуются в 11 символов, а расширение преобразуется в 2 символа и помещается перед конечными данными выхода.

    Главной уязвимостью этой системы является то, что она основана на выборе пароля. Так как большинство пользователей компьютеров используют пароли, состоящие из символов нижнего регистра, мы имеем общее число возможных комбинаций, равное 268. Это значительно больше, чем 255 возможных ключей DES, поэтому взлом такого шифра посредством "грубой силы" займет гораздо меньше времени и вычислительных ресурсов для раскрытия паролей в системе Unix.

    Примечание

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

    Расширенный стандарт шифрования Rijndael

    Взамен DES NIST анонсировал в 1997 г. появление алгоритма-конкурента стандарту DES с названием AES. В конце 2000 г. NIST объявили о том, что два криптографа из Бельгии (Joan Daemen и Vincent Rijmen) выиграли конкурс, представив алгоритм Rijndael. Этот алгоритм был выбран с учетом его мощности, применимости в высокоскоростных сетях, а также возможности аппаратной реализации.

    Rijndael представляет собой блочный шифр, использующий ключи и блоки длиной 128, 192 или 256 бит. На сегодняшний день такая длина ключей обеспечивает практическую неосуществимость атак с применением грубой силы. Алгоритм состоит из 10-14 циклов, в зависимости от размеров блока открытого текста и размера ключа. На рисунке 12.7 показано, какие вычисления производятся в каждом цикле.

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

    Другие алгоритмы шифрования с секретным ключом

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

  • IDEA (International Data Encryption Algorithm). Разработан в Швейцарии. В IDEA используется 128-битный ключ; кроме этого, IDEA также используется в Pretty Good Privacy (PGP).
  • RC5. Разработан Роном Ривестом в институте MIT. Этот алгоритм позволяет использовать ключи с переменной длиной.
  • Skipjack. Разработан правительством США для использования с Clipper Chip. В нем используется 80-битный ключ, что в ближайшем будущем, скорее всего, станет уже неприемлемым.
  • (рис 12.7) Схема работы цикла алгоритма Rijndael
  • Blowfish. Позволяет использовать переменные ключи длиной до 448 бит; алгоритм оптимизирован для работы на 32-битных процессорах.
  • Twofish. Использует 128-битные блоки, а также ключи длиной 128, 192 или 256 бит.
  • CAST-128. Использует 128-битный ключ. Применяется в новых версиях PGP.
  • Алгоритм ГОСТ (ГОСТ 28147-89). Российский стандарт шифрования, разработанный в ответ на DES. В нем используется ключ длиной 256 бит.
  • Любой из этих алгоритмов может использоваться в средствах обеспечения безопасности информации. Все эти алгоритмы, как правило, являются достаточно мощными для использования в общих целях.

    Внимание!

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

    Шифрование с открытым ключом

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

    В чем заключается шифрование с открытым ключом?

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

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

    (рис 12.8) Шифрование с открытым ключом

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

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

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

    Алгоритм обмена ключами Диффи-Хеллмана

    Уитфилд Диффи (Whitfield Diffie) и Мартин Хеллман (Martin Hellman) разработали свою систему шифрования с открытым ключом в 1976 г. Система Диффи-Хеллмана (Diffie-Hellman) разрабатывалась для решения проблемы распространения ключей при использовании систем шифрования с секретными ключами. Идея заключалась в том, чтобы применять безопасный метод согласования секретного ключа без передачи ключа каким-либо другим способом. Следовательно, необходимо было найти безопасный способ получения секретного ключа с помощью того же метода связи, для которого разрабатывалась защита. Алгоритм Диффи-Хеллмана нельзя использовать для шифрования или дешифрования информации.

    Алгоритм Диффи-Хеллмана работает следующим образом.

  • Предположим, что двум абонентам ( P1 и P2 ) требуется установить между собой безопасное соединение, для которого необходимо согласовать ключ шифрования.
  • P1 и P2 принимают к использованию два больших целых числа a и b, причем 1 < a < b.
  • P1 выбирает случайное число i и вычисляет I = ai mod b. P1 передает I абоненту P2.
  • P2 выбирает случайное число j и вычисляет J = aj mod b. P2 передает J абоненту P1.
  • P1 вычисляет k1 = Ji mod b.
  • P2 вычисляет k2 = Ij mod b.
  • Имеем k1 = k2 = ai*j mod b, следовательно, k1 и k2 являются секретными ключами, предназначенными для использования при передаче других данных.
  • Примечание

    В приведенных выше уравнениях "mod" означает остаток. Например, 12 mod 10 = 2. Два - это остаток от деления 12 на 10.

    Если злоумышленник прослушивает трафик, передаваемый по кабелю, то ему будут известны a, b, I и J. Тем не менее, остаются в секрете i и j. Уровень безопасности системы зависит от сложности нахождения i при известном I = ai mod b. Эта задача называется задачей дискретного логарифмирования и считается очень сложной (т. е. с помощью современного вычислительного оборудования ее решить практически невозможно), если числа очень велики. Следовательно, a и b необходимо выбирать очень тщательно. Например, оба числа b и (b - 1)/2 должны быть простыми и иметь длину не менее 512 бит. Рекомендуемая длина чисел составляет 1024 бит.

    Алгоритм обмена ключами Диффи-Хеллмана используется во многих системах безопасности для реализации обмена ключами, используемыми для дополнительного трафика. Недостатком системы Диффи-Хеллмана является то, что она может быть уязвима для атаки посредником (см. рис. 12.9). Если атакующий сумеет разместить свой компьютер между двумя абонентами P1 и P2, подключить его к каналу связи и осуществлять перехват всей передаваемой информации, то он сможет выполнять обмен данными с P2, выдавая себя за P1, и с P1 под видом P2. Таким образом, обмен ключами будет происходить между P1 и злоумышленником и между P2 и злоумышленником. Тем не менее, осуществление такой атаки требует большого объема ресурсов, и в реальном мире такие атаки происходят редко.

    (рис 12.9) Атака посредником на алгоритм Диффи-Хеллмана

    Алгоритм RSA

    В 1978 г. Рон Ривест, Ади Шамир и Лен Адельман разработали алгоритм шифрования Rivest-Shamir-Adleman (RSA) с открытым ключом. В отличие от алгоритма Диффи-Хеллмана RSA может использоваться для шифрования и дешифрования. Также, в отличие от алгоритма Диффи-Хеллмана, безопасность алгоритма RSA базируется на факторизации больших чисел. Задачу факторизации больших чисел принято считать очень сложной, если числа очень велики (1024 бит или больше).

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

    Шифрованный текст = (открытый текст)e mod n
    Открытый текст = (шифрованный текст)d mod n
    Секретный ключ = {d, n}
    Открытый ключ = {e, n}

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

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

    Шифрованный текст = (открытый текст)d mod n
    Открытый текст = (шифрованный текст)e mod n
    Секретный ключ = {d, n}
    Открытый ключ = {e, n}

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

    Генерация ключей RSA

    При генерировании ключей RSA необходимо соблюдать тщательность. Чтобы сгенерировать ключевую пару RSA, выполните следующие шаги:

  • Выберите два простых числа p и q и содержите их в секрете.
  • Вычислите n = pq.
  • Вычислите ф(n) = (p - 1)(q - 1).
  • Выберите такое e, чтобы оно было взаимно простым по отношению к ф(n).
  • Определите такое d, чтобы (d)(e) = 1 mod ф(n) и d < ф(n).
  • Примечание

    Число n должно содержать порядка 200 знаков или больше. Тогда оба числа p и q должны иметь длину, по крайней мере, 100 знаков. Ключи для использования на практике должны иметь длину 1024 бит. В случае с секретной информацией рекомендуется использовать ключи длиной 2048 бит и более.

    Реальный пример работы RSA

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

  • Сначала я выбрал два простых числа. В данном случае были выбраны числа p = 11 и q = 13.
  • Теперь вычисляем n = pq. Имеем n = 11 * 13 = 143.
  • Теперь нужно вычислить ф(n) = (p - 1)(q - 1) = (11 - 1)(13 - 1) = 10 * 12 = 120.
  • Выбираем число e так, чтобы оно было простым относительно ф(n). Здесь было выбрано значение e = 7.
  • Необходимо определить такое d, чтобы (d)(e) = 1 mod ф(n). Следовательно, (d)(7) = 1 mod 120 ; d должно также быть меньше 120. Находим, что d = 103. (103 умножаем на 7 и получается 721. 721 делим на 120 и получаем 6 с остатком 1.)
  • Секретный ключ: {103, 143}.
  • Открытый ключ: {7, 143}.
  • Для выполнения непосредственно шифрования и дешифрования используем исходные формулы.

    Шифрованный текст = (открытый текст)e mod n
    Открытый текст = (шифрованный текст)d mod n

    Предположим, что нужно отправить сообщение "9". С помощью формулы шифрования получаем следующее:

    Шифрованный текст = (9)7 mod 143 = 48.

    При получении зашифрованной информации она подвергается обработке алгоритмом дешифрования:

    Открытый текст = (48)103 mod 143 = 9.

    Другие алгоритмы с открытым ключом

    Существуют некоторые алгоритмы с открытым ключом, имеющие такие же свойства, как RSA и алгоритм Диффи-Хеллмана. В данном параграфе мы вкратце рассмотрим три наиболее распространенных алгоритма.

    Алгоритм Эль-Гамаля

    Эль-Гамаль (Taher Elgamal) разработал вариант системы Диффи-Хеллмана. Он усовершенствовал алгоритм Диффи-Хеллмана и получил один алгоритм для шифрования и один для обеспечения аутентификации. Алгоритм Эль-Гамаля не был запатентован (в отличие от RSA) и, таким образом, стал более дешевой альтернативой, так как не требовалась уплата лицензионных взносов. Так как этот алгоритм базировался на системе Диффи-Хеллмана, безопасность информации при его использовании обеспечивается сложностью решения задачи дискретного логарифмирования.

    Алгоритм цифровой подписи

    Алгоритм Digital Signature Algorithm (DSA) был разработан правительством США как стандартный алгоритм для цифровых подписей (для получения дополнительной информации по цифровым подписям обратитесь к следующему параграфу). Данный алгоритм базируется на системе Эль-Гамаля, но позволяет осуществлять только аутентификацию. Конфиденциальность этим алгоритмом не обеспечивается.

    Шифрование с использованием эллиптических кривых

    Эллиптические кривые были предложены для использования в системах шифрования в 1985 г. Системы шифрования с использованием эллиптических кривых (ECC) базируются на другой сложной математической задаче, нежели факторизация или дискретное логарифмирование. Данная задача заключается в следующем: имея две точки A и B на эллиптической кривой, такие что A = kB, очень трудно определить целое число k. Существует ряд преимуществ использования ECC перед алгоритмом RSA или Диффи-Хеллмана. Самым большим преимуществом является то, что ключи имеют меньшую длину (по причине сложности задачи), в результате чего вычисления производятся быстрее с сохранением уровня безопасности. Например, безопасность, обеспечиваемая 1024-битным ключом RSA может быть обеспечена 160-битным ключом ECC. Может пройти немало времени, прежде чем ECC будут полностью приняты к использованию, так как в этой области еще необходимо провести ряд исследований, и на существующие ECC зарегистрировано несколько патентов.

    Вопросы для самопроверки

  • Открытый текст преобразуется в ____________ в процессе шифрования.
  • К какому типу систем шифрования относится DES?
  • Цифровые подписи

    Цифровые подписи - это не цифровые изображения рукописных подписей. Цифровые подписи - это форма шифрования, обеспечивающая аутентификацию. Популярность цифровых подписей постоянно растет, и они были разрекламированы как способ перехода на полностью электронную информационную среду. Президент США Билл Клинтон даже издал закон об использовании цифровых подписей как легальных подписей. Но даже несмотря на это, цифровые подписи вводят многих людей в недоумение.

    Что такое цифровая подпись?

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

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

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

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

    Безопасность и полезность цифровых подписей зависит от двух важнейших элементов:

  • Защита секретного ключа пользователя.
  • Безопасная хеш-функция.
  • Примечание

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

    (рис 12.10) Функционирование цифровых подписей

    Безопасные хеш-функции

    Для использования цифровых подписей необходимы безопасные хеш-функции. Хеш-функция может называться безопасной, если:

  • функция является односторонней. Иными словами, функция создает контрольную сумму из информации с невозможностью восстановления информации по контрольной сумме;
  • крайне сложно сконструировать два фрагмента информации с получением одинаковой контрольной суммы при выполнении функции.
  • Второму условию не так-то просто удовлетворить. Рассматриваемые контрольные суммы должны быть меньше по размеру, нежели информация, для обеспечения простоты подписывания, хранения и передачи информации. Если это условие удовлетворяется, то одной и той же контрольной сумме должно соответствовать большое число различных фрагментов информации. Безопасность функций обеспечивается способом связи всех битов в исходных данных со всеми битами контрольной суммы. Таким образом, если один бит информации изменяется, то также изменяется большое количество битов в контрольной сумме.

    Безопасные хеш-функции должны обеспечивать создание контрольной суммы длиной, по крайней мере, в 128 бит. Двумя наиболее распространенными безопасными хеш-функциями являются MD5, генерирующая 128-битную контрольную сумму, и SHA, которая производит контрольную сумму длиной 160 бит. Существует множество других хеш-функций, однако большая их часть признана небезопасными. В MD5 были обнаружены уязвимости, которые могут использоваться при проведении вычислительной атаки. Эта атака позволит создать дополнительный фрагмент информации, что приведет к образованию той же контрольной суммы. Функция SHA была разработана правительством США и в настоящее время считается безопасной. В большей части программного обеспечения по информационной безопасности рассмотренные функции MD5 и SHA доступны для использования.

    Управление ключами

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

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

    Создание ключей

    Очевидно, что ключи должны создаваться с особой тщательностью. Некоторые ключи обеспечивают недостаточную производительность при работе с определенными алгоритмами. Например, ключ, состоящий из одних "нулей", при использовании в DES не обеспечивает высокий уровень защищенности информации. Аналогично, при создании ключей для использования в RSA, необходимо соблюдать внимательность при выборе p и q из набора простых чисел.

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

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

    Также может быть необходимым выбрать правильную длину ключа. В некоторых алгоритмах используются ключи фиксированной длины (например, в алгоритме DES используется ключ длиной 56 бит). Другие алгоритмы могут использовать ключи переменной длины. Чем длиннее ключ, тем выше уровень обеспечиваемой безопасности. Например, 1024-битный ключ RSA более надежен, чем 512.битный ключ RSA. Тем не менее, таким образом нельзя сопоставлять надежность ключа RSA с надежностью ключа DES. В таблице 12.2 представлены относительные степени надежности ключей для различных алгоритмов шифрования.

    Чтобы получить представление о том, насколько надежны ключи на практике, вспомните машину EFF. В 1997 г. она стоила 250 000 долларов и обеспечивала раскрытие ключа DES за 4,5 дня. В других случаях 40-битный ключ RC5 был раскрыт с помощью атаки "грубой силы" за 3,5 часа с использованием 250 компьютеров в UC Berkley. В Швейцарском Федеральном институте технологий посредством "грубой силы" раскрыт 48-битный ключ RC5 за 312 часов с использованием 3500 компьютеров. На данный момент рекомендуется использовать, как минимум, 80-битные ключи при шифровании секретной информации, а также минимум 1024-битные ключи в RSA и алгоритме Диффи-Хеллмана. 160-битные ключи ECC также считаются безопасными.

    Внимание!

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

    Распространение ключей

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

    Относительная надежность ключей различной длины
    Шифрование с секретным ключом(DES, RC5)Шифрование с открытым ключом(RSA, Диффи-Хеллман)Шифрование посредством эллиптических кривых
    40 бит - -
    56 бит 400 бит -
    64 бит 512 бит -
    80 бит 768 бит -
    90 бит 1024 бит 160 бит
    120 бит 2048 бит 210 бит
    128 бит 2304 бит 256 бит

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

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

    Любой ключ, используемый в течение продолжительного периода времени, требует обеспечения основательных мер предосторожности. Нельзя использовать алгоритм обмена ключами Диффи-Хеллмана для передачи пар ключей RSA. В случае с парами ключей RSA один ключ должен содержаться в секрете, а другой может находиться в открытом состоянии. Открытый ключ должен публиковаться так, чтобы предотвратить его подмену (см. раздел ниже "Сертификация ключей"). Если пары ключей генерируются центральным бюро сертификатов, секретный ключ должен безопасно передаваться владельцу ключевой пары. Если пара ключей генерируется владельцем, открытый ключ должен передаваться в центральное бюро сертификатов с обеспечением мер безопасности.

    Примечание

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

    Сертификация ключей

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

    Открытые ключи предназначены для публикации или передачи другим пользователям и должны сертифицироваться как принадлежащие владельцу ключевой пары. Сертификация осуществляется с помощью центрального бюро сертификатов (CA). В данном случае CA предоставляет цифровую подпись на открытом ключе, и благодаря этому CA с доверием воспринимает тот факт, что открытый ключ принадлежит владельцу ключевой пары (см. рис. 12.11).

    Внимание!

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

    (рис 12.11) Сертификация открытого ключа в бюро сертификатов

    Защита ключей

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

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

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

    Аннулирование ключей

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

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

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

    Доверие в информационной системе

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

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

    Иерархия

    Иерархическая модель доверия наиболее проста для восприятия. Говоря простым языком, в данном случае вы доверяете человеку, который находится выше в иерархической цепи, так как от него было получено соответствующее указание о необходимости доверия. На рисунке 12.12 изображена схема этой модели. Как видно из рисунка, пользователи User1 и User2 располагаются под CA1. Следовательно, если CA1 говорит, что сертификат открытого ключа принадлежит пользователю User1, пользователь User2 будет верить этому. На практике User2 передает пользователю User1 свой сертификат открытого ключа, подписанный CA1. Пользователь User1 проверяет подпись CA1 с использованием открытого ключа CA1. Так как CA1 находится в иерархии выше, чем User1, то User1 доверяет CA1 и, следовательно, доверяет сертификату пользователя User2.

    (рис 12.12) Иерархическая модель доверия

    Мы рассмотрели довольно простой случай. Если пользователю User1 нужно проверить информацию от пользователя User3, все несколько усложняется. CA1 не знает о пользователе User3, в отличие от CA2. Тем не менее, пользователь User1 не доверяет CA2, так как это бюро сертификатов напрямую не принадлежит цепочке пользователя User1. Следующий уровень вверх по цепочке - CA4. Пользователь User1 может верифицировать информацию от пользователя User3 посредством проверки с помощью CA4 следующим образом.

  • Пользователь User1 смотрит на сертификат пользователя User3. Он подписан в CA2.
  • Пользователь User1 получает сертификат пользователя CA2. Он подписан в CA4.
  • Так как пользователь User1 доверяет CA4, открытый ключ CA4 может использоваться для верификации сертификата CA2.
  • Как только сертификат CA2 верифицирован, пользователь User1 может верифицировать сертификат пользователя User3.
  • Как только будет верифицирован сертификат пользователя User3, пользователь User1 может использовать открытый ключ пользователя User3 для верификации данных.
  • Как видите, все довольно быстро усложняется. Представьте себе, какой объем операций по верификации необходимо было бы производить, если бы пользователю User1 нужно было верифицировать данные, поступившие от пользователя User4. Две цепочки не пересекаются вплоть до CA9! Так реализована сертификация в X.509. Иерархия устанавливается таким образом, чтобы между любыми двумя нижними объектами могла быть создана цепочка сертификатов.

    С теоретической точки зрения все выглядит неплохо. Однако на практике все иначе. Одной из причин, по которой данная технология не функционировала, заключается в том, что не существовало реальных CA корневого уровня. CA корневого уровня - это наивысшая точка в иерархии. В одно время было принято считать, что в каждой стране должно быть свое бюро сертификатов корневого уровня. Также предполагалось, что компании, выпускающие кредитные карты, должны стать корневыми CA, или что каждая организация должна иметь свое собственное CA. На практике почти ничего не было реализовано. Возникал еще один вопрос, который представлял собой потенциальную проблему: сколько CA должны сертифицировать каждого конечного пользователя? Если конечный пользователь живет в стране А, обладает кредитной картой компании B и работает в организации C, должны ли все три объекта подписывать один и тот же сертификат?

    Установка CA

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

  • Должна быть создана пара открытого ключа CA. Ключ должен быть достаточно большим, чтобы обеспечивать безопасность на большой период времени (как правило, больше чем на два года).
  • Открытый ключ CA должен быть сертифицирован самим CA и, возможно, другим бюро сертификатов, расположенном на более высоком уровне иерархической модели. Если сертификат предоставляется внешней организацией, то это будет стоить определенную сумму денег.
  • Секретный ключ CA должен быть защищен на весь период своего существования. Если он когда-нибудь будет раскрыт, может понадобиться перестройка всей инфраструктуры.
  • Необходимо создать соответствующие политики и процедуры для аутентификации и подписывания сертификатов нижнего уровня.
  • Необходимо реализовать механизм, позволяющий объектам нижних уровней верифицировать сертификаты друг друга. Это означает, что сертификат CA должен быть доступен каждому объекту нижнего уровня. В некоторых случаях это означает непосредственное взаимодействие с CA. В такой структуре необходимо, чтобы CA было доступно в течение всего периода времени, либо это бюро сертификатов вызовет ошибки в работе всей системы.
  • Вопрос к эксперту

    Вопрос. Существуют ли CA общего пользования?

    ) и Thawte (http://www.thawte.com/) являются наиболее яркими примерами таких CA. Организация может создать пару открытого ключа, например для веб-сервера, и отправить открытый ключ в CA. CA создает сертификат и предоставляет его организации. CA получает прибыль от предоставления этой услуги. Использование таких сертификатов можно наблюдать при посещении многих защищенных сайтов в интернете. Так как открытые ключи CA известны большей части веб-браузеров, сертификат веб-сайта верифицируется с помощью открытого ключа CA.

    Примечание

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

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

    Аннулирование сертификатов

    Аннулирование сертификатов может оказаться самой трудной проблемой, связанной с CA. Как уже упоминалось ранее, каждый объект, который использует сертификат, должен уведомляться об аннулировании сертификата. Это уведомление должно осуществляться своевременно. Так как природа системы с открытым ключом не позволяет CA знать о каждом пользователе, который может использовать данный сертификат, CA должно полагаться на тех, кто будет использовать сертификат, для проверки того, что сертификат не был аннулирован. При этом потребуется, чтобы каждый объект проверял CA перед использованием сертификата.

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

    Сеть

    Сеть с доверием представляет собой альтернативную модель доверия. Эта концепция была впервые использована в технологии Pretty Good Privacy (PGP). Она заключается в том, что каждый пользователь сертифицирует свой сертификат и передает его известным ассоциированным объектам. Эти объекты могут подписать сертификат другого пользователя, так как он известен (см. рис. 12.13).

    В данной модели не существует центрального бюро сертификатов. Если пользователю User1 требуется верифицировать информацию, поступающую от пользователя User2, он запрашивает сертификат пользователя User2. Так как пользователь User1 знает пользователя User2, то доверяет сертификату и даже может его подписать.

    Теперь рассмотрим ситуацию, в которой User1 получает информацию от User3. Пользователь User3 не известен пользователю User1, но у пользователя User3 есть сертификат, подписанный пользователем User2. Таким образом, рассматриваемая модель распространяется на всю компьютерную сеть. Единственным решением, которое должно приниматься в процессе работы, является число переходов, которому доверяет пользователь. Как правило, это число равно 3 или 4. Кроме того, может возникнуть ситуация, в которой для установления доверия другому пользователю есть два пути. Например, User2 может использовать два пути установления доверия с пользователем User5: один через пользователя User3 и другой через пользователя User4. Так как оба пользователя User3 и User4 сертифицируют пользователя User5, пользователь User2 может быть уверен в сертификате пользователя User5.

    (рис 12.13) Сеть модели доверия

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

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

    Разработка системы шифрования

    Этот проект предназначен для того, чтобы продемонстрировать использование шифрования в информационной системе для обеспечения аутентификации, конфиденциальности и целостности. В данном проекте подразумевается применение как систем шифрования с секретным ключом (AES), так и систем с открытым ключом (RSA или Диффи-Хеллмана).

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

    Шаг за шагом

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

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

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

    Контрольные вопросы

  • На секретности какого элемента основана защита информации надежными алгоритмами шифрования?
  • Каковы три вида атак на схему шифрования?
  • Как иначе называется шифрование с секретным ключом?
  • Приведите пример раннего подстановочного шифра.
  • Может ли быть взломан правильно реализованный "одноразовый блокнот"?
  • Какую длину имеют ключи DES?
  • В чем заключается основной недостаток DES?
  • За счет чего тройной DES повышает уровень безопасности алгоритма DES?
  • Для чего предназначен алгоритм AES?
  • На сложности какой задачи базируется безопасность, обеспечиваемая алгоритмом Диффи-Хеллмана?
  • Можно ли использовать алгоритм Диффи-Хеллмана для шифрования трафика?
  • Назовите основную атаку, которой подвержен алгоритм Диффи-Хеллмана (с правильно выбранными a и b).
  • Что такое цифровая подпись?
  • Почему открытые ключи должны быть сертифицированными?
  • В чем заключается проблема, связанная с управлением ключами, которая вызывает сбои в большей части систем PKI?
  • Вернуться к учебному плану