Implement strong cryptography

Currently, use an unauthenticated ECDHE exchange to produce a shared
secret to use as a 256-bit AES key to encipher messages.

All we need to do to implement verification is sign and verify the
public points