Повышение безопасности новой системы, построенной на устаревшей базе данных - PullRequest
1 голос
/ 09 января 2011

У нас есть старое устаревшее приложение ASP, которое хранило пароли клиентов в виде соленых хешей MD5. Мы написали новое приложение в ASP.NET MVC, чтобы заменить это.

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

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

Может ли кто-нибудь заметить недостатки этого метода? Мне кажется, что

Ответы [ 2 ]

1 голос
/ 09 января 2011

Вместо использования SHA1 вы должны использовать Bcrypt или что-то в этом роде.

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

Я бы предложил изменить код для обработки md5, md5 + bcrypt или bcrypt, затем вы можете запустить фоновый процесс для обновления паролей с md5 до md5 + bcrypt, в то время как код для входа в систему обновится до bcrypt? 1005 *

1 голос
/ 09 января 2011
  1. Расширить столбец для поддержки хэша
  2. Введите второй столбец для определения стратегии хеширования (или см. Ниже);по умолчанию - MD5 (поскольку это текущий хеш)
  3. Измените процедуры входа в систему (и аналогичные) и изменения / сброса пароля, чтобы определить, какая стратегия хеширования используется на основе этого значения, а затем применить ее;если значение хешируется с помощью «устаревшего» хеша, то обновите его в режиме без вывода сообщений (поскольку у пользователя будет пароль в виде простого текста после того, как вы его подтвердите)
  4. После некоторого разумного периода времени рассмотрите возможностьблокировка пользователей, которые не обновили хэши старых паролей

Вы можете автоматически определять некоторые стратегии хэширования, например, прямой MD5 или SHA1, на основе длины их закодированного вывода -MD5 в шестнадцатеричном формате занимает 32 байта, в то время как SHA1 требует 40. Однако «стратегия хеширования» может также включать в себя информацию (значимую для приложений - убедитесь, что вы тщательно ее документировали!) о любых других операциях, выполняемых с хешем, таких как солениемеханизм, или число хеш-итераций, и, как правило, немного более устойчивым.В будущем вы, возможно, захотите ввести третий хеш (скажем, Tiger-192) и повторить процесс обновления.

Если вы не можете сэкономить другой столбец, тогда расширьте существующий, чтобы поддерживать префикс с некоторым индикатором.хэша, например {SHA1}xxxxxxxxxxxxx - старые хэши не будут иметь префикса и могут быть приняты как MD5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...