2010-09-24 2 views
7

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

+0

Какую длину вы, ребята, рекомендуете соли? – Starlin

+3

Если это единственная соль, использующая электронную почту, она ослабляет безопасность ваших пользователей, так как несколько веб-сайтов, использующих одну и ту же систему, будут разрешены с использованием той же таблицы радуги для данного пользователя. Даже если пользователь потратил время на использование одного пароля на веб-сайт/услугу. –

+0

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

ответ

18

EDIT:
Сошлюсь на этот answer on Security StackExchange который объясняет много подробностей о хэширование паролей и ключевой вывод.

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

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

Ответ на этот вопрос по историческим причинам.

Вы можете использовать имя входа пользователя в виде соли, которая может быть менее вероятно, изменится, чем адрес электронной почты (EDIT:0xA3 правильно указал, это менее безопасно, чем использование электронной почты, потому что логические имена, как правило, легче угадать, а некоторые довольно часто используются, так что для них могут существовать радужные таблицы или их можно использовать повторно для других сайтов).

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

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

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

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

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

EDIT (немного не по теме):
Еще записка о безопасности пароля хэш: Вы также можете прочитать Why do salts make dictionary attacks 'impossible'? на хэширования несколько раз для дополнительной защиты от грубой форсирования и радужных атак таблицы (хотя Я думаю, что повторное хеширование может создать дополнительные возможности для атак типа «отказ в обслуживании», если вы не ограничите количество попыток входа за раз).

ПРИМЕЧАНИЕ

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

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

+0

Это интересно ... Я никогда не слышал о HMAC ... Я прочитаю об этом – Starlin

+1

Использование имени входа в качестве соли даже хуже, чем использование электронной почты. Это упрощает предварительное вычисление ваших радужных таблиц, потому что есть имена пользователей, которые вы найдете практически на любом сайте. Кроме того, мне нравится ваш подход с использованием двух солей, и это будет +1. –

+0

Спасибо, 0xA3. Обновил мой ответ соответственно. – Archimedix

4

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

+4

Нет, это не так. –

+1

Соль предназначена для того, чтобы сделать грубое форсирование и использование радужного стола более сложным, если база данных была скомпрометирована ... поэтому я не понимаю вашу точку. – Starlin

+0

Соль предназначена для того, чтобы сделать радужные столы непригодными для использования в первую очередь. Но да, это тоже может помешать грубой силе. Хотя для надежного пароля это ничтожно. Лучше считать, что соль была скомпрометирована. И, вы знаете ... говоря о таких вещах, в то время как 99% приложений, отправляющих пароли в виде простого текста по сети, смешно –

6

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

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

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

1

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

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

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

WPA безопасности для беспроводных сетей использует SSID точки доступа в виде соли. Слишком плохо, кто-то уже pre-computed hashes для наиболее часто встречающихся имен SSID.

+3

0xA3, такое сосуществование, я создаю радужный стол, используя соль «[email protected]». Я понимаю вашу точку зрения, но нет человека в мире с радужными столами с солью «[email protected]». Они занимают слишком много времени, чтобы сделать и требуют слишком много места для хранения, чтобы кто-то сделал такой стол ... Я, однако, собираюсь пойти со случайной солью, потому что я понял, что в будущем есть вероятность, что письмо может необходимо изменить. – Starlin

+0

@Starlin: адреса электронной почты могут быть лучше, чем имена пользователей или значения SSID, но зачем делать вещи излишне легкими для атаки? Радужные таблицы SSID из ссылки в моем ответе были сгенерированы всего за 3 дня и имеют размер всего 40 ГБ. И здесь возникает другой момент: функция хеширования должна быть медленной. –

+0

@ 0xA3: WPA также автоматически меняет ключи на интервал. Если интервал меньше, чем время поиска радуги, вы также можете использовать фиксированную соль. – ssamuel

1

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

+0

Это интересное наблюдение. Если вы искренне обеспокоены таблицей радуги или грубой силой, использование более сложной соли принесет определенную пользу. – Freiheit

1

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^