Server X and User Y are communicating. Some guy Z has X's private key. Z is also passively listening the communication.
- Y sends its public key to X. X sends its public key.
- Y generates a random number (A), encrypts with X's public key sends to X.
- Both X and Z decrypt the number. Now X, Y and Z all know the number A.
- X generates a random number (B), encrypts with Y's public key, sends to Y.
- Since Z does not have Y's private key, it can't decrypt it . At this point, X and Y know A and B, Z only knows A.
- X and Y use a predetermined algorithm using A and B as inputs to generate a new key. Further communications are encrypted/decrypted with this key.
- Z can't decrypt the communication.