O joalheiro com luvas por dentro da caixa.
Hoje, para um servidor fazer qualquer conta com o seu dado, ele precisa abrir o dado. É como entregar o ouro ao joalheiro: você confia que ele não vai guardar um pouco. Criptografia comum protege o dado no caminho e no disco, mas não durante a conta.
Com criptografia homomórfica (FHE), a caixa chega trancada, o servidor trabalha pelas luvas e devolve a caixa ainda trancada, agora com o resultado dentro. Quem tem a chave abre. O servidor nunca viu o número que somou.
O preço é real: cada conta trancada é muito mais lenta e ocupa muito mais espaço que a conta aberta. Por isso FHE funciona bem para algumas tarefas (somar, contar, votar, estatística simples) e mal para outras. As páginas maturidade e fronteira dizem onde, com número medido.
Três dialetos, três tipos de conta.
Não existe um FHE só. Existem três famílias, e cada uma fala bem um tipo de conta. Escolher a errada é o erro mais caro de um projeto.
Inteiros exatos
Soma e multiplica números inteiros sem erro nenhum. Cada caixa trancada carrega 16.384 números ao mesmo tempo, como uma bandeja com 16.384 compartimentos.
Na prática: votação, contagens, somas de vendas. É o que a urna desta página usa.
42 + 58 = 100 · o servidor nunca vê 42, 58 nem 100Números com vírgula
Faz contas com números reais, aceitando um erro minúsculo no último dígito (algo como uma parte em um milhão).
Na prática: médias de sensores, estatística, modelos de aprendizado de máquina simples.
média de 25,1; 24,3; … = 25,09 · erro de ~0,000001Portas lógicas
Trabalha bit a bit, com as portas E, OU e NÃO. Faz qualquer conta, mas cada porta custa caro, e comparar dois números vira centenas de portas.
Na prática: comparações e decisões ("A é maior que B?") quando não há outro jeito.
7 é maior que 3? → sim · 246 portas lógicasQuem tranca, quem soma, quem abre.
Cada voto vira uma fileira com um 1 na posição do candidato e zeros no resto: votar na Carla é [0, 0, 1, 0]. O terminal tranca essa fileira com o cadeado público. O servidor soma as fileiras trancadas, uma sobre a outra, sem abrir nenhuma. No fim, só a soma é aberta.
São três papéis separados: a autoridade eleitoral guarda a chave e abre apenas o total; o terminal tranca o voto; o servidor de apuração soma. Nenhum deles, sozinho, liga um voto a uma pessoa.
Vote, apure, confira.
A mesma urna do topo, com todas as peças: cada voto passa por credencial carimbada às cegas, prova de que é válido e registro encadeado. O contador é compartilhado com todos os visitantes.
Como saber que ninguém mexeu na urna.
Recibo
Cada voto trancado gera uma impressão digital. Você guarda a sua e confere, no quadro público, que ela está lá.
Uma credencial por eleitor
Cada título recebe um único vale para votar, carimbado sem que o cartório veja o vale. Usar duas vezes é barrado.
Prova de voto válido
O terminal prova que a fileira tem exatamente um 1, sem revelar onde. Voto em dois candidatos é barrado.
Registro encadeado
Cada entrada do quadro carrega a impressão digital da anterior. Mexer numa entrada quebra todas as seguintes.
Qualquer um refaz a soma
O quadro é público: qualquer pessoa soma os votos trancados de novo e compara com o resultado.
O seu voto está na soma?
Depois de votar, o recibo aparece aqui sozinho. Cole um recibo (ou use o seu) e confira no quadro público. Depois, confira a corrente inteira.
Quatro ataques. Quatro bloqueios.
Cada botão tenta uma fraude de verdade contra a urna ao vivo. Ao lado, qual camada pegou e por quê.
Falsificar a credencial
Inventar um vale de voto sem o carimbo do cartório.
Votar duas vezes
Reusar o vale de quem já votou.
Votar em dois candidatos
Mandar uma fileira com dois 1, que somaria dois votos.
Adulterar o quadro
Mudar um voto já registrado, numa cópia do quadro.
O que torna a urna séria.
A conta trancada resolve o sigilo da soma. Uma eleição precisa de mais quatro peças, cada uma para um problema diferente.
Provar sem mostrar
O terminal prova que o voto tem exatamente um 1, sem revelar a posição. Escolha o candidato e gere a prova: ela é conferida sem que ninguém saiba em quem você votou.
Carimbar sem ver
O cartório precisa garantir que cada eleitor recebe um só vale, mas não pode saber qual vale é de quem. A solução é um carimbo às cegas: o eleitor põe o vale dentro de um envelope de carbono; o cartório carimba o envelope sem abrir; o carimbo passa para o vale.
- O eleitor gera o vale a partir do título e escolhe um número secreto.
- Embrulha o vale com esse número: o cartório não consegue ver o vale.
- O cartório carimba o embrulho.
- O eleitor desembrulha: o carimbo agora vale para o vale original.
- Qualquer um confere o carimbo; ninguém liga o vale ao título.
A chave dividida em cinco
A chave que abre o total não existe inteira em lugar nenhum. Ela foi dividida entre cinco instituições; quaisquer três juntas conseguem abrir, duas não. Escolha quem coopera e tente abrir a apuração.
Embaralhar para ninguém ligar
Mesmo trancada, a ordem dos votos pode entregar alguém ("o voto 42 entrou às 14h03, quando só a Maria estava na fila"). Três servidores embaralham os votos, um depois do outro, e trocam o "cadeado por fora" de cada um sem mudar o conteúdo. Depois do terceiro, ninguém sabe qual voto veio de quem.
Ilustração local: o embaralhamento roda no seu navegador, não no servidor desta demonstração.
Para ir mais fundo.
O dado depois de passar pelo cadeado. Quem não tem a chave vê só ruído. →
Somar, multiplicar ou comparar dados sem destrancar. É o que "homomórfica" quer dizer. →
Convencer alguém de que algo é verdade sem revelar o segredo. Aqui: o voto é válido, sem dizer em quem. →
Onde isso pode enganar.
Uma demonstração, não uma eleição oficial
A urna desta página é pública e compartilhada, e não há cadastro de eleitores de verdade. Ela mostra as peças funcionando, não um sistema homologado.
O preço de cada voto
Um voto trancado ocupa cerca de 1,5 MB, contra alguns bytes do voto aberto. Para uma cidade, é armazenamento e banda que precisam entrar na conta.
Sigilo não é integridade
A conta trancada esconde os votos, mas não garante sozinha que ninguém trapaceou. Por isso existem as outras quatro peças. Ver maturidade, "um bit por pergunta basta".
O embaralhamento aqui é ilustrativo
Os três embaralhadores rodam no seu navegador para mostrar a ideia. O servidor desta demonstração não embaralha votos.
Isto se aplica ao seu caso?
Conte em duas linhas o que você precisa decidir ou medir. A primeira conversa serve para ver se a medição resolve o seu caso, e, se não resolve, dizemos.
- Bancada e demonstrações próprias em Go, com a biblioteca Lattigo v6 (BGV/BFV, CKKS) e TFHE; parâmetros de 128 bits de segurança; 16.384 números por caixa.
- Assinatura cega: David Chaum, 1983. Prova de voto válido: protocolo Sigma com compromissos de Pedersen na curva P-256 e Fiat-Shamir. Chave 3 de 5: partilha de segredo de Shamir.
- Tamanho do voto trancado (≈1,5 MB) e tempo para trancar (dezenas de ms): medidos no servidor desta demonstração; variam com a máquina.