I'm just getting an overview of some of the concepts in key exchanging at the moment, and I'm a bit disoriented on a few topics, namely key stretching, key derivation functions and perfect forward secrecy.
Regarding key stretching, I understand the idea is to make it more difficult to brute-force a password, but the materials I'm reading come a bit short on any kind of technical explanation. The wikipedia article makes it sound like all it does is feed a plain text passphrase through a hashing algorithm. If that's so, why differentiate between hashing and key stretching? Does a salt count as a method of key stretching? What are other methods?
About key derivation function, I understand the whole thing that there is a master key and session keys are derived from that. But what is the specific application of key derivation? Is it closer to key agreement (Diffie-Hellman) or key exchange (PKI)? Can you cite a real-world example where I might encounter key derivation? (For instance, I know that if I wanted to secure a tunnel through IPSec, I might use IKE, which means I'd be dealing with Diffie-Hellman, which is key agreement.)
I think I'm pretty well grounded on Perfect Forward Secrecy; it's basically the diametric opposite of key derivation. But I'm hazy on the difference between Forward Secrecy and Perfect Forward Secrecy. What exactly changes the situation from FS to PFS?
I know these must be very basic questions for this forum, but I'm just getting my feet wet in the world of cryptology.