The problem is the following: I need to establish an encrypted connection (which, hence, requires at least one secret – the key[s]) between two clients. They are only allowed to communicate over public channels. Also, they don’t know any secret about each other.
tl;dr
Alice, Bob and Carl are in a room. They don’t know each other. Alice wants to tell Bob a secret, which Carl cannot understand. How can she do this?
They still need to establish not so open channel. For instance, Bob hands Alice his public key, she encrypts the secret using this key and hands it back to Bob so that he can decipher it using his private key.
(note, that if Carl is stronger and close enough to Bob, it won’t help, anyway).