Sending secret message
Authenticating messages
Both parties need to share a secret
Usually fast
Unfortunately not very easy to setup.
A public key known to every one.
A secret key known only to the you.
Encryption can be done using the public key
Decryption needs the private key.
RSA
Elliptic curve based ones.
Easy to verify the signature
Impossible to generate S without secret key
A large database D, or a collection of files
How can I check if the data is not modified
Given a string X, h(X) is a small string
Given h(X) impossible to find Y such that h(Y) = h(X)
Impossible to find X≠Y such that h(X) = h(Y).
You can compute the hash
Digitally sign it and send it.
Master keys
Sub keys
Fingerprints
Revocation
To send your key you can export it
You can import the public key of others