У меня есть идея, отголоски которой я встречал на Хабре в разделе шифрования. Идея такая. Создать закрытую форму, доступную только для клиентов, где клиент вводит имя пользователя, и ему автоматом генерируется пароль, который генерируется из имени пользователя. Например, он вводит pavel. Строка пропускается через пару алгоритмов и выдается ему сильный пароль типа xA7$6!v1. Если клиент потеряет пароль — сгенерит заново.
Насколько безопасна такая идея? Кроме того, что злоумышленники могли бы получить алгоритмы генерации пароля из имени, насколько велика опасность удачного получения имени из кода? Стоит ле делать нечто подобное?
Сделать две кнопки «восстановить пароль по логину» и «создать новый пароль для логина».
Для каждого аккаунта хранить дату последней генерации нового пароля и в алгоритме генерации сделать чтобы пароли зависели от этой даты, например.
Ну или какой то другой способ придумать :)
Итак, если я правильно понял вашу идею то желая получить доступ к аккаунту Павла мне нужно будет просто зайти и сгенерить новый пароль по слову pavel, правильно?
ну мы сейчас так дойдем до цивилизованных PKI, может проще капнуть в эту сторону? а если уж нужна сверхсекурность, заставить хранить эти PKI на e-token'ах.
Ну тогда насколько ты хорошо продумаешь алгоритм, на столько она и будет безопасна.
Не проще хранить пароли в открытом виде в БД? на многих ресурсах так сделано (пример sql.ru)
Можно сделать так, что если и догадался, то это ему не поможет. Способ реализации — шифрование симметричным криптоалгоритмом по закрытому ключу, который зашит внутри системы.
Почитайте алгоритм хэширования SHA-1. Вам нужно сделать что-то похожее и более легковесное. Главное, чтобы ваша функция генерации паролей не обращалась.
Хэш-функция обращается, если из хэш-образа можно восстановить исходный текст.
Кстати, в Windows пароли не хранятся физически. Когда вы указываете новый пароль система просчитывает хэш-образ и сохраняет его у себя. Когда вы вводите пароль для авторизации система считает хэш для введенного пароля и сравнивает со своим. Если одинаковые — то пароль правильный. И, если злоумышленник сломает место хранения паролей, то кроме хэш-образа он ничего не найдет. А из хэш-образа пароль восстановить невозможно, даже если тот в десятки раз больше самого пароля. Интересная, в общем, штука.
Не только в Windows, подобная схема применяется повсеместно.
Имея хэш пароль восстановить невозможно, но можно подобрать фразу, которая будет иметь такой же хэш. Если пароль меньше 10 символов длиной, то на современных вычислительных мощностях это не так уж долго.
Да, я думал использовать md5. Но комментаторы нашли у идеи другие существенные недостатки, которые делают идею далеко не такой хорошей, как она мне казалась сначала.
В качестве сугубо личного генератора паролей можно все, но всегда надо понимать:
1) Какова процедура «Incident response handling» для Вашего решения — что делать, если пришла лисичка и что-то подсмотрела
2) Пароль для системы аутентификации — это то, что знает мистер Х и не знает мистер Y. Без вариантов. Если кто-то знает алгоритм генерации пароля и угадает исходные данные, этот кто-то для системы — Вы.