Data encryption using two interlocking keys where enything encoded using one key may be decoded using the other key. This means if someone makes one of the two keys publicly available (as in public-key encryption) and keeps the other private, then anyone may send them a message or data that only they can decode, giving privacy, and furthermore, the sender may also encrypt that same message additionally with their own private key, making it impossible to read without decoding first with *their* __public__ key by the receiver, this gives authenticity.
It is a very powerful system. One cannot determine one key from the other, nor can they crack the encryption by computing all combinations, because, depending on the size of the keys (sometimes as large as 1024 bytes, though having grown from smaller versions in popular implementations of the software which does this), the amount of computing power required to crack the code is unavailable, even supercomputers would take more than a hundred years to crack it.
PGP is a publicly availble software implementation written by Phil Zimmermann.