1

Я надеюсь, что это был правильный StackExchange для публикации, поскольку это не связано с программированием. Извините если нет.

Если у меня есть пользовательская система, будь то тонкий клиент, веб-приложение, программное обеспечение и у меня есть 2 пользователя, Билли и Джон. Билли и Джон имеют один и тот же пароль по совпадению, pass1234, но разные электронные письма, таким образом:

billy@test.com - pass1234

john@test.com - pass1234

Если Билли случайно наберет адрес электронной почты Джона и войдет в систему, то он наверняка сможет войти под ним; по чистой случайности они имеют один и тот же пароль.

Существуют ли какие-либо механизмы программирования / системы / администратора для предотвращения чего-то подобного? Как то, что мешает кому-то использовать фиксированный пароль "Passw0rd", а затем перебирать тысячи разных писем, пока они не получат хит. (исключая использование каптчей)

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

3 ответа3

5

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

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

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

Т.е. Если вы не разрешаете своим сотрудникам создавать простые пароли, такие как "Password1", но требуют, чтобы они вводили заглавные буквы, цифры, символы, то вероятность того, что они введут тот же пароль, не исключается, потому что, например, кто-то может легко это сделать «Password123!».

Хеширование защищает только те данные, которые хранятся в базе данных, потому что сервер берет введенные пользователем данные -> получает хеш, соль (и перец, если они используются) -> обрабатывает введенные и полученные из БД данные по алгоритму -> если результат сравнивается с сохраненным хешем, то данные верны и позволяют пользователю войти. Это только для проверки деталей - ничего общего с тем, что пользователь вводит и выбирает установленный им пароль. Соль и перечеркивание позволяют просто не дублировать хеш в другом месте базы данных (т. Е. Если два хеша идентичны, то пароль будет одинаковым для обеих учетных записей - baaad).

Как сказали другие ответы, лучшим решением является многофакторная (более одного из следующих, но не более одного и того же фактора) аутентификация:

  1. Что-то у вас есть -> смарт-карта, генератор RSA и т.д.
  2. Что-то, что вы знаете -> пароль или пин-код
  3. Что-то вы -> биометрические (отпечатки пальцев, сетчатка и т.д.)

Например

  • Смарт-карта + Пароль = Хорошо
  • Генератор RSA + Пароль + Отпечаток пальца = Хорошо
  • Пароль + PIN = Плохо
1

Честно говоря, вероятность того, что это произойдет «случайно», невелика, однако именно так «взламываются» учетные записи со слабыми паролями. Если вы наберете достаточное количество учетных записей, вы наверняка в конечном итоге получите один с неверным паролем.

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

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

0

Вы можете использовать двустороннюю аутентификацию,

Пример: пароль + OTP или пароль + идентификатор RSA

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .