Trust boundary
The desktop process may be inspected or modified. Konvoa therefore treats it as a participant that can prove possession of a key, not as the authority for account, license, subscription, or revocation state. Protected operations recheck current server records.
Keep the private device key on the client and pin the active Konvoa response public key. Never embed an application-wide shared secret in every shipped binary.
Signed request
Hash the exact request body bytes with SHA-256, hash the exact bearer-token bytes (or the empty string before login), and preserve the origin-form path and query exactly as sent. Build and sign this UTF-8 message with Ed25519:
AUTHV2-REQ
v=1
kid=<device-key-id>
m=POST
u=/api/v2/desktop/simple/login
host=konvoa.com
rid=<UUID-v4>
ts=<Unix-seconds>
nonce=<16-random-bytes-base64url>
ath=<access-token-SHA-256-base64url>
bh=<exact-body-SHA-256-base64url>The application identifier belongs in the JSON body and is therefore covered by bh; it is not an extra canonical line. Generate a new nonce and request identifier for every attempt. Never retry by resending an identical signed message.
Signed response
Konvoa signs the advertised response key ID, method, unchanged path and query, HTTP status, original request identifier, server timestamp, and exact response-body hash:
AUTHV2-RESP
v=1
kid=<server-key-id>
m=POST
u=/api/v2/desktop/simple/login
status=200
rid=<original-UUID-v4>
ts=<Unix-seconds>
bh=<exact-response-SHA-256-base64url>Resolve the key ID against the release-authenticated pin set, verify the signature, and only then parse or decrypt protected content.
Session rotation
Access tokens are short-lived and bound to the authenticated context. Refresh values rotate, and reuse of an invalidated member can revoke its family. Store credentials with the operating system’s protected facility, do not print them, and clear them after logout or terminal authentication errors.
Protected delivery
Request a one-time ticket for a file only after authentication. The ticket is short-lived, mapped to one file and authorization context, and consumed atomically by the direct download request. Refuse cross-origin redirects and enforce a maximum response body before allocating memory.
Before shipping
- Inject the application ID and pinned server public key through a controlled release configuration.
- Require HTTPS, verify the hostname, and refuse redirects carrying credentials or signatures.
- Persist the device private key and rotated session credentials safely.
- Bound request and response bodies, connection timeouts, and retry counts.
- Test replay, timestamp boundaries, body tampering, wrong key IDs, revoked licenses, and interrupted downloads.
Download the reference clients and checksum manifest, or use the maintained C++ SDK for the full native integration.