Ты ни черта не прав, кроме разве что быстрой криптографической функции.
Те же KDF в том или ином виде используют хеш функции.Короче рассказываю накой хрен нужны KDF:
1) сделать преобразование в хеш тяжелой операцией, особенно для всяких асиков, например PBKDF2 неплохо справляется (только не берите вариант SHA1, берите какую-нибудь SHA512 на всякий случай)
2) сделать не просто сложным расчет, а плохо параллелизуемым, этим способом пошли в Argon,там все упирается кол-во памяти. Но я пока не использую, потому что уже 3-ая версия вышла помимо Argon2i и Argon2d. А это все реализации, которых еще много на каких платформах нет (точнее есть, но недостаточно хороши для продакшена).
И да Argon использует крипто хеш-функцию Black2.
Которая внимание(!) - быстрее по утверждению самих авторов чем например SHA512.
--
Насчет кастомной KDF, многие не рекомендуют, НО чисто теоретически...
Если есть соль ты можешь сделать бесконечно много итераций (миллион например) типа "sha1(md5($p).$s)", но используя хотя бы SHA256:
n-times x SHA256(userkey + salt)
если n=3, то SHA256(SHA256(SHA256(userkey + salt) + salt) + salt)
тебе же надо хотя бы лям какой-нибудь
Только вот зачем это всё, если есть KDF, которые исследованы и их явно не дураки делали?
---
Теперь про соль... она используется для того, чтобы не дать использовать радужные таблицы, перед которыми прямой перебор тем же джоном или кэтом просто меркнет по скорости.
--
Конкретно по MD5, это 128-bit, что в теории больше времени жизни вселенной
НО!!!!
Вот эти ребята доказали возможность атаки, сложность которой 2^24.1.
https://www.win.tue.nl/hashclash/On%20Collisions%2...
Т.е. получается у нас энтропия резко снижается с 128 бит до 24.1
А это значит 17 981 374 вариантов перебираются за доли секунды.
Атака на SHA1 сложнее намного, но гугл сделал это за 100 000 USD на серверах AWS (гуглите shattered).
--
В случае sha1(md5($p).$s) соль тебе не поможет потому что это всего лишь одна итерация.
И соль это то, что известно атакуемому. Поэтому предложенная KDF "легко" трахнется радужными таблицами.
Атакующий просто найдет коллизию, которая даст тот же хеш, что и оригинальный пароль (либо это и будет сам оригинальный пароль).
--
Многое зависит от скорости перебора. Если сеть, то сложнее, может там банят на 10 минут после кадой третьей неудачной попытки. и всё приехали...
Другое дело если ты можешь организовать перебор в оффлайне )))