Хэшированные пароли |
Кембриджским университетом была разработана система «Титан» с разделением времени, которая способна обеспечить заинтересованным университетским пользователям возможность круглосуточно заниматься выполнением вычислений. Важность резервного копирования на случай непредвиденных отказов техники осознавали уже в 1967 году, когда и была начата полномасштабная эксплуатация системы «Титан». Но возникла дилемма: как защитить секретные данные, если в каждой копии файл с паролями тоже сохраняется. Ведь размножение секретной информации увеличивает риск её утраты. Поэтому размноженный пароль теряет свою ценность так же, как копипаст ухудшает возможность продвижения сайта. Тему уязвимости паролей, которые хранятся на зарезервированных копиях, обсуждали как-то вечером разработчики «Титана» Майк Гай и Роджер Нидхэм. Вот так, за бутылкой пива молодым людям и пришла идея использовать для шифровки паролей односторонний шифр. Он может изменить пароль так, что замена будет необратимой. Если текстовый пароль будет выглядеть как недешифруемая последовательность битов, атакующие злоумышленники никогда не смогут разработать обратную последовательность и превратить то, что перед ними предстанет, обратно в текстовый пароль. Первый код односторонней функции был написан Майком, после чего в системе был установлен обновленный механизм входа. Примеров односторонней функции в нашей повседневной жизни множество. Большинство вещей могут быть сломано так, что придать им прежний вид и форму не представляется возможным. Обработанный таким образом пароль можно сравнить разве что с автомобилем, побывавшим в аварии. Для того чтобы разбить машину, много усилий не потребуется, но восстановление её в прежнем виде или покупка нового автомобиля требует времени и денег. Односторонние функции применяются в математике: можно разными способами комбинировать числа. При этом полученный результат не даст ответа на вопрос, с каких именно чисел всё началось. Введенная разработчиками «Титана» в систему функция теперь носит называние одностороннее хэширование. Используется она в отношении паролей. Когда некий пользователь проходит регистрацию в системе, он заполняет привычные для него параметры: своё имя и пароль. Эти данные считываются ОЗУ. После чего система проводит процедуру одностороннего хэширования. Далее из файла паролей, который храниться на жестком диске, система извлекает запись, которая относится к указанному пользователю. В этой записи пароль хранится в том виде, в котором его первоначально ввел пользователь, но после того, как система произвела хэширование. При правильном вводе пароля пользователем, хэшированная копия пароля должна совпасть с данными, хранящимися в файле паролей – система даст благоприятный отзыв. При применении системы хэширования паролей кража файла паролей полностью теряет свой смысл. Извлечь из файла пароль пользователя атакующая сторона просто не сможет. Несмотря на то, что с первого применения системы хэширования прошли годы, она активно используется и по сей день, применяется и на ряде разработанных сайтов. Современные серверные системы хранят пароли исключительно в хэшированном виде. Этот прием стал базовым в любой применяемой защите, если система использует пароли. Правильная односторонняя функция должна обладать двумя свойствами:
Единственный способ преодолеть одностороннюю функцию – перебрать все возможные варианты паролей, чтобы получить, в конце концов, тот, который будет создавать в результате тот же хэшированный результат. В этом смысле применение односторонней функции очень похоже на шифрование. Знающий ключ к зашифрованному тексту легко его расшифрует, вот только найти такой ключ – большая проблема. Однако уязвимость системы шифрования именно в её обратимости. А функцию хэширования вовсе необязательно делать обратимой. Получается, что применение таких паролей повышает уровень безопасности. Если в системе предусмотрены хэшированные пароли, то процедура хэширования должна выполняться системой всякий раз, когда в неё вводят пароль. Изначально система хэширует тот первоначальный пароль, который присваивается пользователю. Результат сохраняется в файле паролей. После этого, при прохождении любой процедуры в системе, которая запрашивает пароль, будет производиться хэширование. При входе в систему пароль пользователя хэшируется и сравнивается с тем, который находится в файле паролей. При смене паролей пользователя система должна хэшировать старый пароль, чтобы произвести аутентификацию пользователя перед тем, как он получит разрешение на использование нового пароля. Новый пароль, установленный пользователем, тоже будет хэширован и заменит старый в файле паролей, находящемся на жестком диске. В 70-е годы ВВС США был создан проект, целью которого явилось исследование возможности инвертировать функцию хэширования, которая применялась в одном амбиционном проекте Multics. Результат взлома функции был представлен разработчику защиты проекта, которые увидел на листочке бумаги собственный пароль. Эта проверка помогла разработчикам системы серьёзнее отнестись к проблемам защиты информации. |