storing passwords in plaintext limits the security of communications.
и
it is more secure to send passwords encrypted over the network, and store them in plaintext on the database, than sending the passwords in plaintext over the network and store them encrypted on the database.
Почему нельзя и по сети в зашифрованном виде и в бд в зашифрованном?
потому что если нужен необратимый алгоритм шифрования, тогда его придется использовать везде. А разные методы авторизации(plain text, LDAP, SQL) могут использовать разные шифры. И если SQL и plain text файлам по барабану как зашифрован пароль, то вот насчет LDAP я не уверен
иначе какой шифрование используется для полей пароля в SQL? В общем случае: да какое задашь(в postfix, к примеру, можно и plain и md5), такое и будет. Другое дело как к этому зашифрованному полю подвязать алгоритмы, также использующие шифрование пароля, которым НУЖНО знать оригинальный пароль(CHAP для VPN или CRAM-MD5 для почты). Вот и приходится в таких случаях хранить пароли в открытом виде, что не Ъ конечно, согласен...
Почему нельзя и по сети в зашифрованном виде и в бд в зашифрованном
Хранение необратимо зашифрованного пароля требует передачи его от клиента. Передача открывает возможность перехватывать пароли неосторожных(коих большинство) пользователей подставляя им фиктивный сервер, _или_ проломав настоящий.
Доступ к незашифрованному паролю позволяет применять схемы проверки, исключающие передачу оного, т.ч. остаётся только 1 направление атаки, плюс хорошие возможности(хотя я ещё не видел реализации) его прикрыть.
Могу предположить. Сервер берёт хэш [соль+хэш пароля], передаёт клиенту соль, ждёт от него хэш [соль+хэш пароля] (клиент из пароля вычисляет хэш). Если присланное совпадает с имеющимся вычисленным хэшем, у клиента есть правильный пароль.
Понятно, схемка так себе, но клиент сам пароль на сервер не передавал.