Главная > Разное > Введение в криптографию
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

4. Поучимся на чужих ошибках

Удобно, красиво, но ...

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

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

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

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

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

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

Очевидно, что если не зашифровывать текст, то сама идея использовать пароль была бы бесполезной. Любой пользователь сначала мог бы «вытащить руками» из файла большую часть текста, а потом перенести его в Word. В то же время, выбранная в Microsoft Word схема шифрования информации остановит только начинающего хакера [4]. Рассмотрим ее подробнее.

Из пароля пользователя Word вырабатывает массив длиной 16 байт, который назовем гаммой (gamma [0. .15]). Далее, каждый байт открытого текста (plain_text [i]) последовательно складывается побитно (XOR) с байтом гаммы, в результате получаются знаки шифрованного текста

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

где mod 16 - операция получения остатка от целочисленного деления на 16.

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

Заметим, что самый частый символ в документе Word - это пробел (его значение в кодировке ASCII есть 0x20). В этом легко убедиться, просматривая документ в шестнадцатиричном формате. Следовательно, самым частым символам в таблице частот соответствуют зашифрованные пробелы, и, складывая побитно значения этих символов с 0x20, мы получим все 16 знаков гаммы. Далее, зная гамму, расшифровываем весь текст. Не правда ли, просто!

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

Теперь посмотрим, как защищаются пароли пользователя в операционных системах (ОС) Microsoft Windows 95 первых версий (до OSR 2).

Большинство современных сетевых ОС являются многопользовательскими, это и Novell NetWare, и Microsoft Windows NT, и т. д. Для разграничения доступа пользователей к своим ресурсам эти ОС требуют от последних доказать свою подлинность. Делается это с помощью пароля, который известен и ОС, и пользователю. Ясно, насколько важно системе для обеспечения ее безопасности надежно и недоступно для постороннего доступа хранить информацию о паролях пользователей.

ОС Microsoft Windows 95 не является многопользовательской и не предоставляет возможность пользователям разделять свои ресурсы. Тем не менее, для удобства работы она запрашивает у пользователя при входе в систему его имя и пароль. Но если он ничего не ответит (нажмет кнопку «Cancel»), ОС все равно разрешит ему работать дальше. Для чего же тогда запрашивается пароль?

Дело в том, что ПК может работать в локальной вычислительной сети (ЛВС), где ему доступны ресурсы или серверы, для обращения к которым требуются пароли, причем, возможно, различные. Чтобы пользователю не нужно было их все запоминать, ОС Microsoft Windows 95 запоминает пароли для доступа к ресурсам ЛВС в специальном файле с именем . В этом файле данные шифруются на том самом пароле, который система запрашивает у пользователя при его входе в систему. Если пароль введен правильно, то в дальнейшем ОС сама подставляет соответствующий пароль при запросе пользователя на доступ к ресурсам или серверам ЛВС.

Данные в .pwl файлах шифруются следующим образом [5]. Из пароля пользователя по алгоритму шифрования RC4 вырабатывается гамма. Каждый пароль на доступ к соответствующему ресурсу вместе с некоторой служебной информацией суммируется побитно с полученной гаммой. То есть каждый раз при шифровании используется одна и та же гамма. Если учесть, что .pwl файл содержит зашифрованную запись, начинающуюся с имени пользователя, дополненного до 20 символов пробелами, то задача вскрытия пароля становится элементарной. Получив первые 20 знаков гаммы, мы можем прочитать любой сохраненный в файле пароль (учитывая то обстоятельство, что редко когда используются пароли длиной более 10 символов).

Следует отметить, что сам по себе алгоритм RC4 довольно сложный, и в данном случае использовались слабости не самого алгоритма,

а схемы его применения, а именно многократное использование одной гаммы.

Сколько дырок в вычислительных сетях?

При современном уровне развития компьютерных и информационных технологий даже обычный домашний ПК уже не мыслится отдельно от всего компьютерного киберпространства. Проникновение вычислительных сетей всюду, где есть компьютеры, стремление самих пользователей объединяться вынесло на передний план лозунг компании Sun Microsystem «Сеть — это компьютер». Разработчики современного программного обеспечения также стали ориентироваться на использование сетевых технологий и обеспечение пользователей удобными средствами для работы с распределенными ресурсами и удаленными источниками информации.

Многие из вас пользовались ресурсами глобальной сети Internet, кто-то имел возможность работать в локальных вычислительных сетях (ЛВС). Наверное, при этом вы задавали себе вопросы:

- как защищается информация, передаваемая по открытым каналам связи;

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

- можно ли вмешаться в протокол взаимодействия компьютеров;

- как защитить свои данные при их передаче по каналам локальных или глобальных сетей.

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

Во-первых, как защищается информация, передаваемая по каналам ЛВС и в глобальных сетях? Для большинства распространенных сетевых ОС можно ответить — никак!

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

Такой программой является широко распространенный программный пакет LANalyzer for Windows фирмы Novell. Для его использования не требуется каких-то специальных навыков работы в ЛВС. Для начала перехвата информации достаточно нажать кнопку «Start», а для просмотра пойманных пакетов кнопку «View». Дополнительные

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

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

Например, пусть копируется файл help.txt с содержанием:

(см. скан)

Этот файл может выглядеть при передаче по каналам ЛВС так (пакет декодирован программой LANalyzer):

(см. скан)

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

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

В начале 90-х годов широко использовалась сетевая ОС Novell NetWare ver 3.11. Пользуясь слабостью реализованных в этой системе сетевых протоколов, злоумышленник с помощью специальной программы, подменяющей сетевые адреса, мог выдать свой компьютер за компьютер, на котором работает другой пользователь, в том числе Супервизор [2]. После чего мог давать системе любые запросы на использование ее ресурсов, заводить новых пользователей, устанавливать их права доступа. Данный способ подмены сетевых адресов получил название «Голландская атака» и широко описан в литературе.

Более того, при работе с Novell NetWare ver 3.11, пользуясь описанными выше слабостями, можно было создавать в ЛВС ложные серверы (компьютеры, где находится информация о пользователях и основные ресурсы сети) и направлять запросы других пользователей через свой компьютер.

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

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

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

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

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

Разберем это на примере сетевой ОС Novell NetWare ver 3.11.

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

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

Шаг 1. Пользователь рабочей станции в ответ на запрос системы вводит свое имя и пароль.

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

Шаг 3. Рабочая станция запрашивает у сервера разовый ключ (случайный массив данных, используемый однократно, для одного входа пользователя в систему).

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

Шаг 5. Сервер осуществляет проверку билета и направляет рабочей станции сообщение о ее результате. Если проверка прошла успешно, то пользователь получает разрешение на доступ в систему.

При реализации данного протокола решался ряд задач по обеспечению его безопасности, а именно:

- сделать максимально трудным подбор пароля пользователя злоумышленником, перехватившим в ЛВС разовый ключ и билет;

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

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

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

Алгоритм перерабатывает массив данных длиной 32 байта, его схема приведена ниже (см. рис. 1). На ней:

Array - массив данных из 32 элементов (байтов), после каждого шага работы схемы заполнение массива сдвигается на один элемент влево, а в записывается результат побитного сложения;

Tab - фиксированная таблица из 32 элементов (байтов), после каждого шага работы схемы заполнение таблицы циклически сдвигается на один элемент влево;

Elem - один элемент памяти (байт);

XOR - операция побитного сложения байтов;

+ и - операции сложения и вычитания, соответственно, байтов по модулю 256;

(mod 32) - операция получения остатка от деления на 32, результат этой операции используется как индекс для выборки элемента массива Array.

Рис. 1. Схема криптографического преобразования, используемого ОС Novell NetWare.

Схема работает 64 такта.

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

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

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

Здесь может быть предложено два основных подхода по организации системы шифрования:

- предварительное шифрование информации перед передачей ее по сети;

- прозрачное шифрование пакетов сетевого информационного обмена.

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

Так работают пользователи программы Pretty Good Private (PGP), разработанной Филиппом Зиммерманом в начале 90-х годов и широко распространенной во всем мире. PGP позволяет вырабатывать индивидуальные ключи пользователей, безопасно ими обмениваться и шифровать данные. В нем реализованы алгоритм блочного шифрования IDEA и схема открытого распределения ключей RSA.

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

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

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

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

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

В глобальных сетях дела с этим обстоят значительно лучше. Уже достаточно давно получили широкое распространение программные продукты, предоставляющие пользователям возможность прозрачного шифрования данных, передаваемых по сети. Например, Netscape Navigator, занимающий 75% рынка программ, предназначенных для работы с World Wide Web (WWW) сети Internet и проведения через Internet расчетов по кредитным карточкам, включает в себя криптографическую подсистему.

Netscape используют миллионы людей по всему миру, тем не менее, в этой программе были найдены существенные «дыры». Ранние версии Netscape содержали изъяны в двух основных элементах криптографической подсистемы [5]:

- собственно в самом алгоритме шифрования;

- алгоритме генерации ключей.

Первый изъян состоял в том, что для шифрования данных сетевого информационного обмена в программе Netscape в варианте, предназначенном для экспорта из США (а именно им большинство и пользуется), реализован алгоритм гаммирования RC4 [6] с ключом 40 битп! Возможности современной вычислительной техники таковы, что ключ такой длины можно определить простым перебором в течении нескольких дней. Какое-то время среди пользователей сети Internet даже развернулось нечто вроде соревнования — кто быстрее сможет найти ключ.

В июле 1994 года ключ шифрования был восстановлен за 8 дней с использованием объединенных вычислительных ресурсов 120 рабочих станций и двух параллельных суперкомпьютеров.

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

В декабре 1995 года один суперкомпьютер подобрал ключ за 7 дней.

Вторая «дыра» в системе защиты была выявлена у программы Netscape (версия 1.2) двумя студентами Калифорнийского университета в сентябре 1995 года. Суть ее в том, что были обнаружены существенные слабости в алгоритме генерации ключей шифрования. Ключ

должен являться случайным числом. В Netscape для его вычисления был реализован алгоритм генерации «случайных» чисел, основанный на показании внутреннего таймера и значениях сетевых адресов. В результате анализа ими был предложен алгоритм подбора ключа в течение всего одной минуты, а программа, реализующая данный алгоритм, была опубликована в Internet.

<< Предыдущий параграф Следующий параграф >>
Оглавление