Адрес электронной почты в качестве пароля соль? - PullRequest
9 голосов
/ 24 сентября 2010

Это плохая идея использовать адрес электронной почты в качестве соли для пароля?

Ответы [ 6 ]

20 голосов
/ 24 сентября 2010

EDIT:
Позвольте мне отослать вас к этому ответу по Security StackExchange , который объясняет множество деталей о хешировании паролей и получении ключей.

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

Если в вашей языковой библиотеке есть функция, при обновлении проверьте, что она делает то, что должна, особенно если это PHP.

Ответ, приведенный ниже, оставлен по историческим причинам.

Вы можете использовать имя пользователя для входа в систему как соль, которая может измениться реже, чем адрес электронной почты ( РЕДАКТИРОВАТЬ: 0xA3 правильно указано, это менее безопасно чем использование адреса электронной почты, потому что имена для входа, как правило, легче угадать, а некоторые довольно часто используются, так что радужные таблицы уже могут существовать для них или могут быть использованы для других сайтов).

В качестве альтернативы, есть столбец базы данных, в котором вы сохраняете соль для пароля.
Но тогда вы могли бы также использовать случайную пользовательскую соль, которую сложнее угадать.

Для большей безопасности вы можете использовать две соли: пользовательскую и общесистемную (объединить их, затем хешировать соли с паролем).

Кстати, простое объединение соли и паролей может быть менее безопасным, чем использование HMAC . В PHP 5 есть функция hash_hmac(), которую вы можете использовать для этого:

$salt = $systemSalt.$userSalt;
hash_hmac('sha1', $password, $salt);

РЕДАКТИРОВАТЬ: Обоснование для всей системы соли: она может и должна храниться вне базы данных (но резервное копирование . Вы не сможете аутентифицировать своих пользователей если ты его потеряешь). Если злоумышленнику каким-то образом удастся прочитать записи вашей базы данных, он все равно не сможет эффективно взломать хеши паролей, пока не узнает общесистемную соль.

РЕДАКТИРОВАТЬ (немного не по теме):
Еще одно замечание о безопасности хэшей паролей: вы также можете прочитать Почему соли делают невозможными атаки по словарю? при многократном хешировании для дополнительной защиты от грубых атак и атак радужных таблиц (хотя я подумайте, что повторное хеширование может создать дополнительные возможности для атак типа «отказ в обслуживании», если вы не ограничите количество попыток входа в систему за раз).

Примечание

Учитывая рост многоцелевых многоядерных систем (видеокарты, программируемые микроконтроллеры и т. Д.), Может быть целесообразно использовать алгоритмы с высокими вычислительными затратами наряду с солями для противодействия взлому, например используя многократное хеширование, как PBKDF2. Однако вам следует ограничить количество попыток аутентификации за единицу времени, чтобы предотвратить атаки DDoS.

Еще одна вещь: Еще одним основным обоснованием использования «пользовательского» хэширования, построенного на широко используемых стандартах, а не на широко используемой предварительно созданной функции, был сам PHP, который доказал, что не заслуживает доверия вообще, когда дело доходит до реализации связанных с безопасностью вещей, будь то генераторы случайных чисел, которые не так случайны, или функция crypt(), которая вообще не работает при определенных обстоятельствах, тем самым полностью обойдя любые преимущества, которые должна обеспечить функция хеширования паролей, требующих большого объема вычислений или памяти.
Из-за их детерминированных результатов простые хэш-функции с большей вероятностью будут протестированы должным образом, чем выходные данные ключевой деривационной функции, но ваш пробег может отличаться.

6 голосов
/ 24 сентября 2010

Я не специалист по криптографии, однако есть 3 вещи, которые особенно меня удивляют, если это возможные проблемы с этим предложением.

  1. Как отмечает Марк, электронная почта может измениться, однако сольдолжен оставаться неизменным для данного пароля (иначе вы не сможете проверить действительность пароля).
  2. Размер адресов электронной почты является переменным, и я полагаю, что важно, чтобы сольбыть больше определенного размера.
  3. Использование адреса электронной почты делает соль намного более предсказуемой, что обычно плохо для криптографии.

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

4 голосов
/ 24 сентября 2010

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

1 голос
/ 29 января 2014

Как и все, что связано с безопасностью, ответ зависит от вопроса, который не включал информацию о насколько безопасным вы хотите, чтобы система была. Самое безопасное здание - одно без окон или дверей; это также самое бесполезное здание.

С самого высокого уровня: нет, это не плохая идея. Это тоже не очень хорошая идея. Однако это может быть достаточно хорошим - или более чем достаточно - для вашего приложения.

Если у кого-то есть радужная таблица для определенного адреса электронной почты, сможете ли вы остановить его, хешируя пароль со случайной солью? Хорошие хакеры идут по пути наименьшего сопротивления, который может включать получение root-доступа к вашей системе и загрузку солт и пользовательских таблиц. (Защищены ли они отдельно?) Если это так, у них есть время, пока пароль не будет изменен, чтобы соответствовать хешу, независимо от установленного системой количества неудачных попыток входа в систему или того, что вы выбрали для соли.

Насколько больше сложностей возникает из-за случайной соли в вашем приложении? Насколько решительным хакером вы пытаетесь помешать? Какие другие меры - максимальная блокировка последовательных сбоев, периоды принудительного истечения срока действия пароля, входящие и DoS-оповещения, брандмауэры и т. Д. - у вас есть? Ответ лежит где-то в конвергенции между ответами на эти вопросы и, возможно, другими.

1 голос
/ 24 сентября 2010

Ophcrack (который, вероятно, будет использовать большинство злоумышленников, в зависимости от вашей функции шифрования) не содержит таблиц со специальными символами, такими как «.» или '@', если вы не доберетесь до самых больших ("расширенных") таблиц. Поэтому использование электронной почты, вероятно, будет лучше, чем многие другие соли.

1 голос
/ 24 сентября 2010

Как уже упоминалось, соль должна быть случайной. Целью соли является предотвращение атак с использованием радужных таблиц с использованием предварительно вычисленных хеш-словарей.

Предполагая, что злоумышленник узнает хешированные пароли и соли из вашей базы данных, если соль - "a74kd% $ QaU", а пароль - "12345", сможет ли он взломать его, используя радужную таблицу? Нет, даже если пароль слабый, у злоумышленника не будет предварительно рассчитанного хэш-словаря для вашей случайной соли.

Если вы, однако, используете неслучайную соль, такую ​​как идентификатор пользователя или адрес электронной почты, более вероятно, что кто-то уже создал радужную таблицу для этой соли, надеясь найти пользователя с именем пользователя "john" или адресом электронной почты "john". doe@example.com " 1

1 Безопасность WPA для беспроводных локальных сетей использует SSID точки доступа в качестве соли. Жаль, что кто-то уже предварительно вычислил хэши для самых частых имен SSID.

...