Skip to content

End-to-End Encryption

Every inference request on Spore is end-to-end encrypted. The server routes ciphertext between you and the node that runs your request. It never sees your messages or the model’s responses.

  • Each request gets a fresh AES-256-GCM session key, generated on your device.
  • Your client encrypts the messages, then wraps the session key using X25519 key exchange with HKDF-SHA256, once for itself and once for the node the server assigns to the job (the node’s key is only wrapped after assignment, so no other node can open it).
  • The node unwraps the session key, runs inference locally, encrypts the response, and streams it back. The server passes the encrypted chunks through without being able to read them.

Routing metadata only: which model was requested, ciphertext sizes, timing, and the token counts nodes report for billing. Not your prompts, not the responses.

Your private key is encrypted with a key derived from your password (Argon2id) before it’s stored, so the server can’t use it. That means a normal “reset my password” can’t decrypt your history on its own. That’s what your recovery code is for. You get it once, at signup, so store it somewhere safe. With it, you can get back into your encrypted conversations after a password reset. Without it, they’re gone for good.

You can generate a fresh recovery code anytime from Profile → Privacy & Security.