Actually, there is one additional condition required for
public key cryptography. There must also be
no computationally feasible way of deriving the private key
from the public key. The reasons are straightforward:
Let k-priv be the "private key."
Let k-pub be the "public key."
Let X() be a computationally feasible
transformation of any public key into a private key.
Let D{k-priv}() be the decryption function
corresponding to encryption function E{k-pub}().
By definition,
M = D{k-priv}(E{k-pub}(M))
We may define, trivially,
D'{k-pub} = D{X(k-pub)}() = D{k-priv}()
Therefore,
M = D'{k-pub}(E{k-pub}(M))
By using D'(), we have reduced the protocol to standard
symmetric encryption!
The computational feasibility question is important. If
derivation of the private key from the public key is
possible, but not feasible, then we can decrypt using
the public key in mathematical abstraction, but we cannot get
it done in the real world.
The radical result of Diffie's and Hellman's idea is a
class of algorithms where we can tell the whole world a
public key to use, but rest easy knowing that upon
encryption of a message with this public key, only the
holders of the private key can decrypt it. We can send
secret messages without needing to share secrets (that is, using a
key) with our correspondents.