2016-12-29 4 views
1

Я создал простое приложение MVC4 и зарегистрировал пользователя. Имя usr и пароль хранятся в таблице под названием AspNetUsers. В этой таблице нет солевого поля.ASP.NET Identity - где хранится соль?

Как я понял, когда пользователь входит в систему; они вводят имя пользователя и пароль. Затем соль объединяется с введенным паролем и сравнивается с паролем в базе данных. Это неправильно? т.е.

Hash(PasswordEntered) + Salt = Password in database = authenticated 
Hash(PasswordEntered) + Salt <> Password in database = not authenticated 

Существует поле под названием: aspnetusers.SecurityStamp, однако мое исследование говорит мне, что это не соль.

Update

Я только что прочитал Скотт Чемберлена. Пожалуйста, ознакомьтесь с инструкциями ниже:

1) Пользователь вводит: Hello123 в качестве пароля при регистрации, а соль (произвольно сгенерированная): 456, то пароль, введенный в PasswordHash: Hello123 + 456 2) Затем пользователь пытается ввести логин и ввести Hello123 (правильно) в качестве пароля. Соль (произвольно сгенерированная) равна: 567. Поэтому Hello123 + 456 сравнивается с Hello123 + 567, и аутентификация терпит неудачу.

В этом случае пользователь вводит правильный пароль и не аутентифицируется. Мне явно не хватает чего-то фундаментального здесь.

+0

в моей БД в AspNetUsers есть летающая называется [PasswordHash] –

+0

@federico scamuzzi, спасибо. Однако, где соль? – w0051977

+0

там в поле taht есть ваш пароль ... соленое –

ответ

2

У вас есть образец неправильный, правильным было бы

Hash(PasswordEntered + Salt) = hash in database = authenticated 
Hash(PasswordEntered + Salt) <> hash in database = not authenticated 

Путь поставщик для ASP.net работает, он хранит в поле пароля Salt + Hash(PasswordEntered + Salt). Поэтому, когда вы пытаетесь проверить пароль, вы просто используете деталь перед разделителем в соли и сравниваете ее с частью после разделителя.

+0

Спасибо. В этом случае значение Salt должно быть одинаковым для каждого пользователя (так как нет способа идентифицировать его для каждого пользователя). Это верно? +1 для исправления формулы. – w0051977

+0

Нет. Для соли, полезной для каждого хеширования, должна быть уникальная соль. Значение, которое использовалось для соли, не является секретной информацией и не нуждается в скрытии. См. [Этот ответ] (http://stackoverflow.com/a/21496255/80274), чтобы узнать больше о том, как он хранится. –

+0

Нет, соль хранится в той же колонке рядом с засоленным и хешированным паролем – phuzi

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