Повышение устойчивости паролей
06-11-2009 16:20
к комментариям - к полной версии
- понравилось!
Настроение сейчас - nice ;)
Давно уже задумывался как же разрешить дилемму устойчивости пароля и емкости серого вещества для его запоминания. Ведь держать в голове даже один (например такой: kW72{w2@/b5$v) пароль - это очень сложно. Известно давно, что при наличии хорошей базы словарей пароли ломаются достаточно быстро. И самое обидное состоит как раз в том, что наш с вами мозг лучше всего генерирует и запоминает словарные (а стало быть неустойчивые) пароли. Закономерный вопрос что же нам органическим делать?
Введем систему обозначений:
login - слово-логин
passwd - слово-пароль
hash - хэш со слова-пароля
hash_et - эталонный хэш слова-пароля
f - функция снятия хэша со слова-пароля
g - дополнительная хэш-функция
Попробуем разобраться. Любая супер-пупер навороченная система аутентификации сводится к банальному IF... ELSE... А весь хитроумный алгоритм можно свести к следующей последовательности действий:
1. Прием входных данных пользователя login, passwd
2. Вычисление хэш-образа hash = f(passwd), где f(passwd) - функция хэширования
3. Сравнение полученного хэш-образа с эталонным. Т.е. if(hash != hash_et) InvalidPassword(true);
Или же:
+--------------------------+ +-----------------------------------------------------------------+
| Пользовательская | | Система |
| сторона | | аутентификации |
+--------------------------+ +-----------------------------------------------------------------+
| passwd | -----> | hash = f(passwd); |
| | | if(hash != hash_et) IncorrectPasswd(true); |
+--------------------------+ +-----------------------------------------------------------------+
Такая система обладает следующим набором уязвимостей:
1. Входным словом является вполне словарное слово (т.к. человеку тяжело запоминать что-то вроде a5XG8#n90\!@#94SA);
2. При известном алгоритме снятия хэш-функции f(passwd) может вскрыться уязвимость алгоритма, что сильно упрощает процесс взлома.
3. Пользователь не может повлиять на выбор функции снятия хэш-образа f(passwd) при обнаружении алгоритма f(passwd).
Выходом представляется введние дополнительной хэш-функции на стороне пользователя (функции первичного хэширования). Иными словами, на вход системы аутентификации будет поступать не словарное слово, а устойчивый к атаке по словарю буквенно-цифровой пароль со спецсимволами.
Условия выбора функции первичного хэширования:
1. Необратимость. Для невозможности восстановления слова-пароля по хэшу.
2. Получение хэша в виде совокупности всех возможных печатаемых и непечатаемых (в случае автоматизации ввода со стороны пользователя) символов.
3. Нестандартность. Чем дольше алгоритм будет оставаться тайной, тем выше устойчивость.
4. Если нестандартность тяжело дается, то хотя бы нетождественность хэш-функции в системе аутентификации. Т.е. если у вас в системе аутентификации используется DES64, то нужно взять хотя бы MD5.
Т.е. в данном случае наша схема приема данных будет выглядеть следующим образом:
+----------------------------+ +---------------------------------------------------------------+
| Пользовательская | | Система |
| сторона | | аутентификации |
+----------------------------+ +---------------------------------------------------------------+
| hash1 = g(passwd); | ------> | hash2 = f(hash1); |
| | | if(hash2 != hash_et) IncorrectPasswd(true); |
+----------------------------+ +---------------------------------------------------------------+
Такая схема при соблюдении условий выбора функции первичного хэширования обладает рядом преимуществ перед классической:
1. Пользователь также как и раньше пользуется простым для запоминания (словарным) паролем.
2. Возможность смены алгоритма первичного хэширования на стороне пользователя, что обеспечивает вариативность устойчивости
пароля к атакам. Более того, смена алгоритма первичного хэширования позволит использовать один и тот же пароль с разными системами аутентификации. Лично по моим наблюдениям за коллегами большинство использует один и тот же пароль со всеми системами аутентификации.
3. Невозможность атаки по словарю непосредственно системы аутентификации, т.к. неизвестен промежуточный хэш и алгоритм первичного хэширования.
4. Невозможность подбора слова-пароля при наличии одной только функции первичного хэширования, т.к. промежуточный хэш нигде не хранится, а сама функция обладает свойством необратимости.
5. Невозможность использования слова-пароля в системе аутентификации напрямую. Люди разные бывают и некоторым очень тяжело держать язык за зубами.
6. Увеличение времени взлома для одного прохода (возможно, что незначительно).
P.S. Математики опять в цене. 8)
вверх^
к полной версии
понравилось!
в evernote