Как указали другие, вы правы. Также имейте в виду, что кто-то может перехватить связь (3) и потенциально переслать ее, пока реальный пользователь испытывает проблемы с сетью (например, DDOS), тогда самозванец будет входить в систему, и этого часто достаточно для смены пароля (то есть многие системы не требуют, чтобы вы вводили пароль для изменения его после входа в систему).
Возможно, вы захотите рассмотреть HMAC (код аутентификации хеш-сообщения с ключом). Я подробно писал об этом здесь: http://blog.ciscavate.org/2007/09/creating-a-secure-webauth-system-part-1-hmac.html, и я дам краткое резюме ниже.
HMAC - это метод, гарантирующий, что сообщение было сгенерировано кем-то, имеющим доступ к общему секрету. HMAC использует своего рода однонаправленную функцию хеширования (например, MD5 или SHA-1) для шифрования секрета вместе с сообщением. Это создает короткий дайджест из 16-20 байтов, который действует как отпечаток комбинации сообщение + секрет. Когда дайджест отправляется вместе с сообщением, получатель (наш сервер) может заново сгенерировать хеш с тем же вычислением HMAC и сравнить локально сгенерированный дайджест с дайджестом, который пришёл вместе с сообщением. Помните: у сервера тоже есть секрет, поэтому у него достаточно информации для подтверждения дайджеста. (Это рассматривает только проблему проверки происхождения сообщения, но вы можете использовать тот же подход для шифрования всего сообщения, если вы используете другой секрет, скажем, набор открытых ключей.)