Encryption model overview
How respondent answers are sealed in the browser, which crypto parameters apply, where private keys live, and what residual risks remain.
On this page
Heads up
This is the product-level story: keys, ciphertext, and what admins can do. For guarantee mapping, pair it with Zero-knowledge architecture.
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
- Fetch the poll public keyServed with the poll definition. ML-KEM-768 material is rotated per poll and never reused across workspaces.
- Encapsulate a fresh secretThe browser derives a one-time shared secret and an encapsulation ciphertext.
- Seal the answersAES-256-GCM over the answer set, with the poll ID bound as additional authenticated data.
- Submit the sealed blobOnly the encapsulation and sealed payload are POSTed. No identity field is sent or stored.
Parameters
| Parameter | Value |
|---|---|
| Key encapsulation | ML-KEM-768 |
| Payload cipher | AES-256-GCM |
| Key rotation | per-poll rotation |
| Respondent identity | not collected |
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.
What this buys you
A subpoena, a rogue operator, or a database dump yields sealed blobs. Reading an individual answer requires an admin's unwrapped key on their device.
Account, folders, and wraps
| Concept | Role |
|---|---|
| Collaboration key | Admin keypair; private stays client-side |
| Backup envelope | Password- or passkey-wrapped cross-device |
| Folder key | Wraps poll keys for a shared folder |
| Collaborator wrap | Per-person wrap of the folder key |
| Org master key | Enterprise continuity (wrapped only) |
| Crypto version | v1 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.
Free-text needs care
Open-ended answers can identify their author by content, not cryptography. Set a higher minimum-n and warn respondents in the prompt.
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
Next
Continue with Zero-knowledge architecture for guarantee mapping, Post-quantum cryptography for hybrid algorithms, or the threat model for residual risk.
