Security

Your data,
your keys, your network if you want it.

Kymoscope is built so that the parts we run do not need to read your measurements. Here is exactly what is protected, how, and where the limits are.

What is protected

  • Files you analyseStay in your browserFiles open in your browser and are never uploaded: parsing, queries and charts run on your machine.
  • Live stream dataEnd-to-end encryptedAES-256-GCM per frame, sealed by the sender and opened by the viewer. The relay forwards ciphertext and never holds a key.
  • Stream keysPassword, device or project keysKeys are derived from the stream password with PBKDF2 (600,000 iterations), wrapped to each of your browsers’ own P-256 device keys, or, in an end-to-end encrypted project, sealed under the project’s key. Only the members’ approved browsers and the project’s approved senders hold that key. A sender proves it holds its API key before a member’s browser approves it.
  • WorkbooksPersonal, or end-to-end encryptedA workbook keeps the analysis — worksheets, charts, math channel formulas — never data. Saved for an organization in an end-to-end encrypted project, it is encrypted in your browser with its own key (AES-256-GCM) sealed under the project’s key: the project’s members open it, we can’t. Personal workbooks are stored readable on our servers and only their owner can open them. Saved in a project that isn’t end-to-end encrypted, it is stored readable on our servers, like a personal one, and labelled so; once the project turns encryption on, the next save seals it and its whole history in the browser. Exported workbook files are encrypted for who may open them — only you, your organization, or anyone with Kymoscope — with a key we hold: outside Kymoscope, or for an account outside that scope, the file can’t be read, but we could technically open it. Add a password (PBKDF2-SHA256, 600,000 iterations) and nobody without it can, us included.
  • Recovery keyOptional, kept offline by the ownerAn organization’s owner can create a recovery key (optional; offered after the first organization save, never required): a password-protected file and a printed code that never reach us. Every project key is also sealed to it, outside the two-step and approval layers, so the owner can recover every project after losing all browsers. Creating and using it needs the owner’s account with two-step verification, and using it is recorded in the audit log.
  • Opening a projectThree layers, chosen per projectEach project chooses three extra layers, all on for new projects. Two-step verification: its keys and streams open only in a session signed in with an authenticator code, except API-key senders, which receive the key as devices. Approval of new browsers: an organization owner or admin approves a person’s new browser for every project of the organization; a project lead, for the projects they lead; never their own; approving, and turning any layer off, needs a session signed in with the code. A typed code: the approver types the code shown on the new browser, compared in the approver’s browser with the key it seals the project key to; the server never sees it. The typed code guards against approving the wrong browser, not against the server. Organization owners can require any layer for every project. An approval stops counting when the approver leaves the organization or loses the role it was given with.
  • Who may watchShort-lived ticketsViewers get watch-only tickets for one stream that expire in minutes and renew while the stream is open. Organisation streams are visible to members only.
  • Where data flowsOur relay or yoursRun the relay on your own network with one docker command. It verifies our Ed25519-signed tickets locally and keeps working without internet once it has its certificate.
  • Account dataEU regionAccounts, organisations, math channels and stream names are stored in the EU (Paris). Payments are handled by Stripe; we never see card numbers.

How live data travels

A sender (Python, a native plugin or your own code) encrypts every frame before it leaves the machine. The relay matches senders and viewers and copies bytes. Each viewer’s browser holds the key and decrypts.

How watch tickets work

Cloud recordings

A recorded stream is stored the way it travels: as the ciphertext its sender sealed. Kymoscope can’t open your recordings; the people who can watch the stream can.

What we store
The ciphertext the sender sealed, written in chunks by the relay as it forwards the stream, in storage in the EU. The relay never holds a key and never decrypts.
What we can see
Recording names, the stream and project, who started it, start and end times, sizes, and each chunk’s times and message count. Never the measurements.
Who can download
Each viewer gets a download link signed for one recording that expires after 10 minutes, issued only after the project’s two-step and browser-approval checks, where the project has them on. The viewer’s browser decrypts.
Recording keys
Sealed under the project’s key, so they follow it: after a rotation, members’ browsers re-seal them under the new key, and the organization’s recovery key covers them like the rest of the project.
Personal recordings
Sealed with the stream’s own key. On a browser that hasn’t opened the stream before, playing one needs the stream’s password. Lose every browser and the password, and nobody can open it, us included.
Deletion
The trash keeps a recording for 30 days, and every recording is deleted when its retention period ends. Deleting an account deletes its personal recordings (project recordings pass to the organization’s owner); deleting an organization deletes its recordings. Deleted chunks are gone from storage within about an hour; their metadata stays in database backups for the backup retention period.

What encryption does not cover

Security claims are only useful when their edges are clear.

  • Stream names, sizes, timing and who watches are visible to the service that relays them; only the contents are encrypted.
  • A viewer who can decrypt a stream can keep what they saw. Removing someone stops future access, not past copies.
  • Math channels and organisation settings are stored readable on our servers so they can be shared.
  • File contents never leave your browser, but what you choose to save does: a workbook keeps its charts’ settings, which name the channels they plot and keep their axis ranges (autoscale sets them from your data), and event markers you add from a file keep their text. A math channel’s formula names the channels it uses.
  • The server decides who is a member and lists their browsers and senders. Members can review their devices and the audit log, but a compromised server controls both, so they can’t be relied on against it.
  • An owner’s browser is approved automatically while no other owner or admin has an approved browser, because nobody else could approve it; with two-step verification on the account, only after the code. Whoever holds the owner’s password (and code) in that window gets that approval.
  • A compromised server can mark any browser approved, and other members’ browsers then seal the project key to it. Approval and the typed code protect against a stolen password and against approving the wrong browser, not against the server. Every approval is audited and shows in the person’s device list.
  • Workbook names, sizes, times, versions and who edits them are visible to us; the contents of workbooks in end-to-end encrypted projects aren’t (those of personal workbooks and of unencrypted projects are).
  • A workbook saved readable before it was encrypted may remain readable in our backups for the backup retention period.
  • Exported files without a password are sealed with keys we hold (per account, per organization, or for anyone signed in): we could open them. Only a file’s password keeps us out.
  • Whoever has the recovery key file and its password, or its code, and can sign in as the organization’s owner with two-step verification can open every project the recovery key covers: the projects whose key the owner’s browser holds (it vouches for the recovery key in each; a server can’t add a recovery key of its own). A restricted project the owner isn’t in is covered once the owner joins it.
  • A recording is as complete as the relay made it: senders’ encryption stops anyone changing a message, but a compromised server could leave whole messages out or reorder them, as it could while you watch live.
  • Rotating a project’s key protects what is sent after the rotation. Keys of past epochs, and anything already seen, stay with whoever had them. Removed members also stop getting watch tickets, so they lose relay access. A sender not given the new key is refused from two minutes after the rotation and stops.

Need it on your own network?

Self-hosted relays, offline sites and security questionnaires: tell us your requirements.