Изменение функции хеширования в уже существующей базе данных - PullRequest
5 голосов
/ 25 сентября 2011

Я немного читаю хеширование паролей. Я видел, что SHA-256> MD5. Это заставило меня задуматься о том, как приложение может справиться с переходом с одной хэш-функции на другую. Что произойдет, если кто-то реализует приложение, которое хэширует свои пароли, используя MD5. Затем они решают, что SHA-256 это путь. Но, конечно же, хеши паролей, хранящиеся в базе данных, находятся в MD5.

Как происходит перенос данных в базе данных из одной хэш-функции в другую?

1 Ответ

5 голосов
/ 25 сентября 2011

Невозможно «разархивировать» пароли (по крайней мере, не общим, эффективным и надежным способом - вы можете угадать некоторые пароли, это то, что делают злоумышленники, и вы хотите перейти с MD5именно потому, что злоумышленники могут иметь некоторый успех в этом).Таким образом, миграция будет распространяться с течением времени: некоторые пароли будут хэшироваться с помощью MD5, другие с помощью SHA-256.Когда необходимо подтвердить пароль:

  • Если SHA-256 этого пароля известен, используется SHA-256.Этот пароль уже перенесен.
  • В противном случае MD5 используется для проверки пароля.Если он совпадает, то пароль хороший, и , так как пароль в то время был известен приложению, приложение также хэширует пароль с SHA-256 и заменяет MD5хеш с хешем SHA-256 в базе данных.

Таким образом, пароли переносятся динамически;чтобы полностью избавиться от MD5, вам придется долго ждать и / или уничтожать учетные записи, к которым давно не обращались.Необходимо иметь возможность отличить хеш MD5 от хеша SHA-256, что легко, поскольку они имеют разные размеры (16 байт для MD5, 32 байта для SHA-256).Вы также можете добавить флаг или любой другой подобный трюк.

Обратите внимание , что хеширование паролей с помощью одного простого приложения хэш-функции - довольно паршивый способ сделать это с точки зрения безопасности.и замена MD5 на SHA-256 не улучшит ситуацию.Вы хэшируете пароли, чтобы злоумышленник, получивший доступ для чтения к базе данных, не узнал сами пароли.Чтобы действительно не позволил злоумышленнику угадать пароли, вам также нужны "соли" (случайные данные для каждого пароля, хранящиеся вместе с хешированным паролем) и подходящая медленная хеш-функция (т. Е. Тысячи(возможно, миллионы вызовов вложенных хеш-функций).См. этот ответ для деталей.Краткий ответ: так как вы предполагаете миграцию, сделайте умную вещь и перейдите на bcrypt , а не SHA-256 (см. , который отвечает на security.stackexchange).

...