Могут ли хакеры расшифровать пароль членства в ASP.NET?

Я реализую членство в ASP.NET, используя поставщика SQL по умолчанию, настройки web.config по умолчанию.

Я замечаю, что пароли хэшируются. Но я не знаю, как asp.net хэширует мои пароли, поэтому я не уверен, может ли хакер расшифровать это?

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

Например. Если asp.net использует MD5 (123456), результатом чего является «E10ADC3949BA59ABBE56E057F20F883E», тогда у хакера может быть словарь MD5 для поиска этого.

Мои настройки:

<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
             enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
             maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
             applicationName="/" />

-- Заявление SQL:

SELECT am.UserId, am.[Password], am.PasswordSalt FROM aspnet_Membership am

-- Результат:

F10A635D-22DA-419C-84E6-767D2A35A010,tpeiwPt5+kFbcocQZOuc4aoHeuI=,PVq9dPtbFxze9Erbfd7HrA==

Пароль 123456, он стал "tpeiwPt5+kFbcocQZOuc4aoHeuI=".

Всегда ли это значение одинаково на разных машинах или в разных приложениях?

Если это значение как-то связано с солью "PVq9dPtbFxze9Erbfd7HrA==", могут ли хакеры использовать эту соль для расшифровки моего пароля?


person Edi Wang    schedule 27.07.2012    source источник


Ответы (1)


Чтобы ответить на этот вопрос, вы должны понимать две вещи: роль хэшей и роль солей.

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

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

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

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

person atomicinf    schedule 27.07.2012