В некоторых ситуациях внутренний хеш может усложнить задачу для атакующего, но не обязательно. Например, если вы используете MD5 для обеих хеш-функций, то коллизия для внутреннего хеша также подразумевает коллизию для внешнего хеша, учитывая итеративную структуру MD5.
Таким образом, добавление внутренней хеш-функции не обязательно увеличит устойчивость к столкновениям и прообразам. С чисто теоретической точки зрения, это может фактически уменьшить сопротивление, хотя это совершенно невероятно, особенно если хеш-функции безопасны (но если функции безопасны, то конструкция бессмысленна). В более практической плоскости это двойное хеширование увеличивает вычислительную нагрузку (больше ЦП и, возможно, больший код - следовательно, большее использование кэша L1 - если две функции не совпадают). Так что мой совет - не делать этого. Вместо этого используйте одну «надежную» хеш-функцию, например SHA-256. Хеш-функция не будет самой большой слабостью в вашем приложении (или, точнее, если хеш-функция равна самой большой слабости в вашем приложении, то вы бог программирования и / или Дональд Кнут ).
В качестве иллюстрации SSL / TLS использует MD5 и SHA-1 одновременно в качестве попытки противостоять слабым сторонам любой из двух функций. Но более новая версия TLS 1.2 переключается только на SHA-256.