- •1. Методы оценки эффективности информационных технологий
- •2. Архитектура «клиент-сервер»
- •3. Использование парольной защиты: подход к выбору пароля, способы снятия пароля, места применения паролей
- •4. Виды и источники угроз для конфиденциальной информации
- •5. Борьба с деструктивными программами: классификация деструктивных программ, виды угроз, противодействие
- •6. Криптографические протоколы аутентификации
- •Изобразить схему Файстеля, лежащую в основе большинства соврременных симметричных алгоритмов шифрования, объяснить преимущества, доказать корректность схемы.
- •8. Составить программу (псевдокод), реализующую простейший алгоритм вычисления контрольной суммы (цифровой подписи) произвольного файла
- •9. Из двух строк (последовательностей) символов выделить сигнатуру максимальной длины. Рассказать об основных подходах к выбору сигнатур в антивирусах для поиска деструктивных программ.
- •9. Структура и особенности использования бухгалтерских ис
- •10. Структура и особенности использования банковских ис
6. Криптографические протоколы аутентификации
Протокол — это последовательность шагов, которые предпринимают две или большее количество сторон для совместного решения некоторой задачи. Все шаги предпринимаются в порядке строгой очередности, и ни один из них не может быть сделан прежде, чем закончится предыдущий.
Если модель безопасности системы предусматривает управление доступом, в базе данных системы должны храниться идентификаторы зарегистрированных пользователей и назначенные им права доступа к ресурсам и функциям системы. Создание идентификаторов и назначение прав происходит в момент регистрации пользователя в системе, которая может выполняться администратором (например, в организации, при наделении полномочиями нового сотрудника) или самим пользователем (например, при регистрации на сайте – в этом случае, разумеется, пользователю предоставляется стандартный набор прав).
Для того, чтобы войти в систему, пользователь предъявляет ей свой идентификатор (например, вводит свой логин – имя пользователя). Система проверяет, хранится ли такой идентификатор в базе. Если нет, то пользователь считается нелегальным и ему отказывается в доступе к системе. Эта процедура называется идентификацией.
Аутентификация – процедура проверки подлинности, которая позволяет достоверно убедиться в том, что субъект, предъявивший системе идентификатор, является именно тем, кому этот идентификатор принадлежит.
В случае, если аутентификация проходит успешно, выполняется процедура авторизации – предоставление субъекту возможности доступа к ресурсам и функциям системы в соответствии с назначенными ему правами.
Протоколы аутентификации должны обеспечивать защиту от потенциального злоумышленника, цель которого — выдать себя за другого пользователя. В частности, протокол аутентификации не должен позволить проверяющему получить такую информацию о стороне, доказывающей свою подлинность (аутентичность), которая впоследствии помогла бы ей выдать себя за нее.
В
руководстве NTSC-TG-017,
выпущенном Национальным центром
компьютерной безопасности США, приводятся
три основных вида аутентификации, в
зависимости от того, каким именно образом
пользователь (или другая система)
доказывает, что он не
верблюд
именно тот, за кого себя выдает.
Authentication by Knowledge – на основе знания чего-либо. Например, пользователь вводит пароль или PIN-код, который (как предполагается) знает он один.
Authentication by Ownership – на основе владения чем-либо. Это может быть смарт-карта, электронный ключ и т. д.
Authentication by Characteristic – на основе биометрических характеристик: отпечатка пальцев, сетчатки глаза, голоса, почерка и т. д.
В соответствии с упомянутым руководством, выделяют протоколы аутентификации типа 1, типа 2 и типа 3, а также протоколы многофакторной аутентификации, когда для того, чтобы подтвердить свою подлинность, субъект должен продемонстрировать, например, и знание (тип 1) и обладание (тип 2). Так, чтобы снять деньги со своего счета через банкомат, клиент банка в процессе аутентификации использует и смарт-карту и PIN-код – это называется аутентификацией типа 12. Очевидно, что многофакторная аутентификация более надежна, чем однофакторная (злоумышленник должен не просто узнать PIN-код или похитить карту, а сделать и то и другое). А самой надежной будет аутентификация типа 123.
Наиболее простым протоколом аутентификации типа 1 является аутентификация на основе открытого пароля. Пользователь вводит логин и пароль, а система проверяет, содержится ли такая пара в ее базе. Если да, авторизация проходит успешно.
Такой протокол небезопасен по двум причинам. Во-первых, если осуществляется удаленный доступ к системе, то логин и пароль передаются по сети в открытом виде, а следовательно, немного постаравшись злоумышленник сможет их перехватить. Достаточно вспомнить, что маршрут прохождения пакетов через Интернет может быть каким угодно и практически кто угодно может анализировать содержимое этих пакетов на различных промежуточных пунктах. А технологии локальных сетей (например, Ethernet) построены по такому принципу, что сообщение, направленное определенному получателю, получат все узлы этой локальной сети. Они сверяют MAC-адрес получателя со своим собственным и игнорируют кадры, предназначенные для других узлов. Но никто не мешает злоумышленнику настроить свой (подключенный к этой локальной сети) компьютер таким образом, чтобы изучать весь циркулирующий в сети трафик. Во-вторых, поскольку логин и пароль в открытом виде хранятся в системе, злоумышленнику достаточно каким-либо образом получить доступ к системе хотя бы один раз, чтобы впоследствии успешно выдавать себя за любого пользователя.
Протокол аутентификации на основе открытого пароля и другие аналогичные протоколы простой аутентификации типа 1 не являются криптографическими. Примером простого и часто используемого криптографического протокола аутентификации является аутентификация на основе хэшированного пароля. В этом случае после того, как пользователь вводит логин и пароль, вычисляется хэш пароля и именно он передается по сети. В системе хранятся пары вида «логин – хэш пароля» и для того, чтобы пользователь успешно авторизовался, необходимо, чтобы хранящийся в системе хэш совпал с хэшем введенного пароля. Поскольку хэш-функция является стойкой к коллизиям первого рода, противник, даже если перехватит хэш, не сможет вычислить соответствующий ему пароль. Такая аутентификация используется в большинстве современных операционных систем.
Слабость такого протокола в том, что он легко подвержен атаке повторного использования. Она основана на перехвате сетевого трафика между пользователем и системой. Затем злоумышленник просто воспроизводит перехваченные пакеты для того, чтобы выдать себя за пользователя и получить его права доступа. В данном случае злоумышленнику не нужно отгадывать пароль – достаточно перехватить хэш, а затем просто предъявить его системе (конечно, придется слегка модифицировать клиентскую программу, чтобы она при входе не вычисляла хэш от хэша или написать свою, но это как раз тривиальная задача).
Хороший криптографический протокол строится исходя из предположения, что противник может перехватывать любые сообщения, передающиеся по сети, а также может блокировать их и посылать свои собственные. В хорошем протоколе аутентификации по сети не передается ничего, что позволило бы злоумышленнику получить дополнительную информацию, открывающую перед ним новые возможности.
Протоколы аутентификации типа 1, в которых пользователь подтверждает знание некоторого ключа, но сам ключ в ходе обмена информацией не раскрывается, называются протоколами строгой аутентификации.
Рассмотрим примеры таких протоколов. Стороной A будем называть пользователя или систему, который должен доказать свою подлинность (проверяемый), а стороной B – пользователя или систему, который должен убедиться в подлинности A (проверяющий).
Строгая односторонняя аутентификация на основе случайных чисел
Обе стороны знают общий ключ K и выбрали симметричный алгоритм шифрования.
A сообщает B о своем желании получить доступ. Например, пользователь вводит свой логин на рабочей станции. Логин передается по сети в открытом виде.
B генерирует случайное число r и отправляет его A.
A шифрует полученное число ключом K и отправляет результат B.
B расшифровывает сообщение ключом K и убеждается в том, что в результате получается число r.
Поскольку предполагается, что ключ K знают только A и B, сторона B посредством данного протокола убеждается в том, что имеет дело со стороной A. При этом даже если противник перехватывает передающиеся по сети сообщения, он не сможет воспользоваться ими, чтобы выдать себя за A, так как K в явном виде не передается, а каждый сеанс аутентификации использует новое случайное число.
Вычисления по алгоритму шифрования на шаге 3 может выполнять специальное программное обеспечение, установленное на рабочей станции, с которой пытается авторизоваться пользователь A, а может специальное аппаратное устройство. Такая программа или устройство называется OTP-токеном (аббревиатура OTP означает One-Time Password – одноразовый пароль). Сам ключ может храниться в OTP-токене, а может вводиться пользователем с клавиатуры. Второй вариант предпочтительнее, поскольку запомнить сложный ключ, который невозможно подобрать, очень трудно. Самое надежное – это когда OTP-токен представляет собой смарт-карту или USB-устройство, ключ хранится внутри (в зашифрованном виде), а для того, чтобы выполнить третий шаг протокола, необходимо ввести PIN-код. При такой реализации аутентификация типа 1 превращается в аутентификацию типа 12.
Данный протокол может быть описан с помощью следующей наглядной схемы:
A → B: A
B → A: r
A → B: [r]K
Строгая двусторонняя аутентификация на основе случайных чисел
В предыдущем протоколе сторона B убеждается в подлинности стороны A, но A не может быть уверена, что имеет дело именно с B. Протокол легко усовершенствовать таким образом, чтобы обе стороны убеждались в подлинности друг друга. Будем использовать следующую схему:
A → B: A
B A: r1
A B: [B | r1 | r2]K
A: [r1 | r2]K
Здесь [B | r1 | r2]K означает сообщение, состоящее из имени B, случайного числа, полученного от B на втором шаге и другого случайного числа, cгенерированного стороной A, причем все это сообщение целиком зашифровано с помощью ключа K. Получив это сообщение, сторона B убеждается, что имеет дело со стороной A (поскольку только A может зашифровать только что присланное ей r1 с использованием K). В свою очередь, на шаге 4 A убеждается в подлинности B, поскольку никто иной не мог бы расшифровать предыдущее сообщение, получить из него r2, а затем подготовить другое сообщение, содержащее r2 и зашифрованное тем же ключом K.
Заметим, что шаг 4 мог бы выглядеть и так:
A: r2
Таким образом B показывает A, что знает ключ K, так как смог расшифровать число r2. Однако данная версия протокола позволяет противнику, наблюдающему за сетью, получить пару «открытый текст – зашифрованный текст» (зашифрованный текст передавался на шаге 3, а соответствующий ему открытый текст можно составить из сообщений, передающихся на шагах 2 и 4. А с помощью пары «открытый текст – закрытый текст» уже можно попытаться осуществить атаку на сам алгоритм шифрования.
Аутентификация на основе асимметричного алгоритма
В следующем протоколе r – случайное число, H – хэш-функция, а PK(A) – открытый ключ стороны A. Хэш-функция используется на шаге 2, чтобы A могла убедиться в том, что сообщение не было искажено случайно или умышленно. Авторизация осуществляется на том основании, что только закрытый ключ стороны A известен только ей (а значит никто больше не смог бы извлечь r из сообщения [r, B]PK(A)
A → B: A
B A: H(r), B, [r, B]PK(A)
A → B: r
Приведенная схема протокола на самом деле является упрощением. Для того, чтобы такой протокол мог применяться в реальности, необходимо гарантировать, что открытый ключ PK(A) на самом деле принадлежит стороне A, то есть, в протоколе должен участвовать удостоверяющий центр.
В двух предыдущих протоколах, основанных на алгоритмах симметричного шифрования, нерешенным вопросом остается то, каким образом A и B разделяют один и тот же ключ K. Для этих целей можно использовать протокол обмена ключами.
