Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Идентификация и Аутентификация - ч1

.pdf
Скачиваний:
9
Добавлен:
30.04.2022
Размер:
85.53 Кб
Скачать

Идентификация и Аутентификация

Задачи аутентификации идентификации

Вспомним предыдущую тему — управление доступом. Система управления доступом

— это механизм, который 1) позволяет настраивать правила разграничения доступа, 2) разрешает или запрещает субъекту выполнить запрошенные действия в отношении объекта. Для корректной работы система управления доступом должна знать, кто, что и с чем пытается сделать.

То есть система управления доступом должна знать, какой субъект запрашивает доступ. И соответственно, сопоставить, проверить запрашиваемое им действие с разрешениями, установленными для этого субъекта. Иначе никакого разграничения доступа нет: ведь какие бы ни были заданы правила разграничения доступа, их просто невозможно применить, ведь для системы существует только 1 единственный пользователь. Проще говоря, возникает ситуация «все на одно лицо». В таком случае, мы можем либо запретить всем, либо разрешить всем, либо научить систему принимать решения случайным образом, к примеру, бросая монетку.

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

Отсюда и появляется 2 задачи: идентификации и аутентификации. То есть задача «узнавания» и задача «подтверждения» субъекта. Идентификация — это процедура, в результате выполнения которой для субъекта идентификации выявляется его идентификатор, однозначно идентифицирующий этого субъекта в информационной системе. Для выполнения процедуры идентификации в информационной системе субъекту предварительно должен быть назначен соответствующий идентификатор (т.е. проведена регистрация субъекта в информационной системе).

Проще говоря, задача идентификации состоит в том, чтобы определить, распознать, идентифицировать субъект. То есть установить соответствие между пока неизвестным субъектом и некоторым известным субъектом или его образом. Примерами процедуры идентификации можно назвать знакомство: «Я — такой-то, такой-то»; или «Меня зовут такто».

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

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

Факторы идентификации и аутентификации

Большинство механизмов идентификации и аутентификации основываются на одном из

3элементов:

1.на чём-нибудь, что известно пользователю (разные виды паролей, семантическая идентификация, схема «отклик-отзыв»);

2.на чём-нибудь, что есть у пользователя (некоторый предмет, специальное устройство для идентификации и аутентификации — как персональные идентификаторы в виде флэшек, iToken, ruToken, ключей от домофонов и т. п.);

33

3.на чём-нибудь, что является относительно неотъемлемой и относительно уникальной частью пользователя (биометрические системы).

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

Системы основанные на знаниях пользователя

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

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

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

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

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

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

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

Использование парольной защиты имеет ряд недостатков:

1.слабые пароли — пользователи часто используют пароли, которые слишком легко угадываются (около 20% – 40% всех пользователей выбирают пароли, которые легко угадать, потому что либо широко распространены (например qwerty, 123, 123456 и т. п.), либо связаны

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

2.использование одного пароля для своих учётных записей в нескольких разных системах (вход в рабочую ОС, электронную почту, любимый магазин и т. п.);

3.разглашение пароля или хранение его в незащищённом виде;

4.утрата пароля — пользователи, время от времени, забывают свои пароли;

5.редкая смена или вообще отказ от периодической смены пароля.

33

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

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

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

Логин

Соль

Пароль

 

 

 

Bobby

4932

Encr(4932, ‘Alderius’);

 

 

 

Nikitin

5001

Encr(5001, ‘Arbenat’);

 

 

 

Таким образом, если в системе в качестве соли используется случайное число в диапазоне 0..9999, то для каждого пароля существует 10 000 комбинаций вида «соль-пароль», которая подвергается шифрованию и сохраняется в специальном файле. Соответственно, злоумышленнику нужно составить список таких пар, который будет в 10 000 раз больше того, который использовался в первый раз. И это только наш с вами пример, иллюстрирующий этот приём защиты. Реальные системы используют гораздо более длинную соль, при том состоящую далеко не только из цифр, что значительно увеличивает количество возможных комбинаций.

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

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

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

33

Такой механизм имеет ряд недостатков, которые мы называли выше. А раз есть недостатки, то, скорее всего, есть и альтернативы. И альтернативы действительно есть. Наверное самая близкая альтернатива многоразовым паролям — пароль одноразовый.

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

Существуют и другие виды реализации идеи парольного блокнота. Например метод односторонней цепочки хеширования. Он состоит в том, что пользователь при регистрации или смене пароля задаёт два значения: собственно пароль и некоторое большое целое число (обозначим это число за N). Для входа в систему пользователь должен последовательно вычислить итеративный хэш (контрольную сумму) от своего пароля N раз и отправить полученное значение на сервер — именно это значение и будет текущим одноразовым паролем. Сервер в свою очередь так же вычисляет итеративный хэш от пароля пользователя N раз, затем сравнивает рассчитанное значение со значением, полученным от пользователя. Если эти значения совпадают, то пользователю разрешается вход — считается, что он успешно прошёл аутентификацию. После этого значение числа N, связанного с пользователем и хранящееся в системе, уменьшается на 1. Таким образом, при следующем входе пользователь должен будет прислать уже другое значение пароля — хэш функцию другого уровня вложенности.

md5(md5(md5(...(md5(‘t#_En$83MkKfqxfIL9%’))…))).

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

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

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

33

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

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

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

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

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

Если устройство пользователя обладает достаточной вычислительной мощностью, такой как, например, у персонального компьютера, КПК или сотового телефона, то может быть использована более сложная форма оклика — отзыв. Пользователь заранее выбирает секретный ключ k, который сначала вручную помещается на сервер. Копия хранится (под защитой) на пользовательском компьютере. При входе в систему сервер отправляет пользовательскому компьютеру случайное число r, из которого затем вычисляется значение f(r, k) (где f — это общеизвестная функция), которое отправляется обратно. Например, k=5, r =2, функция может быть (k+r)^2. Тогда значение, которое пользователь должен отправить на сервер: 49. Затем сервер выполняет вычисление и проверяет, согласуется ли возвращенный ему результат с результатом собственного вычисления.

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

Иначе, мы можем просто составить таблицу пар значений:

Послано сервером

Отвечено пользователем

 

 

2

49

 

 

1

36

 

 

0

25

 

 

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

33

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

33