1. A method of providing secure communications between a local device and a remote device comprising: the local device receiving a nonce from a third party wherein the nonce from the third party is derived from a private key of the local device and a private key of the remote device; the local device receiving an encrypted key from the third party, wherein the encrypted key from the third party is derived from the private key of the remote device; generating a session key using the nonce, the encrypted key from the third party, and an embedded secret of the local device; using the generated session key to symmetrically encrypt and decrypt communications between the local device and the remote device; the local device receiving a message digest from the remote device, wherein the message digest from the remote device is derived from the session key and the private key of the local device; and authenticating the remote device by comparing the received message digest from the remote device with an output of a hash function of the session key and the private key of the local device.