Я создаю анонимный сайт. Таким образом, в основном учетная запись пользователя не может быть прослежена до любого фактического лица (например, по электронной почте). Аутентификация - это та часть, о которой я бы хотел подумать. Если я использую коммит электронной почты/пропуск для проверки подлинности, могу ли я использовать bcrypt для хеширования как адрес электронной почты, так и пароль (я знаю, что это возможно, но насколько это практично)? Я думал, что если электронное письмо зашифровано, то будет очень медленно искать db, чтобы найти совпадение. Это правда/ложь? Что ты думаешь? Любые другие идеи? В принципе, я открыт для любых идей о том, как аутентифицироваться, но если он аутентифицирован с помощью электронной почты, он не может быть доступен/дешифрован. Благодаря!bcrypt hash как адрес электронной почты, так и пароль
ответ
Как только у вас есть что-то, оригинал никогда не может быть восстановлен.
Давайте возьмем пароль, например, когда пользователь подписывается с адресом электронной почты/паролем, вы получите пароль (с чем-то вроде bcrypt), а затем сохраните хэш в своей базе данных. Это здорово, потому что, если злоумышленник получает копию базы данных, невозможно «дешифровать» хэш.
В вашей ситуации вы, вероятно, НЕ хотите хешировать электронную почту, потому что это означает, что вы никогда не сможете отправить электронное письмо человеку, который, как я предполагаю, вам захочется сделать.
Если вы решите пойти по этому маршруту, в основном вы будете хранить только два пароля на пользователя (это самая близкая аналогия, с которой я мог бы придумать, извините!).
Надеюсь, что это поможет!
EDIT: Лучший способ сделать это - создать новую учетную запись, предоставляемую ТОЛЬКО паролем, - и затем вы автоматически создадите имя пользователя для пользователя. Это то, что делают компании, такие как privateinternetaccess.com, - они генерируют вам случайное имя пользователя - таким образом вы не можете связаться с пользователем, но они все равно могут безопасно войти в ваше приложение.
Я не вижу проблем с вашей идеей (предполагая, что вы никогда не хотите асинхронно отправлять электронную почту пользователю).
Логин:
- сообщения пользователя это форма Логина, который имеет читаемый адрес электронную почту и пароль открытого текста (вы, конечно, использовать хороший TLS транспортного шифрование)
- а = А (электронную почту), рН = H (пароль)
- извлечь запись из базы данных пользователей, где а == stored_eh
- сравнить тела против stored_ph
забыл пароль пр ocedure: в тот самый момент, когда пользователь отправляет форму «забыли пароль» с его адресом электронной почты cleartext, у вас есть его электронная почта. compute eh, lookup profile, генерировать токен onetime, хранить его в профиле и помещать его в почту на свой адрес электронной почты. он может использовать токен для определения нового пароля.
изменить процедуру электронной почты: аналогично выше, у вас есть старый или новый адрес электронной почты с открытым текстом в момент публикации формы.
Примечания:
- БД поиска на шаге 3 не медленнее, чем при использовании открытого текста поиска ключей
- для 2 и 4, использовать некоторые вменяемый код из хорошо поддерживаемой библиотеки (Scrypt, Bcrypt, pbkdf2, sha512_crypt, а не просто соленый хэш)
- если злоумышленник получает вашу базу данных и имеет список потенциальных админов электронной почты, он может легко узнать, есть ли у вас (некоторые из них) их как пользователей и определить их пользовательскую запись в вашем дБ. если это проблема, возможно, вы можете использовать h (адрес электронной почты + пароль), но тогда нет возможности восстановления пароля.
- 1. Адрес электронной почты как пароль соли?
- 2. Пароль не работает с паролем hash BCRYPT
- 3. django изменить адрес электронной почты - подтвердить пароль
- 4. Как вставить «адрес электронной почты» и «пароль» в исходный код
- 5. Как получить адрес электронной почты и пароль пользователя в C#
- 6. Запросите адрес электронной почты и пароль Facebook из вашего приложения?
- 7. Хранить адрес электронной почты и пароль в базе данных
- 8. Форма, которая меняет адрес электронной почты и пароль
- 9. позволяют пользователям изменять свой пароль, адрес электронной почты и профиля
- 10. jsonPath и адрес электронной почты
- 11. Возможные способы для слепых ввести адрес электронной почты и пароль
- 12. Подтвердить адрес электронной почты и пароль в HTML
- 13. отправить адрес электронной почты и пароль google oauth
- 14. bcrypt и дезинфицирующий пароль?
- 15. Подтвердите адрес электронной почты Sandbox электронной почты
- 16. AngularFire2 Как создатьUser (имя, фамилия, адрес электронной почты, пароль)
- 17. Как отправить закодированный пароль с сервера на адрес электронной почты
- 18. Отправить bcrypt hash как параметр
- 19. Как работает пароль hash + salt
- 20. Любые причины не использовать bcrypt на адресах электронной почты?
- 21. javascript и адрес электронной почты
- 22. Как OCR адрес электронной почты
- 23. PHP: адрес электронной почты
- 24. Скопировать пароль хэшируются по Bcrypt
- 25. как подтвердить адрес электронной почты
- 26. как подстрочный адрес электронной почты
- 27. Адрес электронной почты Facebook: ...?
- 28. Как получить адрес электронной почты?
- 29. Как получить адрес электронной почты
- 30. Новый адрес электронной почты
Итак, вы в основном говорите: 1) что если я буду шифровать и электронную почту и передавать (отдельно), это не замедлит процесс проверки подлинности и 2) что, если я буду шифровать как (отдельно), так и пользователь забывает свой пароль. Я все еще могу сопоставить учетную запись (потому что электронная почта хэшируется отдельно) и использовать последнее электронное письмо, введенное для восстановления, для отправки по электронной почте маркера смены пароля. И если я не храню адрес электронной почты для восстановления и не храню журналы восстановленных писем электронной почты ... тогда db по-прежнему не отслеживается? – Jeffrey
hmm, некоторые дополнительные примечания: 1), конечно, он будет замедляться на количество времени, затрачиваемого на вычисление еще одного хэша (например, bcrypt) 2) для имени пользователя, вы хотите, чтобы каждый хэш-вычисление выдавал одинаковый хэш для того же имени пользователя, поэтому вы не должны использовать соль здесь [иначе вы не сможете найти запись из базы данных]. для паролей, конечно, вы должны использовать соль, так что у 2 пользователей с одинаковым паролем нет одинакового хэша. –