2016-09-23 3 views
0

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

+1

Настоящая проблема заключается в неправильных правилах пароля. Предоставляя пользователям периодически менять пароль, вы гарантируете, что пользователи будут иметь плохие пароли и, скорее всего, напишут их на заметках «posit». Новые предложенные NIST правила (800-63-3: Руководства по цифровой аутентификации) вызывают это как практику, которая не должна выполняться. Dont: 1. Требовать правила композиции. 2. Разрешить подсказки. 3. Требовать истечение срока действия пароля. См. [Новые правила пароля] (https://nakedsecurity.sophos.com/2016/08/18/nists-new-password-rules-what-you-need-to-know/). OTOH ваша организация может быть более заинтересована в использовании неудачной практики. – zaph

ответ

1

Есть две возможности:

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

Например, если вы вводите в свой новый пароль, как «password7», то сайт может делать ряд проверок, таких как:

password_hash("password0", old_salt) == value stored in database? 
password_hash("password1", old_salt) == value stored in database? 
password_hash("password2", old_salt) == value stored in database? 
password_hash("password3", old_salt) == value stored in database? 
password_hash("password4", old_salt) == value stored in database? 
password_hash("password5", old_salt) == value stored in database? 
password_hash("password6", old_salt) == value stored in database? 
password_hash("password7", old_salt) == value stored in database? 
password_hash("password8", old_salt) == value stored in database? 
password_hash("password9", old_salt) == value stored in database? 

Это было бы очень, очень медленно если они использовали правильный алгоритм хэширования паролей (например, bcrypt или scrypt), но я не удивлюсь, если это действительно выполняется в некоторых реализациях.

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

+0

Спасибо за логический ответ. Но это, кажется, очень вероятностный подход. Как определить анаграммы нового пароля. Кроме того, ближайший анаграмма, например, hash пароля6, может сильно отличаться от хэша пароля 7 или пароля пароля7. Если это так, я тогда снова подумаю, что вопрос все еще открыт. – siddhusingh

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