Лучшая практика паролей Hashing

81
6

Я хотел бы знать, какой метод использовать для хранения паролей в базе данных. Я реализовал его с использованием MD5, но в соответствии с некоторыми сообщениями SHA1 более безопасен. Есть ли другой способ, который более безопасен?
Пожалуйста, помогите мне найти лучший способ для защиты паролей.

спросил(а) 2020-04-04T00:21:59+03:00 6 месяцев, 2 недели назад
1
Решение
166

Sure SHA1 более безопасен для MD5, но для большинства целей он недостаточно безопасен.


Вы, вероятно, найдете полезное видео КАК НЕ хранить пароли с помощью Computerphile - 9 минут и 24 секунды.


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


При хранении паролей.


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


Примечание. При генерации случайных значений для целей безопасности используйте криптографический защищенный генератор (например, подкласс RandomNumberGenerator for. NET - пример). Этот генератор случайных чисел не может быть предсказан. Хотя стандартный генератор случайных чисел должен быть повторяемым (то есть с System.Random все, что вам нужно, это семя для генерации всех значений и чтобы угадать семя, в котором вы нуждаетесь, достаточно последовательных значений, сгенерированных одним и тем же семенем).


Также обратите внимание. Большинство хэшей оптимизированы для быстрого вычисления, в этой категории попадают как MD5, так и SHA1. Вы должны выбрать тот, который не так быстр, так что атака займет разумное количество времени, чтобы вычислить хэши при попытке взломать ваши пароли.


Одним из таких алгоритмов является BCrypt - другие включают Scrypt и PBKDF2 - при использовании BCrypt из С# вы найдете статью Use BCrypt для хеширования ваших паролей: пример для С# и SQL Server. Если вы не можете использовать ресурс для BCrypt или аналогичного алгоритма, вы должны использовать вариант SHA2 (SHA256, SHA512 и т.д.).


Ниже приведено рекомендуемое чтение:


Также видео: Crypto is Back! - Google Tech Talk - 5 августа 2009 г. - 54 минуты и 32 секунды.


При восстановлении пароля.


Прежде всего: не надо. Пункт восстановления пароля - это не восстановление пароля, а восстановление доступа к приложению. Итак... как вы восстанавливаете доступ к приложению?


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


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


Теперь, если пользователь представляет вашему приложению этот код, вы почти уверены, что он является правильным пользователем.


Почти потому, что: электронные письма (или что-то еще) могут быть сохранены в незащищенном месте. Чтобы смягчить это, вы хотите установить лимит времени на свой код (cookie или токен). Кроме того, если код был использован, он должен НЕ работать снова. И для дополнительной защиты вы можете использовать ресурс CAPTCHA, чтобы этот код не исходил от бота, которому только что повезло.


Подробнее об этой теме (эти ссылки также представлены выше):


ответил(а) 2020-04-04T00:31:01.827537+03:00 6 месяцев, 2 недели назад
71

SHA1 имеет меньше уязвимостей, чем MD5. Это более новый алгоритм, который использует больше бит и требует больше обработки для "взлома". Вы можете просмотреть большинство основных хеш-алгоритмов и их известные уязвимости здесь: http://en.wikipedia.org/wiki/Cryptographic_hash_function

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

ответил(а) 2020-04-04T00:21:59+03:00 6 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема