Stickybit.← FHEEnglishTutorial · matemática · 2026
A matemática, explicada

Somar números trancados sem abrir a caixa.

Tudo se apoia em três ideias: contas de relógio, uma grade de pontos em que é fácil esconder e difícil achar, e um pouco de ruído de propósito. O ruído protege o segredo e cresce a cada conta, até precisar de uma faxina que custa caro.

Espécime · um cadeado de brinquedo com 64 posições
número
1o que você guardou
1o que a chave lê
ruído
0 / 8

o que o servidor vê: (—, —)

Escolha um número de 0 a 3 e cifre.

Didático, não é o esquema real: um relógio de 64 posições, segredo fixo e ruído de 1 ou 2 casas. Os cadeados reais usam polinômios com 16.384 coeficientes e números de centenas de dígitos, mas o comportamento é o mesmo: somar acumula ruído devagar, multiplicar acumula depressa, e passar do limite faz a chave ler outro número.

No dia a dia

O joalheiro que trabalha de luvas.

Imagine uma caixa de vidro trancada com luvas embutidas. Você põe as joias dentro, tranca e entrega ao joalheiro. Ele consegue polir, cortar e montar pelas luvas, mas nunca segura as joias na mão, porque não tem a chave. Quando termina, devolve a caixa, e só você abre.

É isso que a criptografia homomórfica (FHE) faz com números: o servidor soma e multiplica o dado trancado e devolve o resultado trancado. Só o dono da chave lê. A matemática abaixo explica como as "luvas" funcionam e por que elas têm limite.

caixa trancada o joalheiro trabalha pelas luvas, sem ver a chave o dono tem a chave o servidornão tem
O servidor faz as contas pelas luvas. A chave nunca sai da mão do dono.
Ideia 1

Contas de relógio.

No relógio, 11 horas mais 2 horas dá 1 hora, não 13: passou do 12, recomeça. Os matemáticos chamam isso de conta "módulo 12". Toda conta do FHE é feita assim, num relógio enorme, e isso é o que deixa os números trancados sempre do mesmo tamanho, por mais contas que você faça.

Para guardar uma mensagem, o relógio é dividido em fatias, uma por valor possível. No espécime lá em cima são 64 posições e 4 fatias de 16: guardar o número 2 é apontar para o meio da terceira fatia. Ler é ver em que fatia o ponteiro caiu. Enquanto o ponteiro não sai da fatia, a leitura é exata.

121234567891011 11 + 2 = 1 no relógio, passar do 12 recomeça do zero aqui: 64 posições 4 mensagens (0, 1, 2, 3), cada uma com uma fatia de 16 casas nos cadeados reais o relógio tem números com centenas de dígitos
O relógio de 12 horas e o de 64 posições seguem a mesma regra: passou do fim, volta ao começo.
Ideia 2

Uma grade fácil de esconder, difícil de achar.

O cadeado se apoia num problema de geometria. Pense numa grade de pontos inclinada, como as estacas de um pomar plantado torto. Alguém escolhe um ponto da grade em segredo e publica um ponto um pouco deslocado dele. A pergunta: qual era o ponto da grade?

Com duas dimensões, qualquer um acha no olho. Com centenas de dimensões, ninguém conhece um jeito rápido, nem com computador quântico. O nome técnico é "reticulado" (e o problema, "aprender com erros", em inglês LWE). As novas fechaduras pós-quânticas do NIST se apoiam no mesmo tipo de problema.

b = a·s + e + Δ·m

Lida em voz alta: "o número publicado b é um número aleatório a vezes o segredo s, mais um pouco de ruído e, mais a mensagem m esticada até o meio da sua fatia (Δ)." Quem tem s subtrai a·s e sobra só a mensagem com um pouco de ruído. Quem não tem vê um número que parece sorteado.

a pista publicada o ponto escondido 2 dimensões: dá para achar no olho centenas: ninguém sabe achar rápido
A segurança não vem de esconder a regra: a regra é pública. Vem de a busca ficar impraticável quando a grade tem centenas de dimensões.
Ideia 3

O ruído protege e cresce a cada conta.

O ruído e é o que torna o cadeado seguro, mas ele não some: vai junto nas contas. Somar dois números trancados soma os ruídos, e o ponteiro anda um pouquinho para fora do centro. Multiplicar multiplica os ruídos, e o ponteiro dá um salto.

Por isso, na prática, o que limita um cálculo cifrado não é a quantidade de somas, é quantas multiplicações seguidas cabem antes de o ponteiro sair da fatia. Quando sai, a chave lê o número da fatia vizinha. Experimente no espécime: cifre 1 e multiplique por 3 duas vezes.

Na nossa bancada, com parâmetros de 128 bits de segurança, o dialeto de inteiros (BFV) acerta a 7ª multiplicação seguida e erra a 8ª sem avisar: devolve 28323 no lugar de 282. Nenhum erro, nenhuma exceção, só um número plausível e errado.

limite: acima dele a chave lê errado somando123456 multiplicando123456 operação nº · ilustrativo
Ilustrativo: somar faz o ruído subir em rampa; multiplicar faz ele dobrar. É a multiplicação que decide o orçamento.
Três dialetos

Exato, com vírgula ou bit a bit.

A mesma ideia vira três "dialetos", e cada um é bom numa coisa:

Inteiros exatos (BGV/BFV): contas com números inteiros num relógio, sem arredondar. É o que conta votos.

Números com vírgula (CKKS): aqui o ruído é tratado como os últimos dígitos de um arredondamento, como numa calculadora. Serve para médias e modelos de IA. Na bancada, perde cerca de 0,58 bit de precisão por nível de multiplicação.

Bit a bit (TFHE): tranca cada bit e monta portas lógicas (E, OU, NÃO). É o que sabe comparar e decidir. É o inverso do CKKS: compara 8 bits em ~2 s (o CKKS leva ~5 min), mas um produto interno de 2.048 números levaria ~190 h (o CKKS faz em 115 ms).

Inteiros exatosBGV / BFV 7 + 5= 12 contagem, votação,conferir igualdade Com vírgulaCKKS 3,14 × 2≈ 6,2800001 média, modelo de IA,estatística Bit a bitTFHE 1 AND 0= 0 comparar, decidir,"se… então…"
Escolher o dialeto é escolher o que fica barato: somar, calcular com vírgula ou decidir.
Muitas contas de uma vez

Uma caixa, 16.384 casas.

Um único cadeado guarda não um número, mas uma fileira inteira: na nossa votação, 16.384 casas na mesma caixa. Uma soma de caixas soma todas as casas de uma vez, como uma planilha em que uma fórmula vale para a coluna inteira.

Um voto vira uma fileira com 1 na casa do candidato escolhido e 0 no resto. Somar mil fileiras trancadas dá, em cada casa, o total de cada candidato, sem abrir nenhum voto.

O caro não é somar nem multiplicar: é mover dado entre casas, por exemplo para somar a fileira inteira num número só. Na bancada, uma multiplicação levou 2,7 ms e juntar a fileira (12 rotações) levou 112,8 ms, cerca de 40 vezes mais.

um voto (candidato 3), trancado as primeiras 16 das 16.384 casas da mesma caixa 0010000000000000 + outros 999 votos, somados sem abrir a soma, ainda trancada 374247218161 só quem tem a chave lê o total; exemplo do tutorial
Totais do exemplo do tutorial (1.000 votos). O número de casas é o que o nosso servidor de votação informa.
A faxina

Limpar o ruído custa caro.

Quando o ruído chega perto do limite, dá para fazer uma "faxina" (bootstrap): o servidor roda, ainda trancado, o próprio procedimento de abrir o cadeado, usando uma versão trancada da chave. Sai o mesmo número com ruído pequeno de novo. Em princípio, isso permite contas de qualquer tamanho.

O preço, medido na nossa bancada a 128 bits reais: 1 min 18 s ± 8 s por faxina e 10,26 GB de chaves guardadas no servidor. Com parâmetros de brinquedo são 1,92 s e 840 MB, cerca de 40 vezes menos. Muita comparação publicada não diz qual dos dois está medindo.

Um atalho que medimos: em vez da faxina, o servidor devolve o número cansado ao dono, que abre, tranca de novo e manda de volta. Leva 1,04 s a 100 Mbps, sem chave de faxina nenhuma (75 vezes mais barato), mas exige o dono online.

E um aviso: com os parâmetros honestos de 128 bits no tamanho menor (logN=13), cabem 2 multiplicações seguidas, não 8, como sugeriam configurações mais fracas.

tempo para limpar o ruído (128 bits reais) faxina no servidor · 1 min 18 s ± 8 s devolver ao dono · 1,04 s a 100 Mbps chaves que o servidor precisa guardar 10,26 GB 0 B bancada própria, Lattigo v6, logN=16 · o atalho exige o dono online
A faxina deixa a conta ilimitada em princípio e cara na prática. Ver os dezesseis testes na fronteira do FHE.
As outras peças da votação

Trancar não basta: é preciso provar.

Uma eleição cifrada precisa de mais quatro ideias, todas com a mesma cara de "provar sem mostrar":

Prova de conhecimento zero. O eleitor prova que a fileira dele tem exatamente um 1 e o resto 0, sem mostrar onde está o 1. É como provar que você sabe a senha do cofre abrindo e fechando o cofre atrás de uma cortina.

Assinatura cega. O cartório carimba o direito de votar dentro de um envelope com papel carbono: o carimbo passa para o papel, mas o cartório não vê o que carimbou. Depois não consegue ligar o carimbo ao eleitor.

Chave dividida, 3 de 5. A chave que abre o resultado é partida entre cinco pessoas; quaisquer três juntas abrem, duas não aprendem nada. É a curva ao lado: três pontos refazem a curva e revelam o segredo no zero.

A urna que embaralha e a corrente de impressões digitais. Três etapas embaralham e re-trancam os votos, para ninguém ligar voto a ordem de chegada (basta uma etapa honesta). E cada voto entra numa corrente em que cada elo leva a impressão digital do anterior: mudar um voto antigo quebra todos os elos seguintes.

o segredo pessoa 1pessoa 2pessoa 3pessoa 4pessoa 5 três pontos (cheios) bastam para refazer a curva e achar o segredo
Divisão de segredo de Shamir (1979), usada para repartir a chave entre cinco autoridades.
O que medimos

Os números por trás das analogias.

1 min 18 suma faxina a 128 bits reais
10,26 GBchaves de faxina no servidor
~40×mover entre casas × multiplicar
7 → 8multiplicações: a 8ª erra em silêncio (BFV)
MedidaValorNa prática
Multiplicar (número trancado × aberto, com reescala)2,7 ms ± 0,2multiplicar é barato
Juntar a fileira (12 rotações)112,8 ms ± 0,8mover dado custa ~40× multiplicar
Inteiros (BFV): multiplicações seguidas7 certas; a 8ª erraerra sem avisar: 28323 no lugar de 282
Inteiros (BGV), mesmo orçamentomorre na 5ªerra avisando: sem nível para continuar
Com vírgula (CKKS)0,58 ± 0,07 bit por nívelperde precisão aos poucos
Orçamento honesto a 128 bits (logN=13)2 níveisnão 8, como em configurações mais fracas
Faxina (bootstrap), 128 bits (logN=16)1 min 18 s ± 8 s · 10,26 GB~40× o conjunto de brinquedo (1,92 s · 840 MB)
Devolver ao dono (100 Mbps)1,04 s · 0 B de chave75× mais barato, exige o dono online
Bit a bit (TFHE) × com vírgula (CKKS)comparar 8 bits: ~2 s × ~5 minproduto de 2.048: ~190 h × 115 ms

Bancada própria (Lattigo v6), mesma máquina, várias repetições; os números com ± têm o desvio medido. Detalhes e os dezesseis testes na fronteira do FHE; o que isso significa para o seu caso, na maturidade.

Três palavras desta página
Ruído

A "sujeira" de propósito que protege o segredo. Cada conta aumenta; passou do limite, a chave lê errado.

Faxina (bootstrap)

Limpar o ruído sem abrir o cadeado. Permite contas longas, ao custo de 1 min 18 s e 10,26 GB a 128 bits.

Reticulado

A grade de pontos em centenas de dimensões. Achar o ponto escondido é o problema difícil que segura o cadeado.

Todas as palavras da seção estão no glossário.

Limites

Onde esta explicação simplifica.

O brinquedo não é seguro

O espécime usa um relógio de 64 posições e uma dimensão só. Qualquer um abre. Serve para ver o ruído, não para guardar nada.

Multiplicar dois trancados é mais sutil

No brinquedo multiplicamos por um número aberto. Multiplicar dois números trancados exige um passo extra (a "relinearização") e faz o ruído crescer ainda mais.

"Seguro contra quântico" é uma aposta bem fundada

Não se conhece ataque rápido ao problema da grade, nem quântico. É o que sustenta os padrões do NIST, mas é conhecimento atual, não prova matemática.

Números de uma máquina

Os tempos são da nossa bancada. Outra máquina ou outra biblioteca muda os valores; as proporções (40×, 75×) tendem a se manter.

Ver também

← FHE · stickybit.com.br

Fontes