A Soberania Calculável.
Receita e INSS cruzam bases para detectar fraude — sem nenhum servidor jamais ver dados individuais, e com 4 autoridades obrigatoriamente autorizando a decifração.
O Cenário
Receita Federal e INSS suspeitam de fraude previdenciária. Querem cruzar suas bases para identificar CPFs em comum. Hoje isso exige convênios complexos.
O Mecanismo
Cada agência cifra. Servidor neutro computa interseção sob cifra. Decifração exige quórum 4-de-4 (Receita + INSS + AGU + ANPD).
A Garantia
Tripla: técnica (ciphertext), jurídica (quórum), política (auditoria pública). Cloud estrangeira pode hospedar — não consegue ver nada mesmo sob CLOUD Act.
Definir os parâmetros.
Antes de qualquer cifragem, escolhemos os parâmetros do esquema FHE. Cada parâmetro é um trade-off entre segurança, velocidade e capacidade de cálculo.
Parâmetros BGV deste caso
O que cada termo significa
BGV (esquema "exato") — Família de criptografia homomórfica que opera sobre números inteiros. Não tem ruído de aproximação. Resultado é sempre bit-a-bit idêntico ao cálculo plaintext. Ideal para contagens, queries SQL e lógica booleana.
8 192 slots — Cada ciphertext FHE não é um único valor: é um vetor de 8 192 valores empacotados. Você opera sobre os 8 192 ao mesmo tempo com uma única operação. Esse "batching" nativo é o que torna FHE viável em escala.
Profundidade multiplicativa 2 — Quantas multiplicações encadeadas o ciphertext suporta antes de ficar instável. Cada multiplicação consome 1 nível. Mais profundidade = mais cálculo possível, mas também mais lento e mais caro.
~128 bits de segurança — Padrão da indústria. Significa que quebrar a chave por força bruta exigiria ~2128 operações — número astronômico, inviável até mesmo para hardware quântico previsível.
Base RLWE — Ring Learning With Errors. O problema matemático que sustenta toda a segurança. É o mesmo problema sobre o qual NIST padronizou a próxima geração de criptografia pós-quântica (ML-KEM, ML-DSA).
Quatro partes.
A chave de decifração é dividida entre 4 entidades. Cada uma representa um vetor de controle distinto.
- ⚿Share 1/4Receita FederalFonte de dado fiscal
- ⚿Share 2/4INSSFonte de dado previdenciário
- ⚿Share 3/4AGUCustódia jurídica
- ⚿Share 4/4ANPDCustódia de privacidade
Cada agência cifra localmente.
Cada órgão prepara sua lista de CPFs suspeitos como vetor binário e cifra com a chave pública do consórcio (que foi gerada via threshold no passo 2). Apenas o ciphertext deixa o data center da agência.
Exemplo · o que Receita prepara
cpfs_suspeitos := [
"123.456.789-00",
"987.654.321-11",
// ... ~100 CPFs
]
// Vetor binário (1 = suspeito)
vec := listaParaVetor(cpfs_suspeitos)
pt := encoder.Encode(vec)
ct := encryptor.Encrypt(pt)
// Apenas ct é compartilhado
send(ct) // 384 KB
Por que esse formato
Vetor característico binário — Em vez de cifrar a lista de CPFs como strings, convertemos para vetor binário onde cada posição representa um CPF do universo. 1 = está na lista, 0 = não está. Este formato permite que a interseção (passo 4) seja simplesmente uma multiplicação element-wise.
Cifragem antes do compartilhamento — A diferença vs cruzamento tradicional: o vetor é cifrado dentro do data center da agência. Em nenhum momento existe uma cópia em claro fora dali.
3 ms por agência — Tempo real medido. Negligível comparado ao tempo de qualquer convênio interagências tradicional (meses para aprovação).
INSS faz o mesmo — Em paralelo, o INSS prepara sua própria lista, cifra com a mesma chave pública do consórcio, e envia. Os dois ciphertexts viajam para o servidor neutro independentemente.
Servidor neutro computa interseção.
O servidor neutro recebe os dois ciphertexts e executa uma multiplicação element-wise seguida de InnerSum. Tudo cifrado, do início ao fim. O servidor pode até estar em cloud estrangeira — não tem chave para decifrar.
O algoritmo · pseudo-código
ctIntersec := evaluator.Mul(
ctReceita, ctINSS
)
evaluator.Relinearize(ctIntersec)
// 2. soma todos os slots
ctCount := evaluator.InnerSum(
ctIntersec, 1, slots,
)
// → ctCount contém a contagem
// servidor não consegue ver
O que está acontecendo
Multiplicação cifrada (AND lógico) — A propriedade chave do FHE é que a multiplicação de dois ciphertexts decifra para o produto dos plaintexts. Como nossos vetores são binários (0 ou 1), o produto slot-a-slot é exatamente o AND: só vale 1 quando AMBOS são 1 — ou seja, apenas nos CPFs que aparecem em ambas as listas.
InnerSum (contagem) — Soma todos os slots do vetor cifrado para obter a contagem total de CPFs na interseção. Internamente usa rotações Galois.
Cloud estrangeira pode hospedar — O servidor pode estar fisicamente nos EUA, na Europa, em qualquer lugar. Sem a chave (que está distribuída entre as 4 partes brasileiras), ele só vê bytes pseudoaleatórios. Mesmo sob CLOUD Act americano, não tem nada para entregar.
44 ms para 100 CPFs — Em produção real com milhões de CPFs por agência, o mesmo padrão escala via batching de slots — cada ciphertext suporta 8 192 CPFs em paralelo.
Tentativa bloqueada.
O que acontece se apenas Receita e INSS tentarem decifrar sem AGU e ANPD?
- ✓AutorizouReceita Federal
- ✓AutorizouINSS
- ✗AusenteAGU
- ✗AusenteANPD
Quatro autorizam.
Agora as 4 partes cooperam. Cada uma contribui seu share. O resultado é decifrado e revelado.
- ✓Share OKReceita Federal
- ✓Share OKINSS
- ✓Share OKAGU
- ✓Share OKANPD
Comparação matemática.
Para provar que o cálculo cifrado produziu o mesmo resultado que um cruzamento plaintext tradicional, comparamos lado a lado.
FHE vs Plaintext
Por que essa precisão importa
Cruzamento fiscal exige exatidão — Diferente de scoring de risco ou recomendação (onde aproximação CKKS é aceitável), uma operação fiscal/previdenciária não pode ter erro. Um único CPF errado pode virar processo administrativo. BGV garante zero erro.
Auditoria pública — Como o resultado é matematicamente verificável (BGV é determinístico no resultado final), qualquer auditor pode rodar a mesma operação sobre os mesmos ciphertexts e obter exatamente a mesma contagem. Reproducibilidade é parte da garantia jurídica.
Defesa contra contestação — Se um CPF detectado contesta judicialmente o cruzamento, o tribunal pode auditar o processo inteiro (sem ver dados das outras agências) e confirmar matematicamente que o cruzamento foi feito corretamente.
Os cenários.
Parte maliciosa
Uma das 4 vira maliciosa? Não pode decifrar sozinha. Precisa convencer 3 outras. Cada decifração registra log auditável.
Cloud estrangeira
CLOUD Act ordena entrega de dado? A cloud só armazena ciphertext. Não tem chave. Não tem nada legível para entregar.
Vazamento de chave
Uma das 4 chaves vaza? O sistema não compromete. Outras 3 ainda são necessárias. Em produção 4-de-7, perda de até 3 chaves não compromete.
Recuperar sk a partir de pk
Resolver Ring-LWE em N=8192 → ~2128 operações. Inviável.
Tripla garantia institucional.
Garantia técnica + jurídica + política em uma única arquitetura. O modelo não depende de "confiar no operador" — funciona mesmo se o operador for malicioso.
O fluxo completo
- Definimos parâmetros BGV (esquema exato)
- Chave dividida em 4 shares: Receita + INSS + AGU + ANPD
- Cada agência cifrou sua lista localmente
- Servidor neutro computou interseção sob cifra (44 ms)
- Tentativa sem quórum foi bloqueada matematicamente
- Decifração com 4 autorizações revelou 30 CPFs em comum
- Validação confirmou match exato com plaintext