What are public and private keys and how do they work?