Zero-Knowledge Proofs· Blind Signatures· Threshold Decryption· End-to-End Verifiable· No Voter ID Required· Externally Audited· Open Source· Zero-Knowledge Proofs· Blind Signatures· Threshold Decryption· End-to-End Verifiable· No Voter ID Required· Externally Audited· Open Source·
Plain language · No jargon required

Five Things That Protect Your Vote — Explained Simply

01 · Blind Signatures
The Envelope That Gets Stamped Without Being Opened

When you register to vote, your device creates a credential. It gets sent to the election authority in a "sealed envelope." The authority stamps the envelope proving it's valid — but never opens it to see what's inside. You open it yourself later. The stamp proves you're allowed to vote. Nobody knows what's in the envelope.

Analogy: You write your name on a carbon paper inside an envelope. The postmaster stamps the outside. You keep the stamped paper. The postmaster never sees your name.
02 · Homomorphic Tallying
Adding Locked Boxes Without Opening Them

Your vote is locked in a mathematical box when you cast it. At the end of the election, all the locked boxes are added together using a special kind of math. The result — the total count — is produced without any individual box ever being opened. Your specific vote is never decrypted. Not ever.

Analogy: Imagine adding together ten padlocked boxes and getting a sum, but without any key fitting any single box. The math can add weights without opening the boxes.
03 · Zero-Knowledge Proofs
Proving Your Vote is Valid Without Showing It

When you cast your ballot, the system needs to verify that it contains a legal choice — not 47 votes for the same option, not a blank. A zero-knowledge proof lets your ballot prove this to the system without revealing what you chose. The system accepts the proof and posts your ballot without ever seeing the content.

Analogy: You prove you know the combination to a safe without ever saying the combination out loud — just by opening it.
04 · Threshold Decryption
No Single Person Can Unlock the Results

The key to decrypt the election tally is split across 5 trusted community members called trustees — your steward, your block captain, a community elder. To produce the result, at least 3 of the 5 must cooperate simultaneously. One trustee going rogue, being bribed, or being pressured cannot compromise the election alone.

Analogy: A bank vault with 5 keyholes where any 3 keys open it. No single key works alone. The bank manager can't open it themselves.
05 · End-to-End Verifiability
You Can Check. Anyone Can Check. The Math is Public.

After you vote, you receive a receipt — a random code that identifies your encrypted ballot on the public bulletin board. You can verify your ballot is there. Any observer can verify that all ballots on the board were included in the tally. Any observer can verify the tally arithmetic is correct. None of this requires trusting us.

Analogy: A public notice board where every sealed vote is posted. Anyone can count the envelopes. Anyone can verify the final count equals the number of envelopes. Nobody can open them.
Coercion Resistance
Your Boss Can't Prove How You Voted

If someone pressures you to vote a certain way and prove it — your employer, an abusive partner, anyone — you can cast a replacement ballot that invalidates your first one. You can show the coercer you "voted" their way using the old receipt while your real vote stands. The system is designed so coercion cannot be verified.

Analogy: You can enter a ballot twice. Only the last one counts. You can show someone the first one without it meaning anything.
Threat model

Every Attack We Designed Against

🕵️
Passive Network Attacker

Monitors all traffic between your device and FOLKMOOT servers. Attempts to link your identity to your ballot by correlating timing, IP address, request patterns.

✓ TLS 1.3 encrypts all traffic. PWA with certificate pinning. Blind signature protocol means even if all traffic is logged, the credential cannot be linked to the voter identity.
👨‍💼
Malicious Administrator

A WOPR Systems employee or election administrator attempts to stuff the ballot box, alter vote totals, or discover how a specific voter voted.

✓ Homomorphic tallying — individual votes are never decrypted. Public bulletin board — any alteration is detectable. Threshold decryption — no admin controls the key alone.
🏛️
State Actor / Server Seizure

Government seizes the FOLKMOOT server with a court order or by force. Attempts to identify which voters voted which way for retaliation.

✓ Server holds only encrypted ballots linked to anonymous credentials. No identity-to-credential mapping exists in the system by cryptographic design. Seizing the server reveals nothing about voter identity.
👥
Sybil Attack (Fake Accounts)

An attacker creates many fake community members to cast multiple votes. Attempts to overwhelm legitimate community votes with fabricated participation.

✓ Web-of-trust vouching requires at least 2 existing verified community members to vouch for each new member. Rapid fake account creation is socially detectable. Each credential produces exactly one valid nullifier per election.
💬
Coercion Attack

An employer, abusive partner, or authority figure demands a voter prove how they voted, threatening consequences for the "wrong" vote.

✓ Re-voting mechanism: a voter can cast a replacement ballot. The coercer can be shown the old receipt. The voter's real choice stands. Coercion cannot be cryptographically verified.
💻
Container Escape

An attacker who compromises the FOLKMOOT application container attempts to break out to the host operating system to access other services or data.

✓ Distroless base image, read-only root filesystem, --no-new-privileges, dropped ALL Linux capabilities, custom seccomp profile, AppArmor MAC policy. Verified by external pen test.
Audit & certification

How We Get Independently Verified

FOLKMOOT's security posture is not self-certified. Every claim on this page is subject to independent review. The audit results are published publicly — because transparency is part of the security model.

Audit Type Scope Target / Standard Status
Automated SAST
Semgrep, Bandit, pip-audit, npm audit
All Python + TypeScript source code, all dependencies Zero High/Critical findings required to merge Planned · Phase 4
DAST / Web App Scan
OWASP ZAP full active scan
Full application attack surface on staging environment OWASP Top 10 2021 · All Medium+ findings remediated Planned · Phase 4
OWASP ASVS Level 3
Application Security Verification Standard
Full application checklist — authentication, cryptography, data protection, API Level 3 (highest — same as banking/election systems) Planned · Phase 4
Container / Host Hardening Audit
docker-bench-security, Lynis
Docker container config, host OS baseline CIS Docker Benchmark v1.6 · CIS Ubuntu 24.04 L2 Planned · Phase 4
External Penetration Test
Independent security firm
Network perimeter, web application, container escape, business logic, cryptographic implementation Full pentest report published publicly · All Critical/High remediated before launch Planned · Phase 5
Cryptographic Protocol Audit
Independent cryptographer / security lab
Protocol specification, crypto library implementation, ZKP correctness, threshold scheme Protocol spec + test vectors reviewed · Report published Planned · Phase 5
Ongoing Dependency Scanning
Renovate Bot, automated CI
All dependencies, continuous Security patches auto-merged · Breaking changes reviewed Planned · Post-launch
Public Responsible Disclosure
security.txt · encrypted disclosure email
External researcher community 72hr acknowledgment · 30-day fix target · Public disclosure timeline Planned · Phase 7
SSL Labs A+ and Mozilla Observatory A+ are required before any public traffic hits FOLKMOOT. These are not optional baseline checks — they are launch gates. The same applies to HSTS preload submission and certificate pinning in the PWA.
Technical stack

Every Cryptographic Primitive and Why

Voting Protocol
Helios-derived protocolacademic baseline
ElGamal over Curve25519ballot encryption
RSA-PSS Blind Signaturescredential issuance only
Chaum-Pedersen ZKPballot validity proof
Shamir + Threshold ElGamaldistributed decryption
Symmetric / Hashing
AES-256-GCMdata at rest
Argon2idpassword hashing
Ed25519audit log signatures
HKDF-SHA256key derivation
OS CSPRNG onlyno Math.random() anywhere
Transport
TLS 1.3 onlyTLS 1.2 disabled
HSTS · max-age 1yrincludeSubDomains + preload
Certificate Pinningin PWA service worker
CSP: script-src 'self'no inline, no eval
Subresource Integrityall loaded assets
Libraries
PyNaCl (libsodium)Python crypto backend
WebCrypto APIbrowser-side — no JS lib trust
pgcryptoPostgreSQL field encryption
Pydantic strict modeall API inputs validated
SQLAlchemy ORM onlyno raw query construction
Responsible disclosure

Found Something? We Want to Know.

Security Disclosure Program

FOLKMOOT operates a responsible disclosure program. If you find a security vulnerability, we want to hear from you before anyone else does. Encrypt your report to our PGP key (published at /.well-known/security.txt) and send it to [email protected].

What to expect: Acknowledgment within 72 hours. Status update within 7 days. Fix target of 30 days for Critical/High findings, 90 days for Medium. We will coordinate public disclosure timing with you. We do not pursue legal action against good-faith security researchers.

We are especially interested in: cryptographic protocol flaws, authentication bypass, ballot linkability attacks, container escape vectors, and anything that breaks the coercion-resistance guarantee.