Skip to main content
security-architectureSecurity reviewers, IT, workspace admins

Encryption model overview

How respondent answers are sealed in the browser, which crypto parameters apply, where private keys live, and what residual risks remain.

3 MIN READUPDATED JUL 30, 2026MAINTAINED BY SECURITY
On this page

When a respondent opens a poll link, their browser fetches the poll's public encapsulation key. The answer set is encrypted locally; plaintext never travels to InviziPoll and is never written to disk on our side.

How a response is sealed

  1. Fetch the poll public keyServed with the poll definition. ML-KEM-768 material is rotated per poll and never reused across workspaces.
  2. Encapsulate a fresh secretThe browser derives a one-time shared secret and an encapsulation ciphertext.
  3. Seal the answersAES-256-GCM over the answer set, with the poll ID bound as additional authenticated data.
  4. Submit the sealed blobOnly the encapsulation and sealed payload are POSTed. No identity field is sent or stored.

Parameters

ParameterValue
Key encapsulationML-KEM-768
Payload cipherAES-256-GCM
Key rotationper-poll rotation
Respondent identitynot collected
seal-response.tsILLUSTRATIVE
const pollKey = await fetchPollPublicKey(pollId);
const { ciphertext, sharedSecret } = await mlKem768.encapsulate(pollKey);

const sealed = await aesGcm.seal({
  key: sharedSecret,
  data: encode({ q1: "unlikely" }),
  aad: pollId,
});

await post("/v1/responses", { pollId, kem: ciphertext, payload: sealed });

Where the private keys live

Each poll's private key is wrapped to the workspace admins who may read results. InviziPoll holds the wrapped blob; the unwrapping key is derived in the admin's browser at sign-in. See Zero-knowledge architecture for the unwrap sequence.

  • Poll key — one keypair per poll. Public half is public; private half is only ever held wrapped.
  • Admin wrap — the private half is wrapped once per authorised admin device.
  • Revocation — removing an admin drops their wrap; existing ciphertext is unaffected.

Account, folders, and wraps

ConceptRole
Collaboration keyAdmin keypair; private stays client-side
Backup envelopePassword- or passkey-wrapped cross-device
Folder keyWraps poll keys for a shared folder
Collaborator wrapPer-person wrap of the folder key
Org master keyEnterprise continuity (wrapped only)
Crypto versionv1 classical / v2 PQC hybrid

Sensitive material lives in protected browser storage, not easy-to-scrape website storage. Classical (v1) and post-quantum hybrid (v2) polls publish only the public material respondents need; see Post-quantum cryptography.

Aggregate-only decryption

Results are decrypted in the admin's browser and rendered as aggregates. Below your configured minimum-n threshold the surface stays sealed — no partial reveal, no "just this once" override. Details: Aggregate results and anti-inference.

What the server stores per response

Responses are opaque encrypted blobs associated with the poll. The platform does not retain per-response timestamps, ordering metadata, or plaintext. When results unlock, authorized admins receive encrypted submissions in an order that does not reflect when each person responded.

Downloadable recovery files use a versioned envelope (workspace metadata, integrity check, nested password-protected backup). Details: Recovery, emergency kit, and device handoff.

What this does not protect against

Being precise here is the point. The threat model covers each residual risk with mitigations:

  • A compromised admin device with an unwrapped key present
  • Self-identifying content inside a free-text answer
  • Very small audiences where participation itself is revealing