Выбрать главу

На самом деле меры контроля доступа должны обеспечить две вещи. Во-первых, Алиса должна попасть в систему, а во-вторых, система должна оставить других снаружи. Сделать только первое или только второе легко – открытая дверь позволит и Алисе, и кому-нибудь другому войти; а заложенная кирпичом дверь будет держать снаружи как остальных, так и Алису, – но выполнить оба условия сразу сложнее. Нам нужно что-нибудь, что даст возможность узнавать Алису и пускать ее внутрь, но так, чтобы другие не смогли в это повторить. Мы должны уметь идентифицировать Алису, а после этого проверить подлинность идентификации. (На самом деле меры контроля доступа обязаны осуществлять еще и третью функцию – протоколирование всего, что происходило.)

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

Пароли

Традиционным подходом к проверке подлинности является применение пароля. Вы наблюдаете повсеместно. Когда вы регистрируетесь в компьютерной системе, то вводите имя пользователя и пароль. Чтобы сделать звонок по телефону с использованием телефонной карты, вам необходимо набрать номер своего счета и пароль. Чтобы получить деньги в банкомате, вы вставляете свою карту и набираете идентификационный номер (пароль).

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

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

К несчастью, система имен пользователей и паролей работает не столь хорошо, как предполагают люди.

Понятие паролей, вообще говоря, основывается на попытке совместить несовместимое. Идея в том, чтобы набрать легкую для запоминания случайную последовательность. К сожалению, если нечто легко запомнить, то оно не будет случайным, например «Сюзанна». А если это будет набрано наугад, например «r7U2*Qnpi», то оно запоминается нелегко.

В главе 7, когда я говорил о длине ключей и безопасности, я обсуждал проблемы изобретения и запоминания пользователями ключей. Пароль – это форма запоминания пользователем ключа, и словарные нападения на пароли поразительно эффективны.

Как работает это нападение? Подумаем о системе контроля доступа к компьютеру или веб-сайту. У компьютера есть файл имен пользователей и паролей. Если нападающий получит доступ к этому файлу, то узнает все пароли. В середине 70-х годов эксперты по компьютерной безопасности пришли к лучшему решению: вместо хранения всех паролей в файле они решили хранить хэш-функцию пароля. Теперь, когда Алиса набирает свой пароль в компьютере или на веб-сайте, программное обеспечение вычисляет хэш-значение и сравнивает его с сохраненным в файле. Если они совпадают, Алиса допускается в систему. Теперь нет файла паролей, который можно было бы украсть, – есть только файл хэшированных паролей. И так как назначение хэш-функции – воспрепятствовать незваному гостю зайти слишком далеко в своих намерениях, злоумышленник не сможет восстановить настоящие пароли из хэшированных.