Hash Functions and Public-Key Cryptography