public-key cryptography for authentication