Паролей и модели «рукопожатия»
При выборе паролей пользователи КС должны руководствоваться двумя, по сути взаимоисключающими, правилами — пароли должны трудно подбираться и легко запоминаться (поскольку пароль ни при каких условиях не должен нигде записываться, так как в этом случае необходимо будет дополнительно решать задачу защиты носителя пароля).
Сложность подбора пароля определяется, в первую очередь, мощностью множества символов, используемого при выборе пароля (N), и минимально возможной длиной пароля (к). В этом случае число различных паролей может быть оценено снизу как Ср = Nk. Например, если множество символов пароля образуют строчные латинские буквы, а минимальная длина пароля равна 3, то СР 263= 17576 (что совсем немного для программного подбора). Если же множество символов пароля состоит из строчных и прописных латинских букв, а также из цифр (26+ 26 + 10) и минимальная длина пароля равна 6, то Ср= 62б= 56800235584.
Сложность выбираемых пользователями КС паролей должна устанавливаться администратором при реализации установленной для данной системы политики безопасности. Другими параметрами политики учетных записей при использовании парольной аутентификации должны быть:
• максимальный срок действия пароля (любой секрет не может сохраняться в тайне вечно);
• несовпадение пароля с логическим именем пользователя, под которым он зарегистрирован в КС;
• неповторяемость паролей одного пользователя.
Требование неповторяемости паролей может быть реализовано двумя способами. Во-первых, можно установить минимальный срок действия пароля (в противном случае, пользователь, вынужденный после истечения срока действия своего пароля поменять его, сможет тут же сменить пароль на старый). Во-вторых, можно вести список уже использовавшихся данным пользователем паролей (максимальная длина списка при этом может устанавливаться администратором).
К сожалению, обеспечить реальную уникальность каждого вновь выбираемого пользователем пароля с помощью приведенных выше мер практически невозможно. Пользователь может, не нарушая установленных ограничений, выбирать пароли «Al», «A2», ... где А — первый пароль пользователя, удовлетворяющий требованиям сложности.
Обеспечить приемлемую степень сложности паролей и их реальную уникальность можно путем назначения паролей всем пользователям администратором КС с одновременным запретом па изменение пароля самим пользователем. Для генерации паролей администратор при этом может использовать программный генератор, позволяющий создавать пароли различной сложности.
Однако при таком способе назначения паролей возникают проблемы, связанные с необходимостью создания защищенного канала для передачи пароля от администратора к пользователю, трудностью проверки сохранения пользователем не им выбранного пароля только в своей памяти и потенциальной возможностью администратора, знающего пароли всех пользователей, злоупотребления своими полномочиями. Поэтому наиболее целесообразным является выбор пароля пользователем на основе установленных администратором правил с возможностью задания администратором нового пароля пользователю в случае, если тот забыл свой пароль.
Еще одним аспектом политики учетных записей пользователей КС должно стать определение противодействия системы попыткам подбора паролей.
Могут применяться следующие правила:
• скрытие логического имени последнего работавшего пользователя (знание логического имени может помочь нарушителю подобрать или угадать его пароль);
• учет всех попыток (успешных и неудачных) входа в систему в журнале аудита.
Реакцией системы на неудачную попытку входа пользователя могут быть:
• блокировка учетной записи, под которой осуществляется попытка входа, при превышении максимально возможного числа попыток (на заданное время или до ручного снятия блокировки администратором);
• нарастающее увеличение временной задержки перед предоставлением пользователю следующей попытки входа.
Постоянная блокировка учетной записи при обнаружении попытки подбора пароля (до снятия блокировки администратором) менее целесообразна, поскольку она позволит нарушителю намеренно заблокировать работу в КС легального пользователя (реализовать угрозу нарушения доступности информации).
При любой реакции системы на попытку подбора пароля необходимо в настройках параметров политики учетных записей обеспечить сброс значения счетчика попыток входа в систему под конкретной учетной записью через заданный промежуток времени, иначе значения счетчика будут суммироваться для разных сеансов работы пользователя.
При первоначальном вводе или смене пароля пользователя обычно применяются два классических правила:
• символы вводимого пароля не отображаются на экране (это же правило, применяется и для ввода пользователем пароля при его входе в систему);
• для подтверждения правильности ввода пароля (с учетом первого правила) этот ввод повторяется дважды.
Одним из следствий первого правила является нецелесообразность назначения пользователю пароля системой, поскольку в этом случае пароль должен быть выведен пользователю в открытом виде или записан на специальном носителе (второй способ противоречит принципу сохранения пароля только в памяти пользователя).
Однако отказ от отображения символов вводимого пароля может создать проблему, так как увеличивается вероятность того, что случайная ошибка, допущенная при вводе пароля, останется не замеченной, а это может привести к блокировке учетной записи легального пользователя. Поэтому, если вход пользователя в КС происходит в защищенном помещении, в которое не могут попасть посторонние лица, от правила скрытия символов вводимого пароля можно и отказаться.
Очевидно, что в базе данных учетных записей пользователей КС пароли не могут храниться в открытом виде (иначе к ним может получить доступ как минимум администратор системы). Для хранения паролей возможно их предварительное шифрование или хеширование. Шифрование паролей имеет два недостатка:
поскольку при шифровании необходимо использовать ключ, требуется обеспечить его защищенное хранение в КС (знание ключа шифрования пароля позволит выполнить его расшифрование и осуществить несанкционированный доступ к информации);
существует опасность расшифрования любого пароля и получения его в открытом виде.
Хеширование является необратимым преобразованием и знание хеш-значения пароля не даст нарушителю возможности его получения в открытом виде (он сможет только пытаться подобрать пароль при известной функции хеширования). Поэтому гораздо более безопасным является хранение паролей в хешированном виде. Недостатком является то, что не существует даже теоретической возможности восстановить забытый пользователем пароль.
Несмотря на то, что с помощью применения перечисленных выше правил парольнуюаутентификацию можно сделать более безопасной, она все-таки остается весьма уязвимой. Для ее усиления могут использоваться так называемые одноразовые пароли. Пусть пользователь КС получает список паролей Рь Р2, ..., Р„ ..., Р„. Каждый из паролей действует только на один сеанс входа (P1 — на первый, Р2 — на второй и т.д.). В этом случае знание уже использовавшегося пользователем пароля ничего не даст нарушителю, а при каждом входе легального пользователя возможна проверка на использование данного пароля кем-либо еще.
Недостатки схемы одноразовых паролей:
• организация защищенного хранения длинного списка паролей (либо его запоминание, что маловероятно);
• неясность с номером следующего пароля, если после ввода предыдущего пароля из списка вход пользователя в систему не был осуществлен из-за сбоя в работе КС.
Эти недостатки могут быть устранены, если список паролей генерировать на основе некоторой необратимой функции, например функции хеширования.
Пусть Р — начальный пароль пользователя, а F — необратимая функция. Обозначим: Fi(P) = F(F(...F(P)...)) (функция F применяется последовательно i раз). Тогда список одноразовых паролей создается следующим образом:
Р1 = Fn (Р), Р2 = Fn-1(P), ..., Pn-1 = F(F(P)), Pn = F(P).
При сбое в процессе входа пользователя в КС всегда осуществится выбор следующего пароля из списка, а система последовательно применяет функцию F к введенному пользователем паролю, вплоть до совпадения с последним принятым от него паролем (и тогда пользователь допускается к работе в системе) или до превышения длины списка паролей (в этом случае попытка входа пользователя в КС отвергается).
Но в любом варианте парольной аутентификации подтверждение подлинности пользователя осуществляется на основе ввода им некоторой конфиденциальной информации, которую можно подсмотреть, выманить, подобрать, угадать и т.п.
Рассмотрим аутентификацию пользователей на основе модели «рукопожатия», во многом свободную от указанных недостатков.
В соответствии с этой моделью пользователь П и система С согласовывают при регистрации пользователя в КС функцию f, известную только им. Протокол аутентификации пользователя в этом случае выглядит следующим образом:
1. С: генерация случайного значения х; вычисление у = f(x); вывод х.
2. П: вычисление у' = f'(х); ввод у'.
3. С: если у и у' совпадают, то пользователь допускается к работе в системе, иначе попытка входа в систему отклоняется.
К функции f предъявляется требование, чтобы по известным х и f(x) нельзя было угадать f.
Преимущества аутентификации на основе модели «рукопожатия» перед парольной аутентификацией:
• между пользователем и системой не передается никакой конфиденциальной информации, которую нужно сохранять в тайне;
• каждый следующий сеанс входа пользователя в систему отличен от предыдущего, поэтому даже длительное наблюдение за этими сеансами ничего не даст нарушителю.
К недостаткам аутентификации на основе модели «рукопожатия» относится большая длительность этой процедуры по сравнению с парольной аутентификацией.
Парольная аутентификация совершенно неприменима в случае взаимного подтверждения подлинности пользователей компьютерной сети. Действительно, пусть А и Б обозначают двух пользователей сети, имеющих соответственно пароли РА и РБ. Тогда протокол взаимной аутентификации А и Б мог бы выглядеть следующим образом:
1. А->Б: А, запрос РБ.
2. Б—>А: Б, запрос РА.
3. А—>Б: А, РА.
4. Б—>А: Б, РБ.
Но в момент отправки своего пароля (неважно, в открытой или защищенной форме) А не может быть уверен в подлинности Б, который может воспользоваться паролем А, чтобы выдать себя за А при взаимодействии еще с одним пользователем компьютерной сети В.
Модель «рукопожатия» вполне приемлема для взаимной аутентификации:
1. А: выбор значения х; вычисление у =f(х).
2. А—>Б: А, х.
3. Б: вычисление у' =f(х).
4. Б—>А: Б, у'.
5. А: если у и у' совпадают, то А может доверять Б.
Затем процедура аутентификации повторяется с переменой ролей (теперь Б начинает процесс и выбирает значение х), чтобы Б мог быть также уверен в подлинности А.
Для повышения безопасности протокола взаимной аутентификации перед отправкой по сети значения х и могут быть зашифрованы на секретном ключе, которым должны предварительно обменяться по защищенному каналу А и Б. В этом случае потенциальному нарушителю, который имеет возможность перехвата всех передаваемых по сети данных и желает выдать себя за одного из легальных пользователей сети, придется не только определить функцию f, но и предварительно взломать шифротекст.
При интерактивном доступе пользователя к системе функция f может быть задана таблицей своих значений. Рассмотрим два примера. В первом примере система предлагает пользователю ответить при регистрации его в КС на несколько вопросов, имеющих частично объективное и частично вымышленное содержание (например: «девичья фамилия Вашей матери», «в каком городе Вы проживали в июне 2002 г.», «где находится клуб», «когда откроется пул» и т. п.). При входе в систему пользователю предлагается ответить на другой список вопросов, среди которых есть некоторые из заданных ему при регистрации. Для правильной аутентификации пользователь должен дать те же ответы, которые он давал на аналогичные вопросы при регистрации.
Второй пример — аутентификация на основе модели «рукопожатия». При регистрации в КС пользователю предлагается набор небольших изображений (например, пиктограмм), среди которых он должен выбрать заданное число картинок. При последующем входе в систему ему выводится другой набор изображений, часть из которых он видел при регистрации. Для правильной аутентификации пользователь должен отметить те картинки, которые он выбрал при регистрации.