Хэширование обработка электронных писем, используемых при аутентификации — хорошая или плохая практика?

#django #security #authentication #hash #salt

#django #Безопасность #аутентификация #хэш #соль

Вопрос:

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

Ответ №1:

Солить и хэшировать имена пользователей / адреса электронной почты не является стандартной практикой.

Это правда, что злоумышленник не сможет идентифицировать сохраненные имена пользователей / адреса электронной почты, если они будут солены и хэшированы перед хранением. Фактически, никто не сможет получить доступ к именам пользователей / электронным письмам (включая авторизованных пользователей, таких как системный администратор).

  • Звучит безопасно, так почему же это проблема?

Когда пользователь пытается войти в систему, он отправляет имя пользователя (или электронную почту) и пароль. Поскольку каждая соль уникальна для этого конкретного имени пользователя, единственный способ связать имя пользователя / адрес электронной почты с сохраненным хэшем имени пользователя / email — это проверять каждую комбинацию соль хэш, пока не будет найдено совпадение или каждая запись не будет опробована / отклонена.

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

Кроме того, если вы солите имена пользователей, то как вы предотвратите дублирование?

Имена пользователей должны быть уникальными. Если вы солите имя пользователя, у вас нет способа запретить нескольким пользователям использовать одно и то же имя пользователя.

  • Какие еще методы может использовать разработчик для защиты информации?

Наиболее очевидным решением является шифрование базы данных. Хотя это немного выходит за рамки вашего вопроса, в Википедии есть хорошая статья, посвященная этой теме.

Комментарии:

1. Спасибо за четкий ответ. Ценю это! Имеет смысл!

2. @bsheps, что, если использовать одну и ту же соль для всех записей? Вы говорите «Поскольку каждая соль уникальна для этого конкретного имени пользователя» — и было бы разумно, если бы вы использовали ее для паролей. Но в этом случае намерение состоит в том, чтобы скрыть фактические адреса электронной почты.

3. Вы не хотите повторно использовать соль. Например, если у 2 пользователей (user1, user2) одинаковый пароль соль, хэшированное значение будет одинаковым. Если злоумышленник знает пароль пользователя 1 в виде открытого текста хэшированный пароль, то злоумышленник может сделать вывод, что у пользователя 2 такой же пароль. Дополнительная информация: en.wikipedia.org/wiki/Salt_ (криптография)#Salt_re-use

Ответ №2:

Хэширование и соление имен пользователей и адресов электронной почты не является обычным делом по нескольким причинам:

Удобство использования

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

Безопасность

С точки зрения безопасности вы мало что выиграете, хэшируя свой адрес электронной почты. Представьте, что если бы у кого-то был доступ к вашему адресу электронной почты, он мог бы использовать тот же алгоритм хэширования и легко найти ваши учетные данные, выполнив итерацию по базе данных. Вот почему некоторые веб-сайты внедрили отдельные имя для аутентификации при входе и отображаемое имя. Имя входа остается хэшированным (несоленым), в то время как отображаемое имя сохраняется без хэша. Если у злоумышленника нет вашего имени для входа / адреса, нет никакого способа скомпрометировать ваши данные. В данном конкретном случае хэширование адресов электронной почты гарантирует полную безопасность ваших данных.