Как вы храните пароли и проверяете их корректность
Обычно я не заморачивался, да и задачи такие возникали не часто. Но сейчас задача ответственная.
На сколько я понимаю способов хранения паролей в БД не много:
1) В открытом виде (не обсуждаем его)
2) MD5
3) Обратимое шифрования (blowfish например)
2 MD5
На мой взгляд, тут минус в том, что пароль будет передаваться по сети, и если нет HTTPS, то это не самое надёжное решение. Это немного защищает от слива БД, но не от перехвата трафика.
3) blowfish
Тут можно сделать алгоритм хитрее.
1) Клиент получает случайную строку, которую ему требуется зашифровать с помощью ключа-пароля.
2) Сервер ищет строку в БД с соотв логином, пытается расшифровать полученнную от клиента строку с помощью пароля юзера взятого из БД и сравнивает результат с исходной случайной строкой, которая привязана к сессии.
3) Сами пароли в БД могут так же храниться зашифрованные алгоритмом blowfish
Плюсы: пароль не передаётся по сети. Перехват того что передаётся ни чего не даст, тк шифруемая случайная фраза каждый раз будет разная.
Минус: где то, на сервере должен лежать ключ, которым можно расшифровать пароль пользователя. Тут возникает вопрос как его защитить. Есть идея сделать отдельный сервис на С++ занимающийся проверкой паролей.
Пока это всё что я смог придумать. Что думаете товарищи?
__________________
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
Самые главные в жизни вещи - не вещи! (было написано на одном гараже =)
|