Ci sono in realtà due tipi di KDF. Un tipo è progettato per derivare una chiave dall'input ad alta entropia (come un'altra chiave); questo può essere fatto con un hash veloce digitato come HMAC. L'altro tipo accetta una password come input. Le password sono a bassa entropia; non sono intrinsecamente molto difficili da usare per la forza bruta. Un buon hash della password deve quindi essere lento.
Nella tua domanda, hai detto che l'aggiunta di for (i=0; i<bignum; i++);
avrebbe rallentato l'hash. Questo è in realtà completamente inutile. L'attaccante non deve giocare secondo le tue regole. Gli hash devono proteggere le password quando gli hacker hanno una copia degli hash. Se l'attaccante può calcolare rapidamente gli hash, non importa quanto lentamente tu li calcoli. Gli hash devono essere intrinsecamente lenti; non ci dovrebbero essere scorciatoie per valutarle più velocemente del legittimo server.
Le "proprietà di casualità" sono perché un KDF deve produrre una chiave. Non hanno nulla a che fare con la precomputazione, comprese le tabelle arcobaleno. Gli algoritmi crittografici tipicamente fanno alcune ipotesi sulla chiave; tra le altre cose, normalmente assumono che sia stato selezionato totalmente a caso dall'insieme delle possibili chiavi. Si prevede inoltre che le chiavi abbiano una certa lunghezza; le loro funzioni di derivazione richiedono output di lunghezza arbitraria. Al contrario, va bene se un hash della password ha un sacco di struttura per l'output. Forse c'è il 70% di probabilità che i bit adiacenti abbiano lo stesso valore. Forse diffonde 128 bit di entropia in 4096 bit di output. Finché è difficile invertire, è un bel hash, ma non è adatto come chiave.
Una funzione di derivazione della chiave basata su password sicura è un hash sicuro per la password (PBKDF2 è in effetti uno dei grandi 3 hash). Il contrario non è necessariamente vero. Quale utilizzare è semplice: utilizzare una funzione di derivazione della chiave basata su password per ricavare una chiave da una password e un hash per memorizzare le password.