Невозможно «снять хеширование» паролей (по крайней мере, не обычным, эффективным и надежным способом - вы можете угадывать некоторые пароли, это то, что делают злоумышленники, и вы хотите перейти с 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).
person
Thomas Pornin
schedule
25.09.2011