From your file to your jurisdictions, in four steps.
The encrypt-encode-scatter pipeline is the same whether you upload through the web app, an Outlook add-in, an S3-compatible client, or the Windows virtual drive. Here's exactly what happens.
-
STEP 01
Encrypt on your device
Your file is read frame-by-frame in ~5 MB chunks. Each frame is encrypted with AES-256-GCM using a per-file unique data-encryption key (DEK) and a deterministic IV bound to (file_id ‖ frame_index). Additional Authenticated Data binds ciphertext to file identity — shard substitution is detected at decrypt.
The DEK is wrapped with AES Key Wrap (SP 800-38F). On the Sovereign tier, it is additionally wrapped with ML-KEM-1024 — hybrid post-quantum protection. The wrap key (UMK) is derived from your password via scrypt and never leaves your device in unwrapped form.
-
STEP 02
-
STEP 03
Scatter across your providers
Shards are distributed across seven different providers from your connexion set, subject to your jurisdictional policy (allow-list, block-list, strict-mode). Idempotent upload keys make scatter retryable without duplication. Async scatter returns the HTTP 202 the moment the bytes hit tmpfs staging — your client doesn't wait on provider-write latency.
-
STEP 04
Read by reversing
When you request the file, the client fetches all seven shards in parallel. As soon as any five succeed, it Reed-Solomon-decodes locally, AES-GCM-decrypts frame-by-frame, and streams plaintext into the application. The server never assembles your file. The keys never leave your device. Memory cost is one frame.
Attack and compulsion, redrawn.
Once you understand the pipeline, the security properties follow.
An attacker breaching one provider
Gets two encrypted shards of any file — not enough to reconstruct, and even if they had the other five, the AES-256-GCM key is wrapped by a UMK they don't hold. Two cryptographic walls before any plaintext is recoverable.
A court compelling one provider
Receives ciphertext shards. To compel decryption, the court must compel at least five different providers — in as many jurisdictions as the customer chose. In practice the request fails at the second jurisdiction, and even success yields ciphertext, not plaintext.
The platform operator
Holds metadata, audit logs, and the wrapped UMK. Cannot derive plaintext. Cannot be compelled to derive plaintext because the capability does not exist server-side.
A future quantum adversary
Defeats RSA, ECC. Does not defeat AES-256-GCM. The hybrid ML-KEM-1024 + AES-KW wrap means a quantum break alone is insufficient — the symmetric key remains protected.
Field-grade upload reliability.
The five-endpoint chunked upload protocol — Init, Put, Status, Complete, Cancel — handles intermittent connectivity, OS-killed apps, dead batteries, and field-network conditions.
-
INIT
POST /api/upload/chunked/init
Returns an upload_id and a server-determined 5 MB frame size. Frame size is non-negotiable because RS encoding has hard per-frame caps.
-
PUT
PUT /api/upload/chunked/<id>/<chunk_index>
Each chunk, with an optional X-CR-Chunk-SHA256 header for per-chunk TCP-corruption detection at PUT time.
-
STATUS
GET /api/upload/chunked/<id>/status
Returns the set of received chunk indices. A client resumes after any interruption by re-PUTting only the missing indices.
-
COMPLETE
POST /api/upload/chunked/<id>/complete
Finalises the file: 200 when fully scattered, or 202 status="scattering" while async scatter is still distributing shards — clients poll Status until done.
-
CANCEL
POST /api/upload/chunked/<id>/cancel
Releases the server-side staging directory and frees the session. No orphans.
See the pipeline run live.
Book a briefing. We'll upload a file in front of you and walk through every step from local encrypt to multi-provider scatter — with the SkyeMap showing exactly where each shard landed.