Tutorial Interativo — FHE + Votação Segura

E se um computador pudesse calcular seus dados sem nunca vê-los?

Criptografia Homomórfica (FHE) permite que servidores processem dados cifrados sem decifrá-los. Neste tutorial, você vai entender como isso funciona — e testar com demos reais.

128 bits

Segurança criptográfica

16.384

Inteiros por ciphertexto (SIMD)

3-de-5

Threshold para decifrar

0 erros

Na apuração homomórfica

Tecnologias utilizadas

Lattigo v6 Go 1.22 BGV/BFV CKKS TFHE P-256 SHA-256 RSA 2048 Shamir SSS Sigma Protocol Pedersen Fiat-Shamir

O que é FHE?

Computar dados
sem nunca vê-los

Imagine uma caixa-forte transparente: você consegue manipular o que está dentro, mas não consegue ver o conteúdo.

Na criptografia tradicional, para calcular algo, você precisa decifrar primeiro. Com FHE (Fully Homomorphic Encryption), o servidor opera diretamente sobre os dados cifrados. O resultado, quando decifrado, é idêntico ao que seria obtido com os dados originais.

Soma cifrada Multiplicação cifrada Lógica cifrada

Esquemas FHE

Três formas de computar cifrado

BGV / BFV

Inteiros Exatos

Opera sobre vetores de inteiros com resultado exato. Cada ciphertexto carrega 16.384 valores simultâneos (SIMD). Ideal para votação, contagens e agregações.

// Soma homomórfica

Enc(42) + Enc(58) = Enc(100)

// Servidor nunca ve 42, 58 ou 100

Usado nos exemplos de votação (04, 05, 06)

CKKS

Ponto Flutuante

Opera sobre números reais com precisão aproximada (~45 bits). Ideal para machine learning, estatísticas e processamento de sinais sobre dados cifrados.

// Media de temperaturas cifradas

mean(Enc([25.1, 24.3, ...])) = Enc(25.09)

// Erro ~ 10^-6 (imperceptivel)

Usado no exemplo de temperatura (02)

TFHE

Portas Logicas

Opera bit a bit com gates AND, OR, XOR, NOT. Bootstrapping automático após cada gate — profundidade ilimitada. Turing-completo: pode avaliar qualquer função.

// Comparador cifrado: A > B?

AND(Enc(1), NOT(Enc(0))) = Enc(1)

// 7 > 3 = true (246 gates)

Usado no exemplo de gates (03)

Aplicação Prática

Votação 100% cifrada

Cada voto é cifrado como um vetor one-hot [0,0,1,0]. O servidor soma os votos homomorficamente — sem nunca ver em quem cada pessoa votou. Apenas a SOMA final é decifrada.

Autoridade Eleitoral

Gera chaves. Decifra APENAS o resultado final.

Terminal de Votação

Cifra o voto com chave pública. Gera ZKP.

Servidor de Apuração

Soma ciphertexts. NUNCA vê votos individuais.

Experimente: vote na eleição cifrada

Seu voto será cifrado com FHE real (BGV, Lattigo v6), verificado com ZKP, e registrado com blind signature. O servidor nunca vê seu voto.

Candidatos

Votos: 0

Segurança

5 camadas de proteção

Como garantir que ninguém adulterou votos, inseriu fantasmas, ou alterou o resultado?

01

Recibo Criptografico

SHA-256 do ciphertexto. Eleitor verifica no Bulletin Board público.

02

Credencial Única

1 token por título de eleitor. Assinatura cega impede reutilização.

03

ZKP de Voto Válido

Prova que o voto é one-hot [0,0,1,0] sem revelar o candidato.

04

Hash Chain

Cada entrada encadeia SHA-256(anterior || voto). Adulteração quebra a cadeia.

05

Auditoria Universal

Qualquer pessoa refaz a soma dos ciphertexts e compara com o resultado.

Verifique seu recibo

Cole o hash do recibo que você recebeu ao votar. O Bulletin Board é público — qualquer pessoa pode verificar.

Teste os ataques (todos bloqueados)

Clique em cada ataque para ver como a defesa correspondente o bloqueia em tempo real.

Produção

4 features de produção

Cada feature resolve um problema real de segurança eleitoral. Clique nos demos para testar.

Feature 1

ZKP Real — Sigma Protocol

Prova matemática que o voto é one-hot válido [0,0,1,0] sem revelar o candidato. Usa Pedersen Commitments em curva P-256 com OR-Proof de Cramer-Damgard-Schoenmakers e transformada de Fiat-Shamir.

Feature 2

Blind Signatures RSA

O cartório assina o token do eleitor SEM VER o conteúdo (Chaum, 1983). Isso desvincula a identidade do eleitor do token usado na votação. Quando o token aparece na urna, ninguém sabe de quem é.

Feature 3

Threshold FHE — 3 de 5

A chave secreta é dividida entre 5 autoridades (Shamir Secret Sharing). Pelo menos 3 devem cooperar para decifrar. Nenhuma autoridade sozinha tem acesso.

Selecionadas: 0/5 (mínimo: 3)

Feature 4

Mixnet — Embaralhamento

Mesmo cifrados, a ORDEM dos votos pode revelar informação (ex: "voto #42 é de quem entrou às 14:03"). A Mixnet é uma cadeia de 3 servidores que embaralham + re-encriptam os votos. Após 3 mix nodes, é impossível ligar um voto ao eleitor.

// Cada mix node:

1. Recebe votos em ordem A, B, C, D

2. Embaralha: C, A, D, B (Fisher-Yates)

3. Re-encripta: ct' = ct + Enc(0)

// Link entrada-saida destruido