Skip to main content
Security & architectureSecurity reviewersReviewed by Security

Post-quantum cryptography

Hybrid X-Wing and ML-DSA on new material, browser-side primitives, versioned ciphertext, and safe vault upgrade behavior.

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

InviziPoll protects admin and workspace key material - and modern respondent encapsulation - with post-quantum hybrid cryptography so archived ciphertext is harder to break later. Respondent anonymity rules remain independent of algorithm choice.

Algorithms

Key encapsulationX-Wing (X25519 + ML-KEM-768)
Digital signaturesML-DSA-65

How material is sealed

  1. Publish hybrid public materialThe poll exposes the hybrid encapsulation key respondents need.
  2. Encapsulate with X-WingThe respondent browser runs the hybrid KEM against that public key.
  3. Derive and sealA symmetric key is derived and the payload is sealed with strong authenticated encryption.
  4. Store opaque ciphertextInviziPoll persists versioned blobs it cannot decrypt without the poll private key.
hybrid-encapsulate.tsILLUSTRATIVE
const hybridPk = await fetchPollHybridPublicKey(pollId);
const { encapsulation, sharedSecret } = await xWing.encapsulate(hybridPk);
const sealed = await aesGcm.seal({ key: sharedSecret, data: payload, aad: pollId });
await post("/v1/responses", { pollId, kem: encapsulation, payload: sealed, cryptoVersion: 2 });

Browser constraints

RuntimePure TypeScript (no Wasm PQC)
StorageIndexedDB key envelopes
ScopeProduct KEM + signatures only

Storage and versioning

Stored ciphertext is treated as opaque binary. A version field on response payloads marks post-quantum hybrid ciphertext and signatures for correct client handling.