A Conta que se Mantém Fechada.
Acompanhe como três bancos brasileiros podem descobrir clientes envolvidos em fraude colaborativa — sem nenhum dos três jamais ver a lista dos outros.
O Cenário
Três bancos suspeitam que o mesmo grupo de CPFs movimenta valores suspeitos em todos os três simultaneamente. Cada banco quer descobrir QUAIS CPFs aparecem nas três listas — sem revelar o restante.
O Problema
Por motivos legais (LGPD) e competitivos, nenhum banco pode mostrar sua lista aos outros. PSI sob FHE resolve isso matematicamente.
A Garantia
O servidor neutro nunca vê qualquer das listas. A ÚNICA informação que sai é a interseção decifrada coletivamente. Garantia matemática (RLWE), não política.
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 Escolhidos · BGV
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 plaintext. Ideal para contagens, queries SQL e lógica booleana — exatamente o que PSI precisa.
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 — em produção, cabem milhões de CPFs por ciphertext.
Profundidade multiplicativa 2 — Quantas multiplicações encadeadas o ciphertext suporta antes de ficar instável. Cada multiplicação consome 1 nível. PSI de 3 partes precisa de 2 multiplicações encadeadas → profundidade 2 basta.
~128 bits de segurança — Padrão da indústria. Quebrar a chave por força bruta exigiria ~2128 operações — número astronômico, inviável até em hardware quântico previsível.
Base RLWE — Ring Learning With Errors. O problema matemático que sustenta a segurança. É o mesmo problema sobre o qual NIST padronizou ML-KEM e ML-DSA, a próxima geração de criptografia pós-quântica.
Gerar par de chaves.
Em produção, esta chave seria gerada via threshold cryptography entre os 3 bancos + uma autoridade neutra. Aqui simplificamos com chave única para clareza.
Fluxo de Chaves
Quórum exigido para decifrar o resultado final. Nenhuma parte sozinha pode ver nada.
O Que Foi Gerado
Cada banco gera e cifra.
Cada banco produz um vetor característico binário (1 = CPF na lista) e cifra localmente. APENAS o ciphertext sai do banco.
Listas em Claro (apenas referência didática)
- Banco A (BB)007 023 089 142 200
+ 5 CPFs próprios - Banco B (Itaú)007 023 089 142 200
+ 5 CPFs próprios - Banco C (Bradesco)007 023 089 142 200
+ 5 CPFs próprios
Cifragem BGV
O overhead é o preço da privacidade matemática. Em troca, os outros bancos jamais conseguem ver esta lista.
O que o servidor neutro recebe.
Os 3 bancos enviam apenas seus ciphertexts. O servidor neutro JAMAIS recebe a chave secreta.
Amostra Real do Ciphertext (32 primeiros bytes)
74 65 78 74 4d 65 74 61
44 61 74 61 22 3a 7b 22
53 63 61 6c 65 22 3a 7b
...
Cada ciphertext completo tem ~384 KB de bytes pseudoaleatórios. Sem a chave secreta, recuperar a lista de CPFs exigiria resolver Ring-LWE em dimensão 8 192 — ~2128 operações.
Total Trafegado
Computar interseção sob cifra.
O servidor multiplica os 3 ciphertexts elemento-a-elemento. Slot a slot, o produto é 1 apenas onde TODOS os três bancos têm 1 — exatamente a interseção.
O Algoritmo
Performance Real Medida
Decifração colaborativa.
O resultado cifrado é decifrado coletivamente (em produção, com quórum threshold). Cada bit 1 do vetor resultante revela um CPF na interseção.
CPFs Detectados na Interseção
★ CPF#023
★ CPF#089
★ CPF#142
★ CPF#200
O Que Cada Banco Recebe
APENAS estes 5 CPFs. Os outros 5 CPFs de cada lista permanecem privados — nenhum banco descobre as listas dos concorrentes.
Validação matemática.
Para provar que o cálculo cifrado equivale ao plaintext, comparamos contra a interseção esperada calculada em claro.
FHE vs Plaintext
| Métrica | Valor |
|---|---|
| Esperado | 5 CPFs |
| Encontrado | 5 CPFs |
| Corretos | 5 / 5 |
| Falsos positivos | 0 |
| Falsos negativos | 0 |
| Status | MATCH PERFEITO |
Por que é Exato
BGV é um esquema exato (sem ruído de aproximação como CKKS). Para inteiros dentro do plaintext modulus, o resultado FHE é idêntico ao plaintext bit por bit.
O que um banco desonesto consegue.
Suponha que um dos bancos (ou um funcionário do servidor neutro) tente descobrir a lista dos OUTROS bancos a partir do ciphertext recebido.
Tentativas de Ataque
- Tentativa 1 — Ler bytes do ciphertext Resultado: bytes pseudoaleatórios. Nada extraído.
- Tentativa 2 — Brute force das listas Universo de 256 posições, ~10 ativas. Combinações: C(256,10) ≈ 1017. Inviável; e ainda precisaria decifrar para verificar.
- Tentativa 3 — Recuperar sk a partir de pk Resolver Ring-LWE em dimensão 8 192. Melhor ataque conhecido: ~2128 operações. Inviável em hardware clássico ou quântico previsível.
O que sai do sistema
A ÚNICA informação que sai legitimamente é o resultado decifrado pelo quórum threshold: a interseção. E só.
O que acabou de acontecer.
Em menos de 1 segundo total, três bancos descobriram fraudadores comuns sem nenhum deles ver a lista dos outros.
O Fluxo Completo
- Três bancos geraram listas privadas de CPFs suspeitos
- Cada banco cifrou sua lista localmente sob BGV
- Enviaram apenas os ciphertexts ao servidor neutro
- O servidor multiplicou os 3 ciphertexts sob cifra (7 ms)
- Decifração colaborativa revelou apenas a interseção
- Cada banco descobriu os 5 fraudadores comuns