The API Key Model
The API key is a routing identifier. It tells the server which dashboard account and application a request belongs to. It is not what authenticates a request.
Where it lives
// Inline in Atlas.h - set once and rebuild.inline std::string API_KEY = "YOUR_API_KEY"; // Or override at runtime, before Startup:Atlas::API_KEY = "YOUR_API_KEY";Atlas::Startup();What actually authenticates
A leaked API key alone does not let an attacker impersonate a user. The real auth stack:
- X25519 ECDH handshake - fresh symmetric key per session.
- Ed25519 server signature - the server's handshake reply is verified against three public keys pinned inside
Atlas Auth.lib/Atlas.dll(primary, backup, emergency). A nulled server can't produce these signatures. - HWID mixing - the session key is derived with the HWID folded in, so a stolen token doesn't work from a different machine.
- Per-request nonce - replays are dropped.
- Builds, if you've added any on the dashboard.
Ed25519 key rotation
Three public keys are pinned - primary, backup, emergency. The server picks one per handshake, so you can rotate without shipping a new library. Verification is local: a server that can't sign with any of the three keys is rejected before the handshake completes.
Handshake
- Client → Server: ephemeral X25519 public key + app id.
- Server → Client: Ed25519-signed reply with the server's ephemeral X25519 public key plus the app's HMAC secret, encrypted under the shared key. The signature is checked against the three pinned pubkeys.
- Shared secret derived. Every subsequent request uses it.
From request two onward, the app id is decorative. The session key is the only thing that matters.
Get one
atlassecurity.site/dashboard → Applications → New application. The key is shown on creation. It can be revealed again, after a confirmation, under Settings → SDK and key.