Идентификация и Аутентификация - ч1
.pdfИдентификация и Аутентификация
Задачи аутентификации идентификации
Вспомним предыдущую тему — управление доступом. Система управления доступом
— это механизм, который 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