Skip to main content
Security & architectureSecurity reviewersReviewed by Security

Zero-knowledge architecture

Confidentiality mapped to observable behavior: browser-sealed responses, ciphertext-only storage, and client-side admin decrypt.

2 MIN READUPDATED AUG 2, 2026MAINTAINED BY SECURITY
On this page

InviziPoll's confidentiality goal is simple to state and hard to fake: the service never holds the secrets needed to decrypt responses. This page maps that goal to observable product behavior for security and architecture reviewers. For the seal path and crypto parameters, start with Encryption model overview.

Poll and response path

ConceptBehavior
Poll keysBrowser-generated at publish
Server holdsPublic keys + encrypted wraps only
Respondent pathSeal client-side before transport
Response rowsCiphertext blobs only
Admin decryptIn-app after results load
Backup wrapsPassword/passkey; server sees wraps

Shared folders (collaboration)

ConceptRole
Poll → folderFolder key wraps poll private keys
Folder → peoplePer-collaborator encrypted wraps
Unwrap locationBrowser only (folder → poll → payload)
  1. Unwrap the folder keyEach collaborator unwraps their own folder-key wrap with local key material.
  2. Unwrap the poll private keyThe folder key unlocks the poll wrap for polls in that folder.
  3. Decrypt aggregatesCiphertext loads into the admin app; charts render only after client-side decrypt and threshold checks.
unwrap-folder-poll.tsILLUSTRATIVE
const folderKey = await unwrapFolderKey(localAdminKey, folderWrap);
const pollPrivate = await unwrapPollKey(folderKey, pollWrap);
const answers = await decryptAggregate(pollPrivate, sealedBlobs);

Pair these guarantees with Aggregate results and anti-inference and Respondent anonymity and zero telemetry. Residual threats and honest limits live in the threat model.