Principles of Public Key Cryptography