← Índice de Demos
FHE em Ação · Censo Cifrado
Demo 10 · IBGE / Programas Sociais
Demonstração Factual

A Soberania Calculável.

100 famílias contribuem ao censo. IBGE produz tabela agregada. Sem registros individuais expostos a ninguém.

Cenário

IBGE conduz censo. Cada família contribui dados cifrados localmente. Servidor central computa agregado por região para focalização de programas sociais.

Problema

Hoje IBGE armazena dados em claro em data centers próprios. Acesso de pesquisador exige autorização individual lenta. Risco de vazamento permanente.

Garantia

Sob FHE: dados ficam permanentemente cifrados. Tabelas agregadas são geradas sob cifra. Decifração coletiva exige IBGE + ANPD + AGU.

Passo 01 · Setup

Definir os parâmetros.

Antes do censo cifrado, escolhemos os parâmetros BGV. Cada um é um trade-off entre segurança, velocidade e capacidade.

Parâmetros BGV

8 192Slots/ciphertext
EXATOTipo de esquema
2Profundidade
~128 bitSegurança

O que cada termo significa

BGV (esquema "exato") — Família FHE que opera sobre inteiros. Sem ruído de aproximação. Para contagem censitária precisa-se de exatidão absoluta — BGV é o esquema correto.

8 192 slots — Cada ciphertext é um vetor de 8 192 valores. Em produção real do censo, cada slot pode codificar uma família ou uma região. Operação única processa todos.

Profundidade multiplicativa 2 — Quantas multiplicações encadeadas o ciphertext suporta. Para somas censitárias, profundidade baixa basta — somar é mais barato que multiplicar.

~128 bits de segurança — Padrão da indústria. Quebrar a chave exigiria ~2128 operações — astronômico, inviável até em hardware quântico.

Base RLWE — Ring Learning With Errors. Mesmo problema do ML-KEM/ML-DSA padronizados pelo NIST como criptografia pós-quântica.

Passo 02 · Threshold

Chave nacional dividida.

Em produção real, a chave de decifração não pertence a uma única entidade. Ela é dividida matematicamente entre múltiplas instituições, cada uma com seu papel constitucional distinto.

Quem detém os shares

IBGE — operador técnico do censo. Detém share 1 da chave. Sozinho não consegue decifrar nada.

ANPD — autoridade nacional de proteção de dado. Detém share 2. Garante que o uso respeita LGPD.

AGU — Advocacia-Geral da União. Detém share 3. Custódia jurídica da operação.

Quórum exigido: 3 de 3. Sem autorização das três, o resultado permanece matematicamente inacessível.

O que é "threshold cryptography"

Chave dividida, não copiada — A chave secreta que decifra o resultado é matematicamente dividida em N pedaços (shares) usando técnicas como Shamir Secret Sharing. Nenhum pedaço sozinho contém qualquer informação útil sobre a chave inteira — é como dar 3 pedaços de um quebra-cabeças onde nenhum pedaço isoladamente revela a imagem.

Decifração coletiva — Para decifrar, cada parte gera um "share de decifração" (não revela seu pedaço de chave). Os shares são agregados matematicamente, e só então o resultado aparece em claro. Se faltar uma parte, o agregado é inútil.

k-de-n (quórum) — Em produção real você pode configurar "3-de-5" ou "4-de-7", permitindo redundância: se até k-1 partes ficarem indisponíveis, o sistema ainda funciona. Aqui usamos 3-de-3 (todas obrigatórias) por simplicidade.

Garantia tripla — Técnica (matemática), jurídica (LGPD via ANPD), política (auditoria pública via AGU). Cada decifração deixa rastro irrefutável das três autorizações.

Por que isso importa para o EstadoThreshold cryptography é o que permite que dados sensíveis sejam processados sem que nenhum órgão público sozinho — nem mesmo o operador técnico — tenha acesso unilateral. É controle distribuído pelo desenho da matemática, não pela boa-fé institucional.
Passo 03 · Coleta

Famílias contribuem cifrado.

Cada família responde ao censo no próprio dispositivo (app, terminal, recenseador). O dado é cifrado antes de qualquer byte sair da casa. APENAS o ciphertext viaja para o IBGE.

Exemplo concreto · Família X

Dados em claro (no celular):

região : Nordeste
renda_familiar: R$ 850/mês
linha_pobreza : SIM
num_pessoas : 4

Vetor binário gerado localmente:

pobres_por_região = [0,1,0,0,0]
total_por_região = [0,1,0,0,0]
                  ↑
          Nordeste = 1

Cifragem local: o vetor é cifrado com a chave pública do consórcio (gerada na fase de threshold). Sai da casa apenas o ciphertext de ~384 KB.

O que cada coisa significa

Vetor característico (one-hot) — Em vez de enviar "estou no Nordeste e sou pobre", a família envia um vetor binário onde cada posição representa uma região, e o valor é 1 ou 0. Isso permite que o IBGE simplesmente some os vetores para obter o total por região.

Cifragem antes do envio — A diferença crucial vs censo tradicional: o vetor é cifrado na própria casa, antes de viajar. Em nenhum momento existe uma cópia em claro fora do dispositivo da família.

3 ms por dataset — Cifrar um vetor de 8 192 slots leva poucos milissegundos em smartphone comum. Velocidade não é gargalo.

100 famílias na demo — Versão didática. Em produção real do IBGE, milhões de famílias contribuem em paralelo. O padrão escala porque cada cifragem é independente.

Passo 04 · Trânsito

O que chega ao servidor.

Os ciphertexts viajam pela internet até o IBGE — e podem inclusive ser hospedados em cloud estrangeira (AWS, Azure, GCP) sem problema. O motivo é matemático.

O que o servidor enxerga

Bytes que chegam:

01 7b 22 50 6c 61 69 6e
74 65 78 74 4d 65 74 61
44 61 74 61 22 3a 7b 22
53 63 61 6c 65 22 3a 7b
...
~770 KBTotal enviado (2 ciphertexts)

Esses bytes são pseudoaleatórios — indistinguíveis de ruído para qualquer observador sem a chave secreta.

Por que cloud estrangeira pode hospedar

CLOUD Act americano — Lei dos EUA (2018) que obriga empresas americanas (incluindo AWS, Azure, GCP) a entregar dados de seus clientes mediante ordem judicial americana, mesmo se os dados estão fisicamente fora dos EUA. É a maior preocupação de soberania digital do Brasil hoje.

Por que FHE neutraliza — A cloud só armazena ciphertext. Não tem a chave (que está distribuída no Brasil entre IBGE+ANPD+AGU). Mesmo se receber ordem judicial americana e for obrigada a entregar tudo o que tem, entrega bytes pseudoaleatórios. Ninguém — nem mesmo o juiz americano — consegue extrair informação útil.

Soberania de dado por matemática — Em vez de migrar tudo para cloud nacional (caro, lento, limitado), o Brasil pode usar a infraestrutura global de cloud sem entregar soberania. É exatamente o tipo de movimento que países sérios em soberania digital (França via SecNumCloud, Alemanha via Gaia-X) estão buscando.

Passo 05 · Agregação

Servidor soma sob cifra.

O servidor central recebe os ciphertexts de todas as famílias e os agrega — sem nunca decifrar nenhum. A operação central é literalmente uma soma cifrada.

O algoritmo · em pseudo-código

// 1. Recebe N ciphertexts de famílias
ct_acumulado := ct[0]

// 2. Soma todos sob cifra
for i := 1; i < N; i++ {
  ct_acumulado := evaluator.Add(
    ct_acumulado, ct[i],
  )
}

// 3. Resultado: ct_total_por_região
// nenhum decifração até aqui

O que está acontecendo

Soma homomórfica — A propriedade que dá nome a "FHE" (Fully Homomorphic Encryption) é exatamente esta: a soma de dois ciphertexts decifra para a soma dos plaintexts. Dec(ct₁ + ct₂) = m₁ + m₂. O servidor faz a operação sem nunca ver os números.

Slot-wise — Cada ciphertext tem 8 192 slots (5 deles ativos para as 5 regiões). A soma é feita slot a slot. Slot 0 (Norte) acumula só os 1's vindos das famílias do Norte. Slot 1 (Nordeste) acumula só os do Nordeste. E assim por diante. Tudo paralelo, em uma única operação.

Por que esta demo é "trivial" — O exemplo didático já chega com os agregados pré-somados para simplificar o passo a passo. Em produção real do IBGE, este passo é onde as milhões de somas acontecem — e é o passo que mais ganha com batching de slots.

Sem decifração — Em momento algum o servidor toca em valores em claro. Ele só sabe que tem dois "objetos opacos" e que a operação Add devolve um terceiro objeto opaco. A matemática garante que esse terceiro objeto, quando decifrado pelo quórum, será a soma correta.

Passo 06 · Decifração

A tabela pública.

Após o quórum (IBGE + ANPD + AGU) autorizar a decifração, o resultado agregado é revelado. APENAS o agregado por região — nenhum registro individual.

Resultado decifrado

RegiãoPobresTotal% Pobreza
Norte41330.8%
Nordeste102147.6%
Centro-Oeste31520.0%
Sudeste53016.7%
Sul42119.0%

Como ler esta tabela

Pobres — quantas famílias daquela região estão abaixo da linha de pobreza (renda mensal < R$ 218 per capita).

Total — quantas famílias da amostra estão naquela região.

% Pobreza — taxa de pobreza relativa, calculada após a decifração (não sob cifra). É o número que vai para a focalização do programa social.

Distribuição esperada — Nordeste lidera (47,6%), Sudeste tem menor (16,7%). Coerente com dados reais do IBGE — a demo gerou os dados sintéticos com essa distribuição calibrada.

O que NÃO está aqui — nenhuma família individual aparece. Nenhum CPF. Nenhum endereço. Nenhuma renda específica. Apenas as 5 contagens agregadas e os 5 totais.

Esta tabela é o produto final do censoÉ o que vira política pública — Bolsa Família, BPC, focalização regional. E é tudo o que sai do sistema. Os 100 registros individuais permanecem matematicamente inacessíveis para sempre.
Passo 07 · Prova

Validação matemática.

Para provar que o cálculo cifrado produziu o mesmo resultado que um cálculo plaintext tradicional, comparamos lado a lado.

Comparação FHE × plaintext

RegiãoFHEClaroErro
Norte440
Nordeste10100
Centro-Oeste330
Sudeste550
Sul440
5 / 5Regiões com match exato

Por que é exato

BGV é esquema "exato" — Diferente de CKKS (que opera em números reais aproximados), BGV opera em inteiros módulo um primo. Sem ruído de aproximação. O resultado da soma cifrada é sempre bit-a-bit idêntico à soma plaintext.

Por que isso importa para censo — Em estatística pública, "31% pobres no Norte" e "30,8% pobres no Norte" são números diferentes. A precisão precisa ser absoluta. BGV garante isso. Para benchmarking de hospital ou ML federado, CKKS aproximado basta. Para censo, exigimos BGV exato.

Auditoria pública possível — Como o resultado é matematicamente verificável (FHE não introduz aleatoriedade no resultado final), qualquer auditor independente pode rodar a mesma operação sobre os mesmos ciphertexts e obter o mesmo agregado. Reproducibilidade é parte da garantia.

Passo 08 · Adversarial

Defesa em três camadas.

Vamos imaginar três adversários diferentes tentando extrair dado individual. Cada um falha por um motivo diferente — e essa redundância é a defesa.

Adversário 1 — Governo estrangeiro (CLOUD Act)

Ataque: juiz americano emite ordem para AWS/Azure/GCP entregar todos os dados brasileiros hospedados em seus servidores.

Defesa: a cloud só tem ciphertext. Entrega bytes pseudoaleatórios. Sem a chave (que está distribuída no Brasil entre IBGE+ANPD+AGU), nada é decifrável. Mesmo a NSA com supercomputador clássico precisaria de ~2128 operações para tentar quebrar uma única chave.

Adversário 2 — Funcionário desonesto do IBGE

Ataque: funcionário com acesso ao share do IBGE tenta decifrar dado individual.

Defesa: ele tem só 1 dos 3 shares necessários. Sozinho, seu share é matematicamente inútil. Para decifrar precisaria convencer ANPD e AGU a colaborar — três decisões institucionais simultâneas, com auditoria.

Adversário 3 — Pesquisador com bases públicas

Ataque: pesquisador legítimo tenta cruzar a tabela agregada com bases públicas (eleitorais, CNPJ, OpenStreetMap) para re-identificar famílias específicas.

Defesa: a tabela agregada com K-anonymity ≥ 10 por célula é resistente — cada célula representa pelo menos 10 famílias indistinguíveis. Para hardening adicional, pode-se aplicar privacidade diferencial (ruído gaussiano calibrado) antes de publicar.

Por que três camadas?

Defesa em profundidade — A força não vem de uma única barreira "perfeita", mas de três barreiras independentes que precisariam ser quebradas simultaneamente. Quebrar a matemática (RLWE) é inviável. Quebrar a distribuição de chaves exige colusão tripla institucional. Quebrar a anonimização exige re-identificação contra base agregada protegida por DP.

Não é "confiança no IBGE" — A defesa é deliberadamente construída para sobreviver a um IBGE malicioso. Esse é o ponto de FHE + threshold: não confiar em ninguém, e mesmo assim funcionar.

Passo 09 · Síntese

Estado soberano por desenho.

O que esta demo prova, em poucas frases: é possível conduzir censo público sem que nenhuma instituição (nem o IBGE) tenha acesso unilateral a registros individuais.

O fluxo completo

  1. Definimos parâmetros BGV (esquema exato, ideal para contagem)
  2. Chave dividida em 3 shares (IBGE, ANPD, AGU)
  3. 100 famílias cifraram dados localmente em vetor binário
  4. Ciphertexts viajaram (cloud nacional ou estrangeira indiferente)
  5. Servidor somou ciphertexts sob cifra (operação Add homomórfica)
  6. Quórum 3-de-3 autorizou a decifração
  7. Tabela agregada por região revelada — apenas 5 contagens
  8. Validação confirmou match exato com plaintext

Os números reais

3 msCifragem por família
384 KBPor ciphertext
5 / 5Regiões corretas
EXATAPrecisão (BGV)
O que isto destrava para o Estado brasileiroCenso descentralizado · focalização de programas sociais sem cadastro central exposto · soberania digital matemática · conformidade automática com LGPD art. 11 · uso de cloud estrangeira sem perda de soberania · rastreabilidade institucional via threshold.
A tese centralSoberania de dado tradicional depende de "confiar no operador". Soberania por desenho criptográfico não depende de confiar em ninguém — funciona mesmo se o operador for malicioso. É a única arquitetura defensável a longo prazo para censo, focalização social, e qualquer operação estatal sobre dado de cidadão.
Camada adicional · Differential PrivacyDesde 2020, o US Census Bureau adota Differential Privacy como camada obrigatória antes de publicar dados agregados (decisão motivada por ataques de reconstrução contra dados de 2010). O IBGE ainda não adotou DP oficialmente, mas é best practice. FHE + threshold + DP formam a arquitetura completa: FHE garante que ninguém viu dado individual durante o processamento; threshold distribui controle institucional; DP adiciona ruído gaussiano calibrado no resultado final para impossibilitar ataques de reconstrução mesmo com conhecimento auxiliar.