Моя визитка
Урок 1. Хакинг
Урок 2. Антихакинг
Урок 3. Инструменты хакинга
Урок 4. Защита Windows 2000/XP
Урок 5. Проникновение в систему
Урок 6. Реализация цели вторжения
Урок 7. Сокрытие следов
Урок 8. Хакинг браузеров Web
Урок 9. Хакинг почтовых клиентов
Урок 10. Деструкция почтового клиента
Урок 11. Хакинг Web-сайтов
Урок 12. Атаки DoS
Урок 13. Хакинг компьютеров Windows 2000/XP
Урок 14. Хакинг средств удаленного управления
Урок 15. Хакинг брандмауэров
Урок 16. Перехват сетевых данных
Урок 17. Хакинг коммутируемого доступа
Приложение А
Приложение В
Приложение С
Приложение D
Приложение E

ПРИЛОЖЕНИЕ Е

Основные понятия и термины криптографии
Цифровые подписи
Управление ключами
Шифрующая файловая система Windows 2000

Криптография

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

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

Обсудим некоторые основные концепции, лежащие в основе современных криптосистем.

Основные понятия и термины криптографии

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

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

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

Е(О)=С

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

D(C)=0

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

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

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

• Целостность. Получатель сообщения должен иметь возможность проверить, не было ли сообщение искажено в процессе доставки, а злоумышленник - не способен выдать ложное сообщение за подлинное.

• Неотрицание авторства. Отправитель сообщения впоследствии не должен иметь возможности ложно отрицать авторство посланного сообщения.

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

Алгоритмы и ключи

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

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

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

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

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

Еk(0)=С

Dk(C)=0

Ключи шифрования и дешифрирования в некоторых алгоритмах не совпадают, т.е. ключ шифрования (K1) отличается от парного ему ключа дешифрирования (К2). В таком случае операции шифрования и дешифрования записываются таким образом.

Еk1(0)=С

Dk2(C)=0

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

Криптографические алгоритмы с ключами подразделяются на два типа: симметричные алгоритмы и алгоритмы с открытым ключом.

Симметричные алгоритмы

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

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

ЕК(0)=С

DK(C)=0

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

Алгоритмы с открытым ключом

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

ЕК(0)=С

DК(С)=0

При использовании алгоритмов с открытым ключом, в отличие от симметричных алгоритмов, не возникает проблемы передачи ключа. Однако имеются и недостатки - медленная, по сравнению с симметричными алгоритмами, скорость работы и уязвимость к взлому методом избранного текста. Вот как это делается. Пусть у криптоаналитика имеется сообщение С, шифрованное открытым ключом к. Тогда, пользуясь открытым ключом к, он может последовательно шифровать открытые тексты С'=ЕК(О) из множества N всех возможных открытых текстов O, сравнивая при этом результаты C' с шифротекстом С до тех пор, пока не найдет совпадения, т.е. C'=С. Он не сможет таким путем восстановить закрытый ключ, но сумеет прочесть C - это будет открытый текст О, соответствующий найденному шифротексту C'. Если размер множества N невелик, это вполне реально.

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

Криптоаналитические методы вскрытия

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

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

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

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

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

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

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

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

Бандитский криптоанализ. Эти средства «криптоанализа» заключаются в получении ключа путем угроз, шантажа, пыток, подкупа и тому подобного. В этой книге такие «методы» не обсуждаются.

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

• По объему исходных данных, необходимых для вскрытия.

• По количеству процессорного времени, необходимого для вскрытия.

• По объему памяти компьютера, необходимой для вскрытия.

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

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

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

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

Криптографические протоколы

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

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

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

Симметричные kpunmocucmемы

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

1. Переговорщик-1 и Переговорщик-2 выбирают алгоритм шифрования сообщений.

2. Переговорщик-1 и Переговорщик-2 выбирают ключ шифрования.

3. Переговорщик-1 шифрует открытый текст сообщения выбранным ключом и создает шифротекст сообщения.

4. Переговорщик-1 посылает шифротекст сообщения Переговорщику-2.

5. Переговорщик-2 дешифрирует шифротекст сообщения выбранным ключом и получает открытый текст сообщения.

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

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

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

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

Подводя итоги, перечислим недостатки симметричных криптосистем:

• Пользователи симметричных криптосистем испытывают большие затруднения при обмене ключами.

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

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

Криптосистемы с открытыми ключами

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

1. Переговорщик-1 и Переговорщик-2 договариваются об использовании криптосистемы с открытыми ключами.

2. Переговорщик-1 посылает Переговорщику-2 свой открытый ключ.

3. Переговорщик-2 шифрует сообщение открытым ключом Переговорщика-1 и отсылает шифротекст Переговорщику-1.

4. Переговорщик-1 своим закрытым ключом расшифровывает сообщение от Переговорщика-2.

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

1. Переговорщик-1 извлекает открытый ключ Переговорщика-2 из базы данных открытых ключей.

2. Переговорщик-1 шифрует свое сообщение, используя открытый ключ Переговорщика-2, и посылает шифротекст сообщения Переговорщику-2.

3. Переговорщик-2 с помощью своего закрытого ключа расшифровывает сообщение Переговорщика-1.

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

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

Гибридные кpuптосистемы

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

1. Переговорщик-2 посылает Переговорщику-1 свой открытый ключ.

2. Переговорщик-1 генерирует случайный сеансовый ключ, шифрует его с помощью открытого ключа Переговорщика-2 и посылает его Переговорщику-2. Формально это записывается таким образом.

Е2(К)

3. Используя свой закрытый ключ, Переговорщик-2 расшифровывает сообщение Переговорщика-1 и получает сеансовый ключ.

D2(E2(K))=K

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

5. По завершении переговоров сеансовый ключ уничтожается.

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

Цифровые подписи

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

1. Переговорщик-1 шифрует ключом K1 сообщение для Переговорщика-2 и посылает его Посреднику.

2. Посредник расшифровывает сообщение с помощью ключа К1.

3. Посредник добавляет в расшифрованное сообщение заявление, подтверждающее авторство Переговорщика-1, и шифрует новое сообщение ключом К2.

4. Посредник отсылает зашифрованное сообщение Переговорщику-2.

5. Переговорщик-2 расшифровывает сообщение ключом К2 и знакомится с сообщением Переговорщика-1 вместе с подтверждением его авторства.

Авторство Переговорщика-1 устанавливается на том основании, что только Посредник и Переговорщик-1 знают секретный ключ К2. Таким образом, роль подписи в таком протоколе играет заявление Посредника об авторстве сообщения, пересылаемое вместе с текстом сообщения. Описанный способ аутентификации обладает всеми атрибутами подписи на бумаге, а именно:

• Достоверностью, поскольку подтверждение Посредника служит доказательством авторства любого переговорщика.

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

• Неповторимостью. Если, допустим, Переговорщик-2 попытается добавить полученное подтверждение Посредника самостоятельно (т.е. повторно использовать подпись Посредника), он не сможет это сделать, поскольку не знает нужного секретного ключа.

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

• Неотрицаемостью. Если впоследствии Переговорщик-1 станет отрицать авторство сообщения, Посредник сможет доказать иное, поскольку хранит исходное сообщение.

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

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

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

Однонаправленные хэш-функции

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

Особой разновидностью однонаправленных функций являются однонаправленные функции с тайной лазейкой. Такие функции, кроме однонаправленности, обладают дополнительным свойством - знание некой информации об этой функции делает подсчет обратной функции сравнительно нетрудным. Более формально, для однонаправленных функций с лазейкой нетрудно вычислить F(x) по заданному значению аргумента х, но по известному значению F(x) трудно вычислить аргумент х, если не знать некую секретную информацию z. Однонаправленные функции с тайной лазейкой служат математической основой для криптографии с открытым ключом.

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

h=H(M)

где значение h, называемое хэшем, или необратимым хэшем, имеет разрядность m

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

• Зная М, легко вычислить h.

• Зная h, трудно определить значение М, для которого Н(М)=h.

• Зная M, трудно определить другое сообщение, M', для которого H(М)=H(М').

Вот что это означает. Пусть Переговорщик-1 вычислил дайджест H(М) своего сообщения м и зашифровал дайджест своим закрытым ключом. Может ли полученное значение служить в качестве цифровой подписи? Если Взломщик, располагая достаточными ресурсами, сможет создать другое сообщение M', отличное от M, но с одинаковым дайджестом, т.е. H(M)=H(M'), то цифровая подпись будет скомпрометирована.

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

Цифровые подписи

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

SK(M)

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

VK(M)

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

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

1. Переговорщик-1 подписывает сообщение своим закрытым ключом.

S1(M)

2. Переговорщик-1 шифрует подписанное сообщение открытым ключом Переговорщика-2 и отправляет его Переговорщику-2.

E2(S1(M))

3. Переговорщик-2 расшифровывает сообщение своим закрытым ключом.

D2(E2(S1(M))) = S1(M)

4. Переговорщик-2 проверяет подлинность подписи, используя открытый ключ Переговорщика-1, и восстанавливает сообщение.

V1(S1(W)=M

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

Возможности, открываемые при использовании криптосистем с открытыми ключами, воистину безграничны. С развитием таких криптосистем появились реальные возможности для сетевой идентификации пользователей и придания цифровым подписям юридического статуса (в России соответствующий закон был подписан Президентом в начале 2002 года). Однако для обеспечения этих возможностей одного только надежного алгоритма создания цифровой подписи недостаточно. Их реализация требует создания надежной инфраструктуры управления ключами (PKI - Public Key Infrastructure).

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

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

Допустим, Переговорщик-1 запрашивает базу данных открытых ключей и получает открытый ключ Переговорщика-2. Но что если перед этим Взломщик сумел подменить ключ Переговорщика-2 собственным ключом? Это можно сделать либо взломом защиты базы данных на сервере ключей, либо перехватом ключа, передаваемого по сети. После перехвата ключа Взломщик подменивает открытый ключ Переговорщика-2 своим открытым ключом и далее может получать от Переговорщика-1 сообщения, шифрованные ключом Взломщика. Прочитав это сообщение, Взломщик создает собственное сообщение, шифрует его открытым ключом Переговорщика-2 и отсылает ему сообщение. Оба переговорщика будут уверены, что общаются друг с другом, но на самом деле общаются со Взломщиком.

Для предотвращения такого мошенничества применяется сертификация ключей.

Сертификаты открытых ключей

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

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

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

• Определить уровень доверия к каждому бюро СА.

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

• Ограничить длину цепочки выдачи сертификатов.

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

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

Операционная система Windows 2000 версий Server и Advanced Server обеспечивает средства организации инфраструктуры PKI для корпоративных сетей. Это большое достижение, поскольку в прошлом операционные системы Windows NT поддерживали устаревшие версии сервера сертификации и фактически могли использовать сертификаты только в браузерах Интернета для проверки подлинности посещаемых Web-узлов. Система Windows 2000 Professional также позволяет использовать сертификаты, основанные на технологиях Web, и вдобавок поставляется с набором средств для управления всеми общедоступными сертификатами.

Операционная система Windows 2000 Professional поддерживает сертификаты X.509v3 (версия 3), рекомендованные организацией ITU-T (International Telecommunications Union - Международный телекоммуникационный союз) в качестве стандарта. Сертификаты X.509v3 содержат сведения о владельце сертификата - его имени, открытом ключе и алгоритме шифрования, а также сведения о самом бюро СА, выдавшем сертификат. В компьютере Windows 2000 сертификаты хранятся в специальном хранилище, представляющем собой базу данных, каждая запись которой соответствует сертификату. Для управления сертификатами в системе Windows 2000 можно использовать диспетчер сертификатов, или же для этого можно воспользоваться оснасткой Сертификаты (Certificates) консоли ММС.

Доверительные отношения пользователей

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

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

Программа PGP обладает настолько высокой эффективностью и удобством в работе, что стала воистину стандартом для всех криптографических средств защиты. Имеются и другие мощные приложения криптографической защиты. Тем не менее, в систему Windows 2000/XP включено новое средство криптозащиты, позволяющее шифровать папки и файлы, хранимые на дисках NTFS, с помощью ключей, генерируемых по умолчанию для каждого пользователя Windows 2000. Эти средства в экспортном варианте системы Windows 2000 не обладают достаточной надежностью, однако пригодны для хранения документов невысокого уровня секретности.

Шифрующая файловая система Windows 2000

В систему Windows 2000 всех версий - Professional, Server и Advanced Server - включено новое средство подсистемы защиты - шифрующая файловая система EFS (Encrypted File System). С помощью EFS можно зашифровать любую папку или файл, хранимый на диске файловой системы NTFS (но не FAT). Для шифрования применяется симметричный алгоритм DESX с секретным 56-разрядным ключом. Этот ключ случайно генерируется для каждой шифруемой папки или файла; далее сгенерированный ключ шифруется открытым ключом пользователя Windows 2000 и некоторыми дополнительными открытыми ключами, и присоединяется к шифруемому файлу в виде атрибута DDF (Data Decipher Field - Поле дешифрации данных). При открытии файла атрибут DDF расшифровывается закрытым ключом пользователя Windows 2000, после чего расшифровывается сам файл.

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

Насколько надежна криптосистема, обеспечиваемая EFS? Алгоритм DESX является разновидностью алгоритма DES (Data Encryption Standard - Стандарт шифрования данных), ранее стандартного, а ныне, с развитием мощности вычислительной техники, ставшего ненадежным алгоритмом шифрования, в 2000 году замененного алгоритмом AES (Advanced Encryption Standard - Расширенный стандарт шифрования). Дело в том, что 56-разрядная длина ключа шифрования совершенно недостаточна для создания надежной криптозащиты, поскольку позволяет взламывать шифр лобовой атакой (конечно, для этого требуются весьма значительные ресурсы). Для усиления защиты пользователи Windows могут воспользоваться модулем поддержки 128-разрядного ключа, заказав у компании Microsoft пакет Enhanced CryptoPAK.

Компания Microsoft рекомендует шифровать папки Мои документы (My Documents) и /Temp для обеспечения надежного хранения своих данных, а также выбирать параметр шифрования вложенных файлов и папок. Последнее призвано защитить не только сами документы, но и создаваемые при работе с ними временные файлы (например, резервные и временные файлы документов MS Office или распакованные файлы инсталлируемых программ и т.д.).

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

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

Hosted by uCoz