Аутентификация на основе паролей
Аутентификация на основе паролей
Почти каждая компьютерная система требует, чтобы в начале сеанса работы пользователь идентифицировал себя. Обычно пользователю предлагается ввести имя и пароль. Пароль - это секретная информация (или просто секрет), разделенная между пользователем и удаленным сервером. Пользователь помнит этот секрет, а сервер хранит либо копию секрета, либо значение, вычисленное на основе секрета. Во время аутентификации происходит сопоставление пароля, введенного пользователем, и значения, хранимого сервером. Аутентификация при помощи паролей - наиболее распространенный вид аутентификации. Если злоумышленник знает чужой пароль, то имеет возможность выдавать себя за другого субъекта, и сервер не может отличить его от настоящего пользователя.
Рис. 2.1. Аутентификация при помощи пароля
На рис. 2.1 пользователь А передает по сети на сервер свое имя и пароль. Некто, наблюдающий за средой передачи, например, пользователь С, может похитить пароль пользователя А. Как только это происходит, пользователь С может выдавать себя за пользователя А до тех пор, пока пароль не будет изменен, а это может продолжаться достаточно долгое время. Поэтому для безопасности вычислительной среды требуется регулярно менять пароли.
Существует несколько способов получения секретного пароля в сети. Пользователь С может использовать программу-анализатор, или сниффер. Программы-анализаторы легко доступны в Интернете, они позволяют перехватывать сетевой трафик между компьютерами одной локальной сети. Для перехвата пароля пользователю С можно даже не находиться в одном помещении с пользователем А и не иметь доступ к его компьютеру - ему достаточно лишь сетевого подключения к той же самой локальной сети. Эти программы настолько упрощают перехват информации, что хищение пароля часто называют атакой анализатора [64]. После смены пароль остается неизвестен пользователю С только до очередного запуска программы-анализатора. Если пользователь С постоянно запускает свою программу-анализатор, то получает новый пароль пользователя А, как только он выбран.
Некоторые типы локальных сетей более уязвимы для атак анализатора. Особенно это касается тех, которые, как многоканальная сеть Ethernet, используют широковещательную среду. Сети, подобные коммутируемой сети Ethernet, не столь восприимчивы. Концентратор передает трафик только по проводам, соединяющим связывающиеся компьютеры. В этом случае, чтобы получить ту же самую информацию, пользователь С сталкивается с более трудной задачей: инсталлировать программу-анализатор на компьютер пользователя А.
Атаки анализаторов обнажают две серьезные проблемы аутентификации при помощи паролей. Во-первых, для аутентификации пользователь А должен передать свой пароль, разделенный секрет. Выполняя это, пользователь А может раскрыть его. Во-вторых, если разделенный секрет пользователя А используется долгое время, пользователю С достаточно получить пароль один раз, после чего он может выдавать себя за пользователя А, пока последний не изменит свой пароль. Эти слабые стороны делают атаки анализаторов успешными.
Аутентификация при помощи паролей неэффективна в среде со многими серверами [70]. Предположим, что пользователь А регулярно взаимодействует с шестью удаленными серверами. Он может использовать один и тот же пароль для каждой системы или разные пароли для всех систем. Если пользователь А использует один и тот же пароль, то успешная атака анализатора позволяет пользователю С получить доступ к учетным записям пользователя А сразу на всех серверах и в дальнейшем выдавать себя за него. Если пользователь А использует разные пароли для каждого сервера, то успешная атака анализатора позволяет пользователю С получить доступ только к одному серверу, но при этом пользователь А должен помнить шесть разных паролей. Скорее всего, пользователь А запишет свои пароли, в этом случае они могут быть похищены другим способом.
Взаимная аутентификация при помощи паролей возможна только если существует два разделенных между пользователем и сервером секрета, два пароля. В этом случае каждый пользователь должен помнить пароль сервера и также свой пароль. А сервер должен обменяться вторым разделенным секретом с каждым пользователем, причем этот секрет должен быть уникальным, чтобы ни один пользователь не мог маскироваться под сервер перед другим пользователем. Если взаимная аутентификация пользователей отсутствует, то пользователь С может получить пароль пользователя А, создав фальшивый сервер. Когда пользователи попытаются получить доступ к этому серверу, пользователь С сможет собрать их имена и пароли.
Эволюция механизмов аутентификации началась в ответ на атаки анализаторов. Очевидно, что должна была появиться защита от этих атак в виде шифрования. Шифрование предотвращает раскрытие пароля при передаче. Но если все пользователи используют один и тот же ключ шифрования, то любой из них может использовать анализатор, получить чужой пароль и расшифровать его тем же способом, что и сервер. Если каждый пользователь имеет свой ключ, то управление этими ключами обеспечивает более сильную аутентификацию, чем пароли. Следует отметить, что пользователь А защищен и в том случае, если его пароль используется однократно. Удачная атака анализатора позволяет пользователю С получить устаревший пароль А. Ясно, что пользователю А в этом случае необходим новый пароль для каждой попытки аутентификации.