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
O que é FHE?
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.
Esquemas FHE
BGV / BFV
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
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
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
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.
Gera chaves. Decifra APENAS o resultado final.
Cifra o voto com chave pública. Gera ZKP.
Soma ciphertexts. NUNCA vê votos individuais.
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
Segurança
Como garantir que ninguém adulterou votos, inseriu fantasmas, ou alterou o resultado?
01
SHA-256 do ciphertexto. Eleitor verifica no Bulletin Board público.
02
1 token por título de eleitor. Assinatura cega impede reutilização.
03
Prova que o voto é one-hot [0,0,1,0] sem revelar o candidato.
04
Cada entrada encadeia SHA-256(anterior || voto). Adulteração quebra a cadeia.
05
Qualquer pessoa refaz a soma dos ciphertexts e compara com o resultado.
Cole o hash do recibo que você recebeu ao votar. O Bulletin Board é público — qualquer pessoa pode verificar.
Clique em cada ataque para ver como a defesa correspondente o bloqueia em tempo real.
Produção
Cada feature resolve um problema real de segurança eleitoral. Clique nos demos para testar.
Feature 1
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
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
A chave secreta é dividida entre 5 autoridades (Shamir Secret Sharing). Pelo menos 3 devem cooperar para decifrar. Nenhuma autoridade sozinha tem acesso.
Feature 4
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