Accuracy not guaranteed. Neither is Congress's. At least we're honest about it. Always verify at Congress.gov.

Leg day: Fri → Fri (28d) Recess

VoteChain Evidence Board

End-to-End Verification
Diagram Board

The three E2E-V properties — cast-as-intended, recorded-as-cast, counted-as-recorded — and how VoteChain's cryptographic mechanisms deliver each guarantee with zero trust.

E2E-V Complete
E2E-V Properties
3
Challenge Type
Benaloh
Thresholds
2-of-3
Trust Model
Zero-Trust
Audit Trail
Public

Core Guarantees

Three End-to-End Verifiable Properties

Each property is independently verifiable by the voter or any public auditor, without trusting any single component of the system.

1

Cast-as-Intended

Does my encrypted ballot actually contain my choices?
Mechanism
Benaloh Challenge

Voter can challenge the system to open the encrypted ballot and prove its contents match selections. If satisfied, re-encrypt and cast. The challenge/spoil process is recorded.

ballot.ts → encrypt selections cast.ts → challenge OR commit spoiled_ballots[] → opened for audit
2

Recorded-as-Cast

Is my ballot actually in the official record?
Mechanism
BB Inclusion Proof + Receipt

After casting, the voter receives a receipt with a ballot hash. They can verify their ballot exists in the Merkle tree via an inclusion proof checked against the signed tree head.

verify.ts → check receipt signature bulletin-board.ts → inclusion proof STH signature → ECDSA with BB key
3

Counted-as-Recorded

Were all recorded ballots correctly tallied?
Mechanism
Threshold Tally + Proof

Trustees combine Shamir shares to reconstruct the election secret, ECIES-unwrap each ballot, decrypt, validate, and aggregate. The tally is signed and published as a VCL event.

tally.ts → close BB, collect shares shamir.ts → shamirCombine(shares) ecies.ts → unwrap each ballot key

Cast Path

Cast Flow Sequence

Numbered steps from the integration test: credential verification through VCL anchoring.

1
Issue Challenge Server signs Benaloh challenge with ewg key → challenge_id + server_sig
2
Build Eligibility Proof Credential (blind Schnorr sig) + nullifier derivation + challenge binding
3
Encrypt Ballot AES-GCM encrypt selections → ECIES wrap ballot key under election PK
4
Sign Cast Request ECDSA sign envelope: encrypted_ballot + proof + nullifier + wrapped_key
5
Verify + Append to BB Validate nullifier uniqueness → bbLeafHash(payload) → append leaf → issue STH
6
Anchor on VCL Create ewp_ballot_cast + bb_sth_published events → signed with VCL key

Tally Path

Tally Flow

Steps from BB close through threshold decryption to signed results.

1
Close Bulletin Board

No more ballots accepted. Final STH issued.

2
Collect Trustee Shares

Gather t-of-n Shamir shares from trustees.

3
Shamir Combine

shamirCombine(shares) → reconstructed election secret.

4
Verify Reconstructed PK

Confirm secret · G matches the election public key.

5
ECIES Unwrap + Decrypt

For each ballot: unwrap key → AES-GCM decrypt → validate selections.

6
Aggregate + Sign + Publish

Sum selections per contest → sign tally → VCL event: tally_published.

Zero-Trust Architecture

Trust Model: Who Trusts Whom

Every participant verifies independently. No single party can subvert the election without detection.

Voter
Trusts nothing — verifies everything
Benaloh challenge proves cast-as-intended
Receipt + inclusion proof proves recorded-as-cast
Public tally proof proves counted-as-recorded
BB Operator
Cannot equivocate
Multiple monitors compare STH snapshots
Different root hashes for same tree_size = detected cheating
Append-only Merkle tree prevents silent deletion
Trustees
Cannot collude below threshold
Shamir t-of-n: need 2 of 3 shares to decrypt
Any single trustee holds insufficient information
Election secret never exists in whole until tally
Issuers
Cannot forge credentials
Threshold issuance: need 2 of 3 issuer signatures
Blind Schnorr: issuer never learns voter identity
Credential binding: nullifier prevents double-voting
Worker Nodes
Cannot falsify records
Hash chain: tampering cascades through all entries
ECDSA ACK signatures prove node acceptance
3-node separation: federal, state, oversight