Stickybit.← FHEEnglishMedição · FHE · 2026
Medição · criptografia homomórfica · 16 testes

O Google diz que FHE ficou prático. Medimos onde ele para.

Calcular sobre o dado cifrado, sem nunca abri-lo, já funciona em produção, numa fatia menor e mais específica do que os anúncios sugerem. Rodamos dezesseis testes na mesma máquina e desenhamos a fronteira. Fora dela, em vários casos, não é lentidão: é impossível com os parâmetros que se usam na prática.

Medido · bancada própria · agosto de 2026
Espécime · escolha um teste e veja o número que decide
FuncionaFunciona, mas custaNão funciona na prática

Números medidos na bancada (média de 3 repetições, Lattigo v6.2.0 e go-tfhe v0.2.2, laptop Apple M-series). "Ancorado" = projeção a partir de uma medição real. Entre sessões a mesma máquina varia até ~1,8×; as razões entre operações são o que vale em outra máquina.

No dia a dia

Uma caixa trancada com luvas por fora.

Pense numa caixa de vidro trancada, com luvas de borracha presas na parede. Você põe as peças lá dentro, tranca e entrega a caixa a um joalheiro. Ele monta o anel pelas luvas, sem nunca pegar as peças na mão, e devolve a caixa ainda trancada. Só você tem a chave.

É isso que a criptografia homomórfica (FHE, na sigla em inglês) faz com dados: o servidor calcula sobre o dado cifrado, sem nunca abri-lo, e devolve um resultado que só o dono da chave consegue ler. Serve para processar dado de saúde, financeiro ou pessoal numa nuvem em que você não precisa confiar.

O limite também aparece na analogia. Pelas luvas dá para somar e multiplicar. Olhar não dá: o joalheiro não consegue ver qual pedra é maior. Toda decisão ("qual é o maior?", "passou do limite?") é difícil sob cifra, e a saída mais barata quase sempre é devolver ao cliente para ele decidir.

Clientecifra com a chavesó ele abre Servidorsoma e multiplica às cegas + × + × resultado cifrado "qual é o maior?"não dá para olhar: devolve
O cliente cifra, o servidor calcula às cegas e devolve cifrado. Decidir é o que o servidor não consegue fazer bem: a saída barata é devolver a decisão a quem tem a chave.
O que estamos conferindo

Três documentos dizem que ficou prático. Nenhum publica os números lado a lado.

O anúncio do Google apresenta o HEIR e quatro demonstrações (recomendação, fraude de cartão, detecção de intrusão e palavra de ativação de voz), todas num único núcleo de processador e sem tempos publicados. O HEIR é o código. O artigo HE-LRM faz busca privada numa tabela de recomendação e declara de 24 s a 489 s.

A observação que organiza tudo: o HEIR não é um esquema novo nem um acelerador. É um compilador que gera código para as mesmas bibliotecas que usamos, a Lattigo inclusive. O teto de desempenho dele é, literalmente, o que esta bancada mede. Ele automatiza reescritas chatas e valiosas; não muda a física. Por isso as quatro demonstrações escolhidas são modelos rasos sobre dados já resumidos: exatamente a primeira coluna do quadro abaixo.

Funciona

Somar, pontuar, agregar

  • somar e multiplicar em lote
  • produto interno, camada densa
  • curvas suaves num intervalo garantido
  • votação, contagens, gradientes federados
Funciona, mas custa

Profundo, dividido, grande

  • muitas multiplicações seguidas
  • dividir por valor cifrado
  • a faxina (bootstrapping)
  • banda e chaves do servidor
Não funciona na prática

Decidir sob cifra

  • comparar, achar o maior, ordenar
  • ativação exata de rede neural (ReLU)
  • buscar por posição cifrada em tabela grande
  • qualquer "se" que dependa do dado cifrado

Em uma frase: FHE funciona hoje quando o cálculo é uma sequência fixa e rasa de somas e multiplicações, aplicada a um lote grande, com toda comparação e decisão empurradas para o cliente, que tem a chave.

T1 · T7 · T11

Multiplicar é barato. Mover é caro.

A frase "FHE é lento porque multiplicar cifrado é caro" está errada. Multiplicar leva 2,7 ms. O caro é mover dados entre as posições de um pacote cifrado: somar um vetor de 2.048 números exige 12 movimentos e leva 112,8 ms, cerca de 40 vezes a multiplicação.

Daí vem o maior ganho da bancada. Arrumar os números nas posições certas antes de calcular (empacotar) deixou o placar de um catálogo 251 vezes mais rápido e uma camada densa de rede neural ~126 vezes, com a mesma biblioteca, os mesmos parâmetros e a mesma máquina.

"É só paralelizar" compra bem menos: com 4 núcleos, multiplicar escala 3,92 vezes, mas mover dados, que depende de memória, fica em 2,59. Com 8 núcleos, o rendimento cai.

Na prática: otimizar FHE é, antes de tudo, minimizar movimentos. É o que o HEIR automatiza, e é onde ele vale mais.

TEMPO DE CADA OPERAÇÃO (ESCALA LOG)multiplicar2,7 mssomar o vetor (12 movimentos)112,8 msQUANTO CADA ESTRATÉGIA ACELERA (ESCALA LOG)paralelizar em 4 núcleos3,92×arrumar o lote: camada densa~126×arrumar o lote: catálogo251×
Em cima, o custo de cada operação sobre um vetor de 2.048 números. Embaixo, o quanto cada estratégia acelera o mesmo cálculo. Escala logarítmica.
T3 · T8 · T9 · T12

O penhasco da decisão.

Sob cifra existem só dois operadores: soma e produto. Comparar dois valores vira uma cadeia de nove polinômios que gasta 40 níveis do orçamento, contra os 4 a 8 de um conjunto de parâmetros normal. Sem faxina, não é lento: é impossível. E há uma zona cega medida: valores que diferem menos de 2⁻³⁰ (um bilionésimo) não têm comparação definida.

Com a faxina de verdade, a 128 bits reais, escolher o maior entre 4 levou 23 min 31 s e devolveu uma posição com só 3 bits de precisão. Entre 1.000 candidatos, a conta ancorada dá 130 horas. É lento e errado.

O outro dialeto, o TFHE, trabalha bit a bit e compara naturalmente (1,74 s por comparação de 8 bits), mas fica milhões de vezes mais lento em conta de lote. Existe uma ponte entre os dois: 13,9 s por posição. A escolha do dialeto é a decisão mais cara do projeto.

Na prática: devolva as notas cifradas e deixe o cliente decidir. Do lado de quem tem a chave, a mesma decisão custa microssegundos e não custa privacidade nenhuma.

TEMPO A 128 BITS REAIS (ESCALA LOG)1 comparação (sinal)6 min 45 smaior entre 423 min 31 smaior entre 101 h 11 minmaior entre 10012 h 56 minmaior entre 1.000130 h 30 mincheio = medido · hachurado = ancorado na mediçãono cliente, que tem a chave: microssegundos
Escolher o maior sob cifra, com a faxina real, a 128 bits. Os casos de 10 a 1.000 candidatos são projeções ancoradas na medição do caso de 4.
T4 · T5 · T6 · T10

A faxina, a banda e o tamanho da tabela.

A faxina custa 1 min 18 s a 128 bits reais, depois de o cliente enviar 10,26 GB de chaves. Gasta 15 níveis para devolver 10. E o conjunto de parâmetros "de brinquedo", que aparece em muito material publicado, é ~40 vezes mais rápido que o de segurança real.

A banda aparece antes da CPU. Em lote cheio, o dado cifrado ocupa 12 a 36 vezes o original; para um número sozinho, 229 mil vezes. Buscar uma linha numa tabela sem revelar qual exige tocar a tabela inteira: em 1 milhão de linhas, o cliente envia 1,91 GB para receber 16 números.

Cruzar listas de três bancos em sigilo custa em função do universo de identificadores, não do tamanho das listas: no universo dos CPFs, ~9 GB por banco, por rodada. Para cruzamento puro, a ferramenta certa é outra.

Na prática: FHE recompensa lote grande e pune consulta pontual. Dimensione pela banda, não só pelo tempo.

BANDA ENVIADA PELO CLIENTE PARA BUSCAR 16 NÚMEROS512 linhas1,0 MB8.19216 MB10⁴ · CEPs do Brasil20 MB10⁵ · SKUs de e-commerce196 MB10⁶ · IDs de usuário1,91 GB10⁷ · escala Criteo19 GBcheio = medido · hachurado = projetado (2.050 bytes por linha)
Banda que o cliente envia para buscar uma linha sem revelar qual, por tamanho da tabela. Cresce em linha reta: 2.050 bytes por linha.
T13 · T14 · T15 · T16

Atacar o preço, e publicar o que cada atalho cobra.

"Funciona, mas custa" não quer dizer impossível: quer dizer caro, e preço se ataca. Os quatro testes novos atacam os quatro itens caros mudando o cálculo, o protocolo ou o que viaja pelo fio. Cada um publica o ganho e o que ele cobra, porque um atalho que mostra só o ganho é propaganda.

O resultado tem um padrão: nenhum ganho veio de fazer FHE mais rápido; vieram de fazer menos FHE. O maior deles é não fazer a faxina: devolver o pacote ao cliente, que recifra em 1,04 s sem nenhuma chave de faxina, contra 1 min 18 s e 10,26 GB.

E o custo que sobra também tem padrão: os três atalhos mais baratos falham em silêncio. Barato e silencioso é a combinação que mais custa em produção.

Antes dos ataques, uma correção nesta bancada

Confrontamos os parâmetros com o teto de segurança da própria documentação da Lattigo. Dois números antigos não eram de 128 bits: as "8 multiplicações seguidas" (T2) e os 89 ms da divisão (T3). As medições estavam certas para aqueles parâmetros, mas mais fracos que o rótulo. No teto real, logN=13 comporta 2 níveis, não 8; e a divisão com a faixa real dos dados do SUS custa 2 min 36 s. A faxina (T4) e a escolha do maior (T9) já usavam 128 bits reais e não mudam.

TesteAtalhoGanho medidoO que cobra
T13árvore em vez de fila28,4× mais fatores128× de memória
T14dividir no cliente57.690×o quociente tem de ser final
T15devolver em vez da faxina75× · −10,26 GBcliente online, e vê o meio da conta
T15faxina só quando precisa19,7×profundidade conhecida antes
T16chave viaja como semente2,0000×3,7 s de preparo
T16cortar a resposta final10×quebra acima de 2¹⁶ sem aviso
Os seis atalhos medidos, com o ganho e o preço lado a lado. Três deles são de protocolo (quem faz o quê e quem vê o quê), não de criptografia.
O que muda a partir daqui

Projete para caber, sem faxina.

Nenhuma das três fontes está errada: o HEIR é um projeto sério e o HE-LRM resolve um problema real. O que a bancada acrescenta é a escala, medida na mesma máquina, com a biblioteca que o próprio HEIR usa. A conclusão prática é chata e útil: dimensione o orçamento para caber o cálculo inteiro, empacote em lotes grandes, minimize movimentos e mande toda decisão para o cliente. Tudo que exige faxina frequente sai de "resposta de API" e entra em "tarefa em lote".

FaçaAgregar, pontuar e classificar sobre lotes grandes de dados já resumidos.
CuidadoDividir, encadear muitas multiplicações e qualquer coisa que precise de faxina.
Não façaComparar, ordenar, ramificar ou buscar por posição cifrada no servidor.

Antes de assinar um piloto de FHE

A pergunta que separa projeto viável de projeto caro é sempre a mesma: quantas multiplicações seguidas o cálculo tem, e onde acontece a decisão? Se a resposta envolve comparar no servidor, o orçamento está errado por uma ordem de grandeza. Fazemos esse laudo antes de você comprometer engenharia.

Três palavras desta página
Faxina (bootstrapping)

A operação que limpa o ruído acumulado nas contas cifradas e devolve orçamento. Possível, e cara: 1 min 18 s a 128 bits reais.

Orçamento de multiplicações

Quantas multiplicações seguidas cabem antes de o resultado virar ruído. É fixado junto com as chaves, antes de começar.

Lote

Um pacote cifrado carrega milhares de números lado a lado. Cheio, o custo se divide; com um número só, o custo inteiro cai sobre ele.

Limites

Onde isso pode estar errado.

Uma máquina, um laptop

Tudo foi medido num laptop Apple M-series. Entre sessões a mesma máquina varia até ~1,8×; dentro de uma sessão, menos de 10%. As razões entre operações viajam para outra máquina; os tempos absolutos, não.

Projeções declaradas

A escolha do maior entre 10, 100 e 1.000, a tabela de 10⁷ linhas e o universo de CPFs são projeções ancoradas numa medição real, e estão marcadas como tal. Nenhuma foi feita sem base.

Parâmetros abaixo do rótulo

Dois números antigos (T2 e a divisão do T3) usavam parâmetros mais fracos que 128 bits. Estão corrigidos acima; qualquer número de FHE publicado por terceiros merece a mesma pergunta: qual logN?

O que não medimos

Transcifragem (cifrar com AES e decifrar dentro do FHE), que mataria boa parte do problema de banda, não tem implementação na nossa biblioteca. Não medimos e não citamos número.

Ver também

← FHE: calcular sem abrir o dado · stickybit.com.br

Fontes