Преимущества безопасности от второго мнения, есть ли недостатки в моем плане хеширования и сохранения паролей пользователей с помощью postgresql?

Вот мой план и цели:

Общие цели:

  • Безопасность с определенной простотой и возможностью переноса базы данных в базу данных, потому что я не эксперт и могу все испортить, и я не хочу просить множество пользователей сбрасывать свои пароли.
  • Легко стереть пароли для публикации "протертой" базы тестовых данных. (например, я хотел бы иметь возможность использовать оператор postgresql, чтобы просто сбросить все пароли на что-то простое, чтобы тестировщики могли использовать эти данные тестирования для себя).

План:

Хеширование паролей

При создании учетной записи навсегда сохраняется исходный адрес электронной почты, с которым создается учетная запись.

  • Используется глобальная соль, например "90fb16b6901dfceb73781ba4d8585f0503ac9391".
  • Используется специальная соль учетной записи, исходный адрес электронной почты, с которым была создана учетная запись, например "[email protected]".
  • Используется пароль пользователя, например "password123" (я буду предупреждать о ненадежных паролях в форме регистрации)

Комбинация глобальной соли, соли для конкретной учетной записи и пароля хэшируется с помощью некоторого метода хеширования в postgresql (не удалось найти документацию по функциям хеширования в postgresql, но возможность использовать sha-2 или что-то в этом роде было бы хорошо, если бы я смог его найти).

Хеш сохраняется в базе данных.

Восстановление аккаунта

Чтобы изменить свой пароль, они должны пройти стандартный сброс пароля (и это письмо для сброса будет отправлено на исходный адрес электронной почты, а также на последний адрес электронной почты учетной записи, который они установили).

Недостатки?

Есть ли здесь какие-либо недостатки, которые мне нужно исправить? И есть ли лучшие практики для полного хеширования в postgresql?


person Kzqai    schedule 14.04.2010    source источник


Ответы (1)


Я бы не стал делать данные пользователя частью соли. Что, если администратору нужно изменить адрес электронной почты пользователя, например (кто-то, кто не знает пароль пользователя, чтобы иметь возможность повторно сгенерировать хеш). Вместо этого используйте метку времени создания учетной записи или случайное значение, хранящееся в записи, или какое-либо другое неизменяемое значение, зависящее от пользователя.

person MightyE    schedule 14.04.2010
comment
Что ж, я планирую сохранить адрес электронной почты, с которым учетная запись была впервые создана, как есть, на неограниченный срок, но разрешить добавление и изменение электронной почты активной учетной записи пользователем по желанию, чтобы администратор мог просто изменить активный адрес электронной почты. и не изменять исходный адрес электронной почты. Я мог бы просто создать случайную, специфичную для пользователя соль - из - исходного письма в качестве дополнительного слоя, я полагаю, спасибо. Полагаю, это дает дополнительное преимущество в виде запутывания электронной почты. - person Kzqai; 15.04.2010
comment
Пока он неизменен после создания учетной записи, и его также сложно угадать. Использование случайного значения или метки времени с точностью до миллисекунды, вероятно, немного безопаснее, чем получение ее из пользовательских данных, только потому, что это труднее угадать. Но ваша цель будет служить до тех пор, пока вы знаете, что всегда можете надежно воссоздать хэш для данного пароля в виде открытого текста. - person MightyE; 15.04.2010