cryptographic challenges