На самом деле, подумав об этом снова, ваш метод потенциально менее безопасен, чем "Нормальный поток".
Если вы просто отправите обратно HASH(HASH(user's original password))
, я могу увидеть сценарии, в которых это может дать атакующему рычаги:
Сценарий 1:
Jim
регистрируется на вашем сайте как jimjones@microsoft.com
.
Jim
запрашивает сброс пароля, но не использует его. Письмо о сбросе осталось навсегда в его почтовом ящике.
Jim
меняет свой адрес электронной почты на вашем сайте.
jimjones@gmicrosoft.com
скомпрометировано Bob
.
Bob
теперь выполняет грубую атаку через свою распределенную ферму GPGPU и восстанавливает пароль Jim
.
Сценарий 2:
Jim
использует пароль jimjonesupinthisma!
для своего банковского счета.
Jim
регистрируется на вашем сайте как jimjones@microsoft.com
. jimjones@microsoft.com
- это , а не , никак не связанный с банковским счетом Jim
.
jimjones@gmicrosoft.com
скомпрометирован Bob
.
Bob
теперь запрашивает сброс, теперь у него HASH(HASH(jim's password))
.
Bob
теперь выполняет грубую атаку через свою распределенную ферму GPGPU и восстанавливает пароль Jim
, который он затем использует для доступа к банковскому счету Jim
.
Сценарий 3:
(Ваш сайт использует TLS, пользователи регистрируются через TLS.)
Jim
регистрируется на вашем сайте как jimjones@microsoft.com
.
Bob
запрашивает сброс пароля для учетной записи Jim
.
Bob
работает для АНБ в Комната 641A .
Bob
использует свой глобальный интернет-сниффер и получает HASH(HASH(jim's password))
в виде открытого текста на jimjones@microsoft.com
.
Bob
теперь выполняет грубую атаку через свою распределенную ферму GPGPU и восстанавливает пароль Jim
.
Варианты сценариев 1 и 2 происходят постоянно (в зависимости от того, насколько сильны хеш и пароль), я не уверен насчет 3. Суть в том, что ваш метод извлекает ненужную информацию, которая действительно может использовать атакующего против вашего пользователя.
Я предлагаю вам использовать случайно сгенерированные токены, которые ничего не имеют , имеющие отношение к паролю пользователя.