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

11

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

Боб Ларри
источник
5
Компьютер не будет знать, если они похожи. Он будет знать только, если они были идентичны (путем хеширования нового пароля и сравнения его с сохраненным хешем исходного пароля).
Роберт Харви
Тем не менее, существуют способы генерирования хэша, которые фиксируют часть характеристик пароля. Доступность таких хэшей, однако, является большой лазейкой, потому что взломщики паролей могут также использовать такую ​​информацию, чтобы сузить поиск паролем путем перебора на много порядков.
rwong
Если вам нужно сравнить пароли, вы не будете использовать хэши. Скорее всего, вы будете использовать AES или другие виды симметричного шифрования
Laiv

Ответы:

15

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

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

Ли Райан
источник
«Сбросить пароль» обычно означает «Я забыл свой пароль и хочу его сбросить», поэтому вам не нужно будет запрашивать старый пароль. Вторая половина вашего ответа точна, хотя.
Касабланка
3
@casablanca: существует множество систем, в которых вы «сбрасываете» свой пароль каждые X дней ....
whatsisname
1
@casablanca: первая половина также точна, «сброс пароля» может иметь оба значения, терминология не такая уж жесткая. Нам нужно спросить у ОП, что именно они имели в виду.
Док Браун
12

Ответ прост: безопасная система не знает, похожи ли они.

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

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

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

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

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

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

Kain0_0
источник
7

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

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

Йорг Миттаг
источник
Да, люди вполне предсказуемы в тех изменениях, которые они сделают, так что это может быть достойным способом сделать это.
киборг
Это очень быстро взорвется с точки зрения обработки, требующей только самых коротких паролей. Поэтому я не верю, что это настоящая практика.
Мартин Маат
Я работал в одном месте довольно долго, и когда я оставил свой пароль, был supersecurepassword39. (Только последние две цифры верны). Очевидно, что пароль начинается или заканчивается цифрой, чтобы увидеть, использовался ли предыдущий номер.
gnasher729
@MartinMaat Будет ли это хотя? Вы можете обнаружить, скажем, добавление или увеличение числа путем исключения символов один за другим из исходного пароля. Т.е. для «пароля» вы хэшируете «assword» (хи-хи), «pssword», «pasword» и т. Д. Вы можете даже избежать использования более слабых вариантов для них из-за дополнительной сложности, связанной с попыткой 256 перестановок каждого из них. если вам случится перебором второго хэша. (Более того, если вы храните их в случайном порядке, и вы не знаете, какой персонаж был выбран в каком-либо, тогда это 256 * N для каждого.)
millimoose
Это делает настройку нового пароля в N раз дороже, когда N - длина пароля, не включая проверки сходства, которые должны быть намного дешевле, чем хеширование. Но вы хэшируете пароли каждый раз, когда пользователь входит в систему, и это, вероятно, происходит гораздо чаще, чем смена пароля, поэтому я сомневаюсь, что дополнительная нагрузка будет такой заметной.
миллимус
2

Другим примером является то, что ваша система хеширует некоторые характерные подмножества вашего пароля и сохраняет эти хеш-коды, чтобы проверить, соответствует ли подмножества нового пароля любому из старых, а именно: пароль: «Admin2018» & subset: «Admin» = не может ввести «Admin2019» как новый.

Лукаш Матисяк
источник
1

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

SKDev
источник