Какой смысл хэшировать пароли в базе данных? - PullRequest
0 голосов
/ 08 ноября 2018

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

Это пример из средний

UserSchema.pre('save', function (next) {
  var user = this;
  bcrypt.hash(user.password, 10, function (err, hash){
    if (err) {
      return next(err);
    }
    user.password = hash;
    next();
  })
});

Говорят, что хэш это здесь

bcrypt.compare(password, user.password, function (err, result) 

Здесь они распаковывают его, когда пользователь пытается войти в систему. Что смущает меня, если толстый, что, если они могут так легко распаковать его, атакующий тоже не сможет его распаковать? Может кто-нибудь объяснить мне это?

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Какой смысл хэшировать пароли в базе данных?

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

Если я могу это сделать, разве они тоже не могут?

bcrypt - это односторонний шифр. Как только открытый текст закодирован, вы не получите его обратно.

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

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

0 голосов
/ 08 ноября 2018

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

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

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

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

...