История парольной защиты
Одними из первых, кто понял, что в ИС не обязательно хранить сами пароли, были Роджер Нидхам и Майк Гай []. Достаточно, чтобы ИС могла отличать достоверные пароли от недостоверных. В современных ИС для этой цели хранится хеш пароля, т.е. результат применения к паролю хеш-функции.
Исторически были выработаны следующие принципы парольной защиты [,,]:
- Выбор сложных паролей. Главная атака на пароль состоит в переборе всех возможных паролей указанной длины, вычисление его хеша и сравнение с образцом. Вычисления могут быть произведены противником заранее, на быстродействующей ЭВМ, а затем сохранены в базе данных в виде индексированного дерева, что позволит при необходимости быстро проверить наличие искомого пароля. А поскольку пользователи зачастую выбирают легко запоминающиеся пароли, то тем самым они невольно способствуют злоумышленнику, сокращая пространство возможных значений. Для удобства вскрытия злоумышленник может составить словарь наиболее употребительных паролей. Итак, самое слабое место парольной защиты это низкая энтропия обычных паролей.
- Использование случайного числа-привязки (соль). Хеш-функция является детерминированной. Будучи примененной к одним и тем же исходным данным, она в результате выдает одно и то же значение. Следовательно, два разных пользователя, выбрав один и тот же пароль, получат в результате одно и то же хеш-значение. Таким образом, пользователь, не обладая глубокими знаниями в области вскрытия шифров, а, зная только свой собственный пароль, сможет просмотреть все хеш-значения и определить других пользователей с таким же, как у него паролем. Чтобы предотвратить подобную уязвимость, каждый пароль имеет ассоциированное с ним случайное число, которое используется совместно с паролем для генерации хеша пароля. Обычно это случайное число побитово складывается с паролем, в результате чего на вход хеш-функции подаются различные данные, даже если пользователи вводят один и тот же пароль. Случайное число достаточной длины позволяет также затруднить атаку на пароли за счет того, что не позволяет противнику заранее вычислить все возможные пароли заданной длины и их хеши и реализовать атаку по словарю.
- Медленный однонаправленный алгоритм. Медленный однонаправленный алгоритм означает, что хеш-функция не должна вычисляться быстро. Если хеш-функция вычисляется быстро, то хакер тоже ее вычислит быстро, и быстро осуществит перебор паролей. Поэтому медленный однонаправленный алгоритм нужен, чтобы замедлить работу хакеров. Он не сильно затруднит одноразовое вычисление пароля (например, при подключении к БД), но существенно затруднит противнику перебор всевозможных паролей. Наиболее популярное решение здесь - это многократное итеративное использование хеш-функций. Например, в Unix-системах однонаправленная функция шифрования применяется итеративно несколько раз, чтобы обеспечить достаточно большое время отклика.
Устройство системы не должно быть секретом. Секретным элементом должен быть только сменный элемент системы, например, ключ шифрования.
По умолчанию доступ к системе не предоставляется.
Система защиты должна быть дружественной. Даже очень надежная система защиты, которая в значительной мере мешает ему выполнять свои функции, в конце концов, будет отвергнута.