Изменение функции хеширования в уже существующей базе данных

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

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


person digiarnie    schedule 25.09.2011    source источник
comment
Я не думаю, что это возможно.   -  person SLaks    schedule 25.09.2011


Ответы (1)


Невозможно «снять хеширование» паролей (по крайней мере, не обычным, эффективным и надежным способом - вы можете угадывать некоторые пароли, это то, что делают злоумышленники, и вы хотите перейти с 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
comment
Я добавлю к отличному ответу Томаса, указав, что bcrypt также не имеет этой проблемы с миграцией. Если вы хотите увеличить коэффициент работы паролей, вы можете сделать это, просто изменив значение коэффициента работы при выполнении начального хеширования. Все будущие пароли с этого момента будут хэшироваться как новый уровень рабочего фактора, но при проверке пароля как новый рабочий фактор, так и старые хэши рабочего фактора будут по-прежнему работать, поэтому вам нужно только установить срок действия для всех паролей, скажем, 3 месяца. Тогда все пароли должны соответствовать новому рабочему коэффициенту в течение трех месяцев. Затем удалите или отключите старый - person Jason Dean; 25.09.2011