<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Security on kenji.blog</title><link>http://kenji.blog/pt/categories/security/</link><description>Recent content in Security on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>pt</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 21:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/pt/categories/security/index.xml" rel="self" type="application/rss+xml"/><item><title>A intuição matemática da criptografia baseada em reticulados (Lattice-based cryptography)</title><link>http://kenji.blog/pt/p/lattice-based-cryptography-math-intuition/</link><pubDate>Fri, 11 Sep 2026 21:00:00 +0900</pubDate><guid>http://kenji.blog/pt/p/lattice-based-cryptography-math-intuition/</guid><description>&lt;img src="http://kenji.blog/p/lattice-based-cryptography-math-intuition/img/eyecatch.jpg" alt="Featured image of post A intuição matemática da criptografia baseada em reticulados (Lattice-based cryptography)" />&lt;h1 id="1-introdução-o-alvorecer-da-criptografia-pós-quântica-pqc-e-a-ascensão-da-criptografia-baseada-em-reticulados">1. Introdução: O alvorecer da Criptografia Pós-Quântica (PQC) e a ascensão da criptografia baseada em reticulados
&lt;/h1>&lt;p>A infraestrutura digital da sociedade moderna é sustentada por tecnologias de criptografia de chave pública, como a criptografia RSA e a Criptografia de Curva Elíptica (ECC). Esses métodos criptográficos baseiam sua segurança na dificuldade matemática de problemas como o &amp;ldquo;Problema de Fatoração de Inteiros&amp;rdquo; e o &amp;ldquo;Problema do Logaritmo Discreto&amp;rdquo;, que se acredita não poderem ser resolvidos eficientemente (exigindo tempo exponencial) pelos computadores clássicos convencionais.&lt;/p>
&lt;p>No entanto, o &amp;ldquo;Algoritmo de Shor&amp;rdquo;, publicado por Peter Shor em 1994, enviou ondas de choque através do mundo da criptografia. Este algoritmo provou matematicamente que, uma vez realizados computadores quânticos de grande escala, problemas de fatoração de inteiros e logaritmos discretos serão resolvidos em tempo polinomial. Isso significa que a criptografia de chave pública amplamente utilizada hoje se tornará completamente decifrável no futuro.&lt;/p>
&lt;p>Para combater essa &amp;ldquo;Ameaça Quântica (Quantum Threat)&amp;rdquo;, a pesquisa em novos métodos criptográficos que sejam difíceis de quebrar, mesmo usando computadores quânticos, tornou-se uma questão urgente. Este é o campo conhecido como &amp;ldquo;Criptografia Pós-Quântica (Post-Quantum Cryptography: PQC)&amp;rdquo; ou &amp;ldquo;Criptografia resistente a quantum&amp;rdquo;.&lt;/p>
&lt;p>Existem vários candidatos fortes para PQC. Estes incluem criptografia baseada em hash, criptografia baseada em código, criptografia polinomial multivariada e criptografia baseada em isogenia. Entre eles, o que atualmente atrai mais atenção e é fundamental para o processo de padronização PQC do NIST (Instituto Nacional de Padrões e Tecnologia dos EUA) é a &amp;ldquo;Criptografia baseada em reticulados (Lattice-based cryptography)&amp;rdquo;. Em comparação com outros métodos, a criptografia baseada em reticulados possui velocidades de criptografia e descriptografia extremamente rápidas e exibe uma característica notável em sua prova de segurança: uma redução da &amp;ldquo;complexidade do pior caso (Worst-case complexity)&amp;rdquo; para a &amp;ldquo;complexidade do caso médio (Average-case complexity)&amp;rdquo;, que é extremamente poderosa na teoria criptográfica.&lt;/p>
&lt;p>Neste artigo, começaremos pela definição matemática fundamental de um &amp;ldquo;Reticulado (Lattice)&amp;rdquo;, que é a base da criptografia baseada em reticulados, e explicaremos profundamente problemas difíceis em reticulados como SVP (Problema do Vetor Mais Curto) e CVP (Problema do Vetor Mais Próximo), e o núcleo da criptografia de reticulados moderna, o &amp;ldquo;Problema LWE (Learning With Errors)&amp;rdquo;, usando fórmulas, intuição geométrica e exemplos numéricos concretos.&lt;/p>
&lt;h1 id="2-definição-matemática-e-intuição-geométrica-do-reticulado-lattice">2. Definição Matemática e Intuição Geométrica do Reticulado (Lattice)
&lt;/h1>&lt;h2 id="21-espaço-vetorial-e-reticulados">2.1 Espaço Vetorial e Reticulados
&lt;/h2>&lt;p>Em matemática, um &amp;ldquo;Reticulado (Lattice)&amp;rdquo; é um conjunto de pontos discretos dispostos regularmente em um espaço vetorial real de dimensão $n$, $\mathbb{R}^n$. É semelhante a um espaço vetorial (Vector Space) aprendido em álgebra linear, mas há uma diferença crucial. Enquanto um espaço vetorial é um espaço contínuo representado por combinações lineares com &amp;ldquo;coeficientes reais&amp;rdquo; dos vetores de base, um reticulado é um espaço discreto representado por combinações lineares com &amp;ldquo;coeficientes inteiros&amp;rdquo; dos vetores de base.&lt;/p>
&lt;p>Vamos dar uma definição matemática rigorosa. Considere $n$ vetores linearmente independentes ($n \le m$) $\mathbf{b}_1, \mathbf{b}_2, \dots, \mathbf{b}_n$ em um espaço vetorial real de dimensão $m$, $\mathbb{R}^m$. Considere uma matriz cujos vetores coluna são esses vetores: $B = [\mathbf{b}_1, \mathbf{b}_2, \dots, \mathbf{b}_n] \in \mathbb{R}^{m \times n}$. Esta $B$ é chamada de &amp;ldquo;Base (Basis)&amp;rdquo; do reticulado.&lt;/p>
&lt;p>O reticulado $\mathcal{L}(B)$ gerado por esta base $B$ é definido da seguinte forma:&lt;/p>
$$
\mathcal{L}(B) = \left\{ \sum_{i=1}^{n} x_i \mathbf{b}_i \mathrel{\bigg|} x_i \in \mathbb{Z} \right\} = \{ B \mathbf{x} \mid \mathbf{x} \in \mathbb{Z}^n \}
$$
&lt;p>O ponto importante aqui é que os coeficientes $x_i$ são restritos a inteiros $\mathbb{Z}$, e não a números reais $\mathbb{R}$. Isso forma um &amp;ldquo;conjunto de pontos discretos&amp;rdquo; semelhante a cruzamentos espaçados uniformemente, em vez dos infinitos pontos contínuos no espaço.&lt;/p>
&lt;h2 id="22-imagem-geométrica">2.2 Imagem Geométrica
&lt;/h2>&lt;p>Vamos considerar um exemplo em um plano bidimensional $\mathbb{R}^2$. Se escolhermos $\mathbf{b}_1 = \begin{pmatrix} 1 \\ 0 \end{pmatrix}$ e $\mathbf{b}_2 = \begin{pmatrix} 0 \\ 1 \end{pmatrix}$ como vetores de base, o reticulado gerado por eles será o conjunto de todas as coordenadas inteiras $(x, y) \in \mathbb{Z}^2$ no plano cartesiano. Este é o &amp;ldquo;reticulado quadrado&amp;rdquo; mais simples.&lt;/p>
&lt;p>No entanto, reticulados nem sempre são ortogonais. Por exemplo, considerando a base $\mathbf{b}_1 = \begin{pmatrix} 2 \\ 1 \end{pmatrix}$ e $\mathbf{b}_2 = \begin{pmatrix} 1 \\ 3 \end{pmatrix}$, os pontos gerados serão como as interseções de uma malha distorcida diagonalmente.&lt;/p>
&lt;h2 id="23-não-unicidade-da-base-e-transformação-unimodular">2.3 Não Unicidade da Base e Transformação Unimodular
&lt;/h2>&lt;p>Há uma propriedade importante relacionada ao núcleo da segurança da criptografia baseada em reticulados. É que &amp;ldquo;existem infinitas bases que geram o mesmo reticulado&amp;rdquo;.&lt;/p>
&lt;p>Por exemplo, a base anterior $\mathbf{b}_1 = (1, 0)^T, \mathbf{b}_2 = (0, 1)^T$ que gera o reticulado $\mathbb{Z}^2$ também gerará exatamente o mesmo reticulado $\mathbb{Z}^2$ se usarmos a base $\mathbf{b}'_1 = (1, 1)^T, \mathbf{b}'_2 = (2, 3)^T$.&lt;/p>
&lt;p>A condição necessária e suficiente para uma certa base $B$ e outra base $B'$ gerarem o mesmo reticulado é que exista uma matriz com componentes inteiros $U \in \mathbb{Z}^{n \times n}$ tal que seu determinante seja $\det(U) = \pm 1$, e possa ser expressa como:
&lt;/p>
$$ B' = B U $$
&lt;p>
Tal matriz $U$ é chamada de &amp;ldquo;matriz unimodular (Unimodular matrix)&amp;rdquo;.&lt;/p>
&lt;p>A ideia básica em aplicações criptográficas é usar uma &amp;ldquo;boa base (uma base próxima de ser ortogonal, consistindo de vetores curtos)&amp;rdquo; como chave privada, e uma &amp;ldquo;base ruim (uma base consistindo de vetores extremamente oblíquos entre si e muito longos)&amp;rdquo; como chave pública. Calcular uma boa base a partir de uma base ruim torna-se extremamente difícil à medida que a dimensão aumenta. Esta é a intuição básica da criptografia baseada em reticulados.&lt;/p>
&lt;h1 id="3-problemas-computacionalmente-difíceis-em-reticulados">3. Problemas Computacionalmente Difíceis em Reticulados
&lt;/h1>&lt;p>A segurança da criptografia baseada em reticulados depende da dificuldade de resolver certos problemas matemáticos sobre reticulados. Aqui, introduziremos os dois problemas mais fundamentais e famosos.&lt;/p>
&lt;h2 id="31-problema-do-vetor-mais-curto-shortest-vector-problem-svp">3.1 Problema do Vetor Mais Curto (Shortest Vector Problem: SVP)
&lt;/h2>&lt;p>SVP é o problema mais clássico e famoso na teoria dos reticulados.&lt;/p>
&lt;p>&lt;strong>Definição (SVP):&lt;/strong>
Dada qualquer base de reticulado $B$, encontre o vetor não nulo $\mathbf{v}$ pertencente ao reticulado $\mathcal{L}(B)$ cuja norma euclidiana (comprimento) seja mínima.&lt;/p>
&lt;p>Expressando em fórmula, é o problema de encontrar $\mathbf{v}$ tal que $\min_{\mathbf{v} \in \mathcal{L}(B) \setminus \{\mathbf{0}\}} \| \mathbf{v} \|$. Este comprimento mínimo é denotado como $\lambda_1(\mathcal{L})$ e é chamado de &amp;ldquo;Primeiro mínimo sucessivo (First successive minimum)&amp;rdquo; do reticulado.&lt;/p>
&lt;p>Em dimensões baixas, como 2D ou 3D, você pode desenhar uma figura e encontrar visualmente o vetor mais curto. Alternativamente, algoritmos de redução de base de Gauss podem resolvê-lo eficientemente. No entanto, sabe-se que em altas dimensões (por exemplo, dimensão $n$ na casa das centenas a milhares), resolver o SVP de forma exata é NP-difícil.&lt;/p>
&lt;p>Em criptografia do mundo real, em vez do vetor mais curto exato, é usado o SVP aproximado ($\gamma$-SVP) para encontrar um &amp;ldquo;vetor aproximadamente curto&amp;rdquo;. Se o fator de aproximação $\gamma$ for de tamanho polinomial, este problema ainda é considerado extremamente difícil.&lt;/p>
&lt;h2 id="32-problema-do-vetor-mais-próximo-closest-vector-problem-cvp">3.2 Problema do Vetor Mais Próximo (Closest Vector Problem: CVP)
&lt;/h2>&lt;p>CVP também é um problema extremamente importante na criptografia baseada em reticulados.&lt;/p>
&lt;p>&lt;strong>Definição (CVP):&lt;/strong>
Dada qualquer base de reticulado $B$ e qualquer vetor alvo no espaço $\mathbf{t} \in \mathbb{R}^m$ (não necessariamente um ponto do reticulado), encontre o ponto do reticulado $\mathbf{v} \in \mathcal{L}(B)$ que seja o mais próximo de $\mathbf{t}$.&lt;/p>
&lt;p>Expressando em fórmula, é o problema de procurar o ponto do reticulado $\mathbf{v}$ que resulta em $\min_{\mathbf{v} \in \mathcal{L}(B)} \| \mathbf{v} - \mathbf{t} \|$.&lt;/p>
&lt;p>O CVP também é NP-difícil em altas dimensões, semelhante ao SVP. Do ponto de vista das aplicações criptográficas, o problema LWE, descrito posteriormente, está intimamente relacionado a uma variante especial do CVP (Bounded Distance Decoding: BDD).&lt;/p>
&lt;h2 id="33-por-que-não-pode-ser-resolvido-em-altas-dimensões-os-limites-do-lll-e-bkz">3.3 Por que não pode ser resolvido em altas dimensões? (Os Limites do LLL e BKZ)
&lt;/h2>&lt;p>Um algoritmo famoso para resolver problemas de reticulados em altas dimensões é o algoritmo LLL (algoritmo de Lenstra-Lenstra-Lovász). O algoritmo LLL opera em tempo polinomial e pode reduzir a base do reticulado a uma &amp;ldquo;boa base&amp;rdquo; em certa medida. No entanto, o vetor mais curto encontrado pelo algoritmo LLL tem um fator de aproximação exponencial ($2^{\mathcal{O}(n)}$) em relação ao comprimento do vetor mais curto verdadeiro, portanto, não chega ao ponto de quebrar a segurança criptográfica.&lt;/p>
&lt;p>Usar algoritmos de redução de base mais poderosos como o algoritmo BKZ (Block Korkine-Zolotarev), que é uma melhoria do LLL, permite encontrar vetores mais curtos, mas seu tempo de computação aumenta exponencialmente em relação ao tamanho do bloco. Na criptografia baseada em reticulados, parâmetros seguros (como o tamanho da dimensão $n$) são determinados estimando o tempo de execução deste algoritmo BKZ. Nos parâmetros padrão atuais da PQC, são escolhidos valores entre 500 e 1000 ou mais para a dimensão $n$, e estima-se que levaria mais tempo do que a idade do universo para decifrá-los, mesmo com supercomputadores ou computadores quânticos futuros.&lt;/p>
&lt;h1 id="4-formulação-matemática-do-problema-lwe-learning-with-errors">4. Formulação Matemática do Problema LWE (Learning With Errors)
&lt;/h1>&lt;p>A maior parte da criptografia moderna baseada em reticulados é baseada no &amp;ldquo;Problema LWE (Learning With Errors)&amp;rdquo;, proposto por Oded Regev em 2005. A beleza do problema LWE reside na simplicidade de sua formulação e em ter uma prova matemática poderosa: a &amp;ldquo;redução da complexidade do pior caso para a complexidade do caso médio&amp;rdquo;.&lt;/p>
&lt;h2 id="41-equações-lineares-simultâneas-sem-ruído">4.1 Equações lineares simultâneas sem ruído
&lt;/h2>&lt;p>Para entender o problema LWE, vamos primeiro considerar equações lineares simultâneas simples sem ruído.
Suponha que haja um vetor secreto desconhecido $\mathbf{s} \in \mathbb{Z}_q^n$ (cada componente é um número inteiro de $0$ a $q-1$). Aqui, $q$ é considerado um número primo.&lt;/p>
&lt;p>Escolhemos vetores de coeficientes aleatórios $\mathbf{a}_1, \mathbf{a}_2, \dots \in \mathbb{Z}_q^n$, e calculamos seu produto escalar com o vetor secreto $\mathbf{s}$ módulo $q$.
$b_1 = \langle \mathbf{a}_1, \mathbf{s} \rangle \pmod q$
$b_2 = \langle \mathbf{a}_2, \mathbf{s} \rangle \pmod q$
$\vdots$&lt;/p>
&lt;p>Se nos derem um número suficiente (pelo menos $n$) de pares $(\mathbf{a}_i, b_i)$, podemos restaurar facilmente o vetor secreto $\mathbf{s}$ usando a &amp;ldquo;Eliminação Gaussiana (Gaussian elimination)&amp;rdquo; em álgebra linear. Este é um problema que pode ser resolvido facilmente em tempo polinomial.&lt;/p>
&lt;h2 id="42-definição-do-problema-lwe-adicionando-ruído">4.2 Definição do problema LWE: Adicionando Ruído
&lt;/h2>&lt;p>Então, o que acontece se adicionarmos um pouco de &amp;ldquo;ruído (erro)&amp;rdquo; a este problema?
Esta é a essência do problema LWE.&lt;/p>
&lt;p>Para o vetor secreto desconhecido $\mathbf{s} \in \mathbb{Z}_q^n$, adicionamos um pequeno erro $e_i \in \mathbb{Z}_q$ ao resultado de cada equação.
$b_i = \langle \mathbf{a}_i, \mathbf{s} \rangle + e_i \pmod q$&lt;/p>
&lt;p>Aqui, $e_i$ é um número inteiro pequeno com média 0 e desvio padrão relativamente pequeno (por exemplo, retirado de uma distribuição Gaussiana discreta, como uma distribuição normal).
A informação fornecida é uma lista de pares do vetor aleatório $\mathbf{a}_i$ e $b_i$ calculado adicionando o erro.
$( \mathbf{a}_1, b_1 ), ( \mathbf{a}_2, b_2 ), \dots, ( \mathbf{a}_m, b_m )$&lt;/p>
&lt;p>Expressar isso em forma de matriz o torna muito claro.
Usando uma matriz aleatória $A \in \mathbb{Z}_q^{m \times n}$, um vetor secreto $\mathbf{s} \in \mathbb{Z}_q^n$, e um vetor de erro $\mathbf{e} \in \mathbb{Z}_q^m$,
&lt;/p>
$$ \mathbf{b} = A \mathbf{s} + \mathbf{e} \pmod q $$
&lt;p>
pode ser escrito. Apenas $A$ e $\mathbf{b}$ são fornecidos. Encontrar $\mathbf{s}$ a partir disso é o &amp;ldquo;Problema de busca LWE (Search LWE problem)&amp;rdquo;.&lt;/p>
&lt;p>Como o erro $e_i$ está incluído, ao tentar usar a eliminação gaussiana, o erro será amplificado exponencialmente durante o processo de adição e subtração de equações, tornando impossível chegar à resposta correta. À primeira vista, parecem equações lineares simultâneas simples, mas apenas adicionando esse pequeno ruído, o nível de dificuldade do problema salta para um nível NP-difícil.&lt;/p>
&lt;h2 id="43-problema-lwe-de-decisão-decision-lwe">4.3 Problema LWE de decisão (Decision LWE)
&lt;/h2>&lt;p>O que é frequentemente usado em provas na teoria criptográfica é uma variação do problema de busca LWE chamado de &amp;ldquo;Problema LWE de decisão (Decision LWE problem)&amp;rdquo;.&lt;/p>
&lt;p>O problema de decisão LWE é o problema de determinar de qual de duas distribuições uma lista de amostras fornecida se origina.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Distribuição LWE&lt;/strong>: Intencionalmente calculada $(A, \mathbf{b} = A\mathbf{s} + \mathbf{e} \pmod q)$&lt;/li>
&lt;li>&lt;strong>Distribuição aleatória uniforme&lt;/strong>: $(A, \mathbf{u})$ que consiste em uma matriz completamente escolhida aleatoriamente $A$ e vetor $\mathbf{u}$&lt;/li>
&lt;/ol>
&lt;p>Surpreendentemente, se os parâmetros do problema LWE forem escolhidos de forma apropriada, pares de dados da distribuição LWE tornam-se &amp;ldquo;computacionalmente indistinguíveis (Computationally Indistinguishable)&amp;rdquo; de pares de dados completamente aleatórios. Esta propriedade é a base pela qual os cifradores baseados em LWE podem gerar &amp;ldquo;textos cifrados indistinguíveis de números aleatórios&amp;rdquo;.&lt;/p>
&lt;h2 id="44-redução-da-complexidade-do-pior-caso-para-a-complexidade-do-caso-médio-teorema-de-regev">4.4 Redução da complexidade do pior caso para a complexidade do caso médio (Teorema de Regev)
&lt;/h2>&lt;p>A maior conquista de Oded Regev foi ter vinculado matematicamente a dificuldade deste problema LWE à dificuldade dos problemas de reticulados (SVP e CVP) mencionados acima.&lt;/p>
&lt;p>Ele usou a redução quântica (Quantum reduction) para provar que &amp;ldquo;Se existe um algoritmo de tempo polinomial que pode resolver o problema LWE na média (para $A$ e $\mathbf{e}$ escolhidos aleatoriamente), então existe um algoritmo quântico de tempo polinomial que pode resolver o Gap-SVP no pior caso (o caso mais difícil) para qualquer reticulado&amp;rdquo;. (Mais tarde, Peikert e outros também mostraram a redução clássica).&lt;/p>
&lt;p>Esta é uma propriedade dos sonhos na teoria criptográfica. Porque dissipa a preocupação de que &amp;ldquo;a criptografia possa ser quebrada porque por acaso escolhemos uma chave fraca (uma parte do caso médio)&amp;rdquo; e nos dá a poderosa garantia de que &amp;ldquo;Se o LWE médio puder ser resolvido, todos os problemas difíceis do reticulado poderão ser resolvidos (portanto, o LWE é absolutamente difícil)&amp;rdquo;.&lt;/p>
&lt;div class="mermaid">graph TD
A["Problemas de Reticulado de Pior Caso (Gap-SVP, SIVP)"] -->|Redução Quântica/Clássica| B["Problema LWE de Caso Médio"]
B -->|Construção Criptográfica| C["Sistemas Criptográficos baseados em LWE (PKE, KEM, FHE)"]
style A fill:#ffcccc,stroke:#ff0000,stroke-width:2px,color:#000
style B fill:#ccffcc,stroke:#00aa00,stroke-width:2px,color:#000
style C fill:#ccccff,stroke:#0000ff,stroke-width:2px,color:#000&lt;/div>
&lt;h1 id="5-construção-do-cifrador-de-chave-pública-usando-lwe-cifrador-regev">5. Construção do Cifrador de Chave Pública usando LWE (Cifrador Regev)
&lt;/h1>&lt;p>Agora que entendemos a dificuldade do problema LWE, vamos ver a criptografia de chave pública básica proposta por Oded Regev para ver como ela é usada para criptografia e descriptografia. Aqui, explicaremos o mecanismo mais básico para criptografar uma mensagem de 1 bit $M \in \{0, 1\}$.&lt;/p>
&lt;h2 id="51-geração-de-chaves-key-generation">5.1 Geração de chaves (Key Generation)
&lt;/h2>&lt;ol>
&lt;li>Determine o módulo primo $q$, a dimensão $n$, e o número de equações $m$ ($m > n \log q$) como parâmetros do sistema.&lt;/li>
&lt;li>Como uma chave privada, escolha um vetor $\mathbf{s} \in \mathbb{Z}_q^n$ aleatoriamente.&lt;/li>
&lt;li>Gere uma matriz aleatória $A \in \mathbb{Z}_q^{m \times n}$.&lt;/li>
&lt;li>Escolha um vetor de erro pequeno $\mathbf{e} \in \mathbb{Z}_q^m$ a partir de uma distribuição de erro como a distribuição gaussiana discreta.&lt;/li>
&lt;li>Calcule o vetor $\mathbf{b} = A \mathbf{s} + \mathbf{e} \pmod q$.&lt;/li>
&lt;li>A chave pública (Public Key) será $(A, \mathbf{b})$.&lt;/li>
&lt;li>A chave privada (Secret Key) será $\mathbf{s}$.&lt;/li>
&lt;/ol>
&lt;p>A chave pública é exatamente a &amp;ldquo;instância do problema LWE&amp;rdquo; em si. Uma vez que encontrar a chave privada $\mathbf{s}$ a partir da chave pública $(A, \mathbf{b})$ é equivalente a resolver o problema de busca LWE, a segurança é garantida.&lt;/p>
&lt;h2 id="52-criptografia-encryption">5.2 Criptografia (Encryption)
&lt;/h2>&lt;p>Alice usa a chave pública de Bob $(A, \mathbf{b})$ para criptografar a mensagem de 1 bit $M \in \{0, 1\}$.&lt;/p>
&lt;ol>
&lt;li>Escolha um vetor binário aleatório (composto de zeros ou uns) $\mathbf{r} \in \{0, 1\}^m$.&lt;/li>
&lt;li>Como a primeira metade do texto cifrado, calcule o vetor $\mathbf{u} = A^T \mathbf{r} \pmod q$. ($A^T$ é a matriz transposta de $A$. Em outras palavras, está somando as linhas de $A$ onde os componentes de $\mathbf{r}$ são 1).&lt;/li>
&lt;li>Como a segunda metade do texto cifrado, calcule o escalar $v = \mathbf{b}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor \pmod q$.
(Se a mensagem $M$ for 0, nada é adicionado; se for $1$, é adicionado o valor exatamente da metade de $q$, $\lfloor \frac{q}{2} \rfloor$).&lt;/li>
&lt;li>O texto cifrado (Ciphertext) será $(\mathbf{u}, v)$.&lt;/li>
&lt;/ol>
&lt;p>O significado intuitivo da criptografia é pegar a &amp;ldquo;soma de um subconjunto aleatório&amp;rdquo; para a matriz de chave pública $A$ e o vetor $\mathbf{b}$. Devido à dificuldade do problema LWE de decisão, esse texto cifrado $(\mathbf{u}, v)$ parece indistinguível de um vetor completamente aleatório e um número aleatório uniforme (Segurança semântica: Semantic Security).&lt;/p>
&lt;div class="mermaid">flowchart LR
M["Mensagem M em {0,1}"] --> Enc
PK["Chave Pública (A, b)"] --> Enc
r["Vetor binário aleatório r"] --> Enc
subgraph Enc ["Processo de Criptografia"]
direction TB
u_calc["u = A^T * r mod q"]
v_calc["v = b^T * r + M * floor(q/2) mod q"]
end
Enc --> CT["Texto Cifrado (u, v)"]&lt;/div>
&lt;h2 id="53-descriptografia-decryption">5.3 Descriptografia (Decryption)
&lt;/h2>&lt;p>Bob descriptografa o texto cifrado $(\mathbf{u}, v)$ usando a chave secreta $\mathbf{s}$.&lt;/p>
&lt;ol>
&lt;li>Calcule o seguinte valor: $D = v - \mathbf{s}^T \mathbf{u} \pmod q$&lt;/li>
&lt;li>Se o resultado calculado estiver mais próximo de $0$, a saída é $M=0$; se estiver mais próximo de $\lfloor \frac{q}{2} \rfloor$, a saída é $M=1$.&lt;/li>
&lt;/ol>
&lt;p>Vamos expandir matematicamente para ver por que isso permite a descriptografia.
Lembre-se de que $\mathbf{b} = A \mathbf{s} + \mathbf{e}$.&lt;/p>
$$
\begin{aligned}
v - \mathbf{s}^T \mathbf{u} &amp;= (\mathbf{b}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor) - \mathbf{s}^T (A^T \mathbf{r}) \\
&amp;= ((A \mathbf{s} + \mathbf{e})^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor) - \mathbf{s}^T A^T \mathbf{r} \\
&amp;= (\mathbf{s}^T A^T \mathbf{r} + \mathbf{e}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor) - \mathbf{s}^T A^T \mathbf{r} \\
&amp;= \mathbf{e}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor \pmod q
\end{aligned}
$$
&lt;p>Aqui, $\mathbf{s}^T A^T \mathbf{r}$ foi perfeitamente cancelado e desapareceu da fórmula!
O que restou foi $\mathbf{e}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor$.&lt;/p>
&lt;p>$\mathbf{e}$ é um vetor de ruído cujos componentes são extremamente pequenos, e $\mathbf{r}$ é um vetor binário cujos componentes são 0 ou 1. Portanto, o produto escalar deles, $\mathbf{e}^T \mathbf{r}$, também permanece em um valor relativamente pequeno (se os parâmetros forem escolhidos apropriadamente).&lt;/p>
&lt;ul>
&lt;li>Se $M=0$, o resultado é $\mathbf{e}^T \mathbf{r}$, o que será um valor pequeno próximo de $0$.&lt;/li>
&lt;li>Se $M=1$, o resultado é $\mathbf{e}^T \mathbf{r} + \lfloor \frac{q}{2} \rfloor$, o qual ficará próximo da metade do valor de $q$, $\lfloor \frac{q}{2} \rfloor$.&lt;/li>
&lt;/ul>
&lt;p>Se os parâmetros forem desenhados para que o valor absoluto do erro $\mathbf{e}^T \mathbf{r}$ fique abaixo de $\frac{q}{4}$, Bob pode determinar (descriptografar) com precisão a mensagem $M$ apenas olhando se o resultado do cálculo está mais próximo de $0$ ou $\lfloor \frac{q}{2} \rfloor$. Este é o belo mecanismo pelo qual os cifradores baseados em LWE funcionam.&lt;/p>
&lt;div class="mermaid">flowchart LR
CT["Texto Cifrado (u, v)"] --> Dec
SK["Chave Secreta s"] --> Dec
subgraph Dec ["Processo de Descriptografia"]
direction TB
calc["Calcular D = v - s^T * u mod q"]
check["Verificar se D está mais próximo de 0 ou q/2"]
end
calc --> check
Dec --> M_out["Mensagem Recuperada M"]&lt;/div>
&lt;h1 id="6-exemplo-prático-toy-example-de-criptografia-lwe-com-valores-numéricos-específicos">6. Exemplo Prático (Toy Example) de Criptografia LWE com Valores Numéricos Específicos
&lt;/h1>&lt;p>Pode ser difícil ter uma noção apenas listando equações, então vamos tentar definir parâmetros numéricos muito pequenos e seguir o cálculo desde a criptografia até a descriptografia.
(*Em sistemas criptográficos do mundo real, são utilizados valores para $n$ superiores a 500 e $q$ superiores a milhares para garantir a segurança.)&lt;/p>
&lt;p>&lt;strong>[Configuração de Parâmetros]&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Módulo $q = 17$ (Número primo. Assim, os valores variam de $0$ a $16$)&lt;/li>
&lt;li>Dimensão $n = 2$&lt;/li>
&lt;li>Número de equações $m = 4$&lt;/li>
&lt;li>Suponha que vamos criptografar a mensagem $M = 1$.&lt;/li>
&lt;li>Quantidade de deslocamento da mensagem: $\lfloor \frac{q}{2} \rfloor = \lfloor \frac{17}{2} \rfloor = 8$&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>[1. Fase de Geração de Chaves]&lt;/strong>
Bob seleciona a chave privada $\mathbf{s}$, a matriz $A$ e o vetor de erro $\mathbf{e}$ aleatoriamente.
&lt;/p>
$$ \mathbf{s} = \begin{pmatrix} 3 \\ 4 \end{pmatrix} \in \mathbb{Z}_{17}^2 $$
$$ A = \begin{pmatrix} 2 &amp; 15 \\ 1 &amp; 8 \\ 14 &amp; 5 \\ 9 &amp; 10 \end{pmatrix} \in \mathbb{Z}_{17}^{4 \times 2} $$
$$ \mathbf{e} = \begin{pmatrix} 1 \\ -1 \\ 0 \\ 2 \end{pmatrix} \equiv \begin{pmatrix} 1 \\ 16 \\ 0 \\ 2 \end{pmatrix} \pmod{17} $$
&lt;p>Em seguida, ele calcula a chave pública $\mathbf{b}$.
&lt;/p>
$$ A \mathbf{s} = \begin{pmatrix} 2 &amp; 15 \\ 1 &amp; 8 \\ 14 &amp; 5 \\ 9 &amp; 10 \end{pmatrix} \begin{pmatrix} 3 \\ 4 \end{pmatrix} = \begin{pmatrix} 2\times 3 + 15\times 4 \\ 1\times 3 + 8\times 4 \\ 14\times 3 + 5\times 4 \\ 9\times 3 + 10\times 4 \end{pmatrix} = \begin{pmatrix} 6 + 60 \\ 3 + 32 \\ 42 + 20 \\ 27 + 40 \end{pmatrix} = \begin{pmatrix} 66 \\ 35 \\ 62 \\ 67 \end{pmatrix} $$
&lt;p>
Calculando isto no módulo 17 (por exemplo, $66 = 17 \times 3 + 15$):
&lt;/p>
$$ A \mathbf{s} \pmod{17} = \begin{pmatrix} 15 \\ 1 \\ 11 \\ 16 \end{pmatrix} $$
&lt;p>
Adicionando o vetor de erro $\mathbf{e}$:
&lt;/p>
$$ \mathbf{b} = A \mathbf{s} + \mathbf{e} = \begin{pmatrix} 15 \\ 1 \\ 11 \\ 16 \end{pmatrix} + \begin{pmatrix} 1 \\ 16 \\ 0 \\ 2 \end{pmatrix} = \begin{pmatrix} 16 \\ 17 \\ 11 \\ 18 \end{pmatrix} \equiv \begin{pmatrix} 16 \\ 0 \\ 11 \\ 1 \end{pmatrix} \pmod{17} $$
&lt;p>A chave pública será $A$ e $\mathbf{b} = (16, 0, 11, 1)^T$.&lt;/p>
&lt;p>&lt;strong>[2. Fase de Criptografia]&lt;/strong>
Alice criptografa a mensagem $M = 1$.
Ela escolhe um vetor aleatório $\mathbf{r}$. Aqui, assumiremos $\mathbf{r} = (1, 0, 1, 0)^T$.&lt;/p>
&lt;p>Calculando $\mathbf{u}$:
&lt;/p>
$$ \mathbf{u} = A^T \mathbf{r} = \begin{pmatrix} 2 &amp; 1 &amp; 14 &amp; 9 \\ 15 &amp; 8 &amp; 5 &amp; 10 \end{pmatrix} \begin{pmatrix} 1 \\ 0 \\ 1 \\ 0 \end{pmatrix} = \begin{pmatrix} 2 \times 1 + 14 \times 1 \\ 15 \times 1 + 5 \times 1 \end{pmatrix} = \begin{pmatrix} 16 \\ 20 \end{pmatrix} \equiv \begin{pmatrix} 16 \\ 3 \end{pmatrix} \pmod{17} $$
&lt;p>Calculando $v$:
&lt;/p>
$$ \mathbf{b}^T \mathbf{r} = (16, 0, 11, 1) \begin{pmatrix} 1 \\ 0 \\ 1 \\ 0 \end{pmatrix} = 16 \times 1 + 11 \times 1 = 27 \equiv 10 \pmod{17} $$
&lt;p>
Ela adiciona o valor $\lfloor 17/2 \rfloor = 8$ correspondente à mensagem $M=1$.
&lt;/p>
$$ v = \mathbf{b}^T \mathbf{r} + M \cdot 8 = 10 + 1 \times 8 = 18 \equiv 1 \pmod{17} $$
&lt;p>Alice envia o texto cifrado $(\mathbf{u}, v) = \left( \begin{pmatrix} 16 \\ 3 \end{pmatrix}, 1 \right)$ para Bob.&lt;/p>
&lt;p>&lt;strong>[3. Fase de Descriptografia]&lt;/strong>
Ao receber o texto cifrado, Bob descriptografa usando a chave secreta $\mathbf{s} = (3, 4)^T$.
Fórmula do processo de descriptografia: Ele calcula $D = v - \mathbf{s}^T \mathbf{u} \pmod{17}$.&lt;/p>
$$ \mathbf{s}^T \mathbf{u} = (3, 4) \begin{pmatrix} 16 \\ 3 \end{pmatrix} = 3 \times 16 + 4 \times 3 = 48 + 12 = 60 \equiv 9 \pmod{17} $$
$$ D = v - \mathbf{s}^T \mathbf{u} = 1 - 9 = -8 \pmod{17} $$
&lt;p>Aqui, no mundo de módulo 17, $-8$ é equivalente a $9$ ($-8 + 17 = 9$).
Ele verifica se o valor obtido $D = 9$ está mais próximo de $0$ ou $8$ ($\lfloor 17/2 \rfloor$).
Uma vez que $9$ é claramente mais próximo de $8$ do que de $0$, Bob conseguiu recuperar corretamente $M = 1$!&lt;/p>
&lt;p>Por que se tornou $9$? Lembre-se da prova anterior.
A parte do erro é $\mathbf{e}^T \mathbf{r} = (1, -1, 0, 2) (1, 0, 1, 0)^T = 1 \times 1 + 0 \times 1 = 1$.
Portanto, o resultado do cálculo é $\mathbf{e}^T \mathbf{r} + M \cdot 8 = 1 + 8 = 9$, confirmando que o valor teórico foi calculado.&lt;/p>
&lt;h1 id="7-evolução-para-a-prática-ring-lwe-e-module-lwe">7. Evolução para a Prática: Ring-LWE e Module-LWE
&lt;/h1>&lt;p>O problema LWE Padrão (Standard LWE) explicado até agora possui provas de segurança muito fortes, mas tem uma fraqueza fatal na prática. Esta é o &amp;ldquo;tamanho da chave torna-se enorme&amp;rdquo; e &amp;ldquo;os custos de computação são elevados&amp;rdquo;.&lt;/p>
&lt;p>No Standard LWE, a chave pública contém uma matriz enorme $A \in \mathbb{Z}_q^{m \times n}$. Quando o parâmetro $n$ atinge centenas ou milhares, o tamanho dessa matriz chega a vários megabytes, o que a torna muito pesada para transmissão através de protocolos de comunicação na internet (como TLS) todas as vezes. Além disso, a multiplicação entre matrizes e vetores requer complexidade computacional de $\mathcal{O}(n^2)$.&lt;/p>
&lt;p>Para resolver esse problema, &amp;ldquo;Ring-LWE (RLWE)&amp;rdquo; e &amp;ldquo;Module-LWE (MLWE)&amp;rdquo; foram introduzidos, incorporando a estrutura algébrica dos anéis de polinômios (Polynomial rings) aos reticulados.&lt;/p>
&lt;h2 id="71-a-intuição-do-ring-lwe">7.1 A Intuição do Ring-LWE
&lt;/h2>&lt;p>No Ring-LWE, vetores e matrizes são substituídos por elementos (polinômios) em um anel de polinômios $\mathcal{R}_q = \mathbb{Z}_q[X]/(X^n + 1)$. (Aqui, $n$ é escolhido como uma potência de 2).&lt;/p>
&lt;p>Enquanto a chave pública no LWE Padrão era uma matriz $A$, o Ring-LWE usa um único polinômio $a(x)$. A chave privada $s(x)$ e o erro $e(x)$ também se tornam polinômios.
A equação fica assim:
&lt;/p>
$$ b(x) = a(x) \cdot s(x) + e(x) \pmod q $$
&lt;p>Por ser uma multiplicação polinomial, ao usar a &amp;ldquo;Transformada Numérica de Teoria (Number Theoretic Transform: NTT)&amp;rdquo;, que é análoga à Transformada Rápida de Fourier (FFT), o custo computacional pode ser drasticamente reduzido para $\mathcal{O}(n \log n)$. Além disso, dado que o tamanho da chave pública é reduzido de uma matriz para um único polinômio, o tamanho dos dados é reduzido para $\mathcal{O}(n)$. Isso traz uma vantagem esmagadora na largura de banda de comunicação.&lt;/p>
&lt;p>Matematicamente falando, o Ring-LWE não é sobre reticulados gerais, mas reduz-se a problemas em um reticulado especial simétrico chamado &amp;ldquo;Reticulado Ideal (Ideal Lattice)&amp;rdquo;.&lt;/p>
&lt;h2 id="72-module-lwe-e-a-padronização-do-nist-kyber--ml-kem">7.2 Module-LWE e a Padronização do NIST (Kyber / ML-KEM)
&lt;/h2>&lt;p>Embora o Ring-LWE seja eficiente, houve alguma preocupação de que a estrutura algébrica especial dos reticulados ideais pudesse se tornar a base para ataques futuros. Portanto, foi criado o &amp;ldquo;Module-LWE (MLWE)&amp;rdquo; para obter &amp;ldquo;o melhor dos dois mundos&amp;rdquo;, combinando a segurança conservadora do LWE Padrão com a eficiência do Ring-LWE.&lt;/p>
&lt;p>No Module-LWE, consideramos pequenos vetores e matrizes cujos elementos são polinômios. Ou seja, lidamos com módulos (modules) sobre um anel.
Atualmente, o &amp;ldquo;CRYSTALS-Kyber&amp;rdquo; (nome padronizado: ML-KEM), selecionado pelo NIST como o padrão para algoritmos de compartilhamento de chaves (KEM) da PQC, é construído exatamente sobre a dificuldade desse problema Module-LWE.&lt;/p>
&lt;h1 id="8-por-que-é-seguro-contra-computadores-quânticos">8. Por que é seguro contra computadores quânticos?
&lt;/h1>&lt;p>Por fim, tocaremos na questão central: &amp;ldquo;Por que se acredita que a criptografia baseada em reticulados não pode ser decifrada nem mesmo por computadores quânticos?&amp;rdquo;.&lt;/p>
&lt;p>O algoritmo de Shor, que permite aos computadores quânticos quebrar a criptografia RSA ou a criptografia de curvas elípticas, é essencialmente um algoritmo para resolver o &amp;ldquo;Problema do Subgrupo Oculto (Hidden Subgroup Problem: HSP)&amp;rdquo;. As estruturas matemáticas subjacentes à RSA e à ECC (grupos abelianos finitos) possuem periodicidade, e usando a operação específica de algoritmos quânticos chamada Transformada de Fourier Quântica (QFT), esse período (subgrupo oculto) pode ser extraído de uma vez.&lt;/p>
&lt;p>Contudo, os problemas de reticulados são fundamentalmente diferentes. Embora os reticulados também tenham periodicidade, o que é requerido em problemas como SVP e CVP são propriedades geométricas não-lineares, como &amp;ldquo;a distância mais curta&amp;rdquo; e &amp;ldquo;a remoção de ruído&amp;rdquo;. Mesmo que se aplique a &amp;ldquo;transformada de Fourier quântica sobre grupos abelianos&amp;rdquo; como no algoritmo de Shor diretamente, informações úteis que poderiam ser a resposta a problemas de reticulados não podem ser extraídas eficientemente. Até o momento, não foram descobertos algoritmos quânticos que resolvam SVP ou LWE em tempo polinomial e acredita-se amplamente que, mesmo com a capacidade de computação paralela dos computadores quânticos, não exista meio eficaz além de uma busca por força bruta (com uma aceleração na raiz quadrada pelo algoritmo de Grover).&lt;/p>
&lt;h1 id="9-conclusão">9. Conclusão
&lt;/h1>&lt;p>Neste artigo, explicamos em detalhes a intuição matemática da criptografia baseada em reticulados, começando pela definição geométrica de um reticulado, a formulação do problema LWE e culminando na construção da criptografia de chave pública.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Reticulado (Lattice)&lt;/strong> é um espaço discreto expresso por uma combinação linear com coeficientes inteiros de vetores de base, e em dimensões altas, torna-se difícil encontrar uma &amp;ldquo;boa base&amp;rdquo; quase ortogonal (SVP).&lt;/li>
&lt;li>O &lt;strong>Problema LWE (Learning With Errors)&lt;/strong> é o problema de resolver um sistema de equações lineares com ruído, e por estar vinculado à dificuldade do caso mais difícil dos problemas de reticulados, oferece uma poderosa garantia de segurança.&lt;/li>
&lt;li>Ao usar o problema LWE, a criptografia e descriptografia (&lt;strong>Cifrador Regev&lt;/strong>) são alcançadas através de um mecanismo inteligente de adição e cancelamento intencional de ruídos.&lt;/li>
&lt;li>Em protocolos do mundo real, o &lt;strong>Ring-LWE&lt;/strong> e o &lt;strong>Module-LWE&lt;/strong> usando anéis de polinômios são adotados para aumentar a eficiência de comunicação e velocidade computacional, formando a base do padrão NIST &lt;strong>ML-KEM&lt;/strong>.&lt;/li>
&lt;/ol>
&lt;p>À medida que nos aproximamos de uma mudança de paradigma computacional sem precedentes chamada computador quântico, é uma história muito romântica que a &amp;ldquo;Criptografia baseada em reticulados&amp;rdquo;, nascida das profundezas da álgebra linear clássica e da teoria dos números, apoiará a fundação da segurança da internet no futuro. A matemática que fundamenta a criptografia de reticulados não é excessivamente complexa, e com conhecimentos básicos de álgebra linear e probabilidade, pode-se entender completamente sua bela estrutura. Esperamos que este artigo ajude na compreensão da criptografia baseada em reticulados, que é o cerne da PQC.&lt;/p></description></item><item><title>O Funcionamento das Provas de Conhecimento Zero (ZKP) e as Últimas Aplicações em Web3 e Segurança</title><link>http://kenji.blog/pt/p/zero-knowledge-proofs-zkp-web3-security/</link><pubDate>Fri, 11 Sep 2026 19:00:00 +0900</pubDate><guid>http://kenji.blog/pt/p/zero-knowledge-proofs-zkp-web3-security/</guid><description>&lt;img src="http://kenji.blog/p/zero-knowledge-proofs-zkp-web3-security/img/eyecatch.jpg" alt="Featured image of post O Funcionamento das Provas de Conhecimento Zero (ZKP) e as Últimas Aplicações em Web3 e Segurança" />&lt;h2 id="introdução">Introdução
&lt;/h2>&lt;p>Na sociedade digital moderna, a privacidade de dados e a escalabilidade tornaram-se dois dos desafios mais importantes. Com o aumento do risco de vazamento de informações pessoais e uso não autorizado, há uma forte demanda por tecnologias que permitam &amp;ldquo;provar que você possui determinada informação sem revelá-la à outra parte&amp;rdquo;. Isso é alcançado pela &lt;strong>Prova de Conhecimento Zero (Zero-Knowledge Proof: ZKP)&lt;/strong>.&lt;/p>
&lt;p>A Prova de Conhecimento Zero é um conceito de teoria criptográfica proposto pela primeira vez na década de 1980 por Shafi Goldwasser, Silvio Micali e Charles Rackoff, mas que permaneceu restrito à pesquisa teórica por um longo tempo. No entanto, com a ascensão da tecnologia blockchain e da Web3, a situação mudou drasticamente. A ZKP ganhou destaque repentino como a &amp;ldquo;varinha mágica&amp;rdquo; para resolver simultaneamente o problema de escalabilidade (limites de capacidade de processamento) e o problema de privacidade (todas as transações sendo públicas) enfrentados por blockchains públicas como o Ethereum.&lt;/p>
&lt;p>Neste artigo, exploraremos detalhadamente e tecnicamente desde os conceitos fundamentais das Provas de Conhecimento Zero, os profundos mecanismos matemáticos e criptográficos dos atualmente populares &lt;strong>zk-SNARKs&lt;/strong> e &lt;strong>zk-STARKs&lt;/strong>, até os exemplos mais recentes de aplicações em Web3 e segurança, como ZK-Rollups e Identidade Descentralizada (DID).&lt;/p>
&lt;hr>
&lt;h2 id="o-que-é-uma-prova-de-conhecimento-zero-zkp">O que é uma Prova de Conhecimento Zero (ZKP)?
&lt;/h2>&lt;p>Uma Prova de Conhecimento Zero (ZKP) refere-se a um protocolo onde, ao provar que uma certa proposição é verdadeira, um provador (Prover) não transmite nenhuma informação a um verificador (Verifier) &amp;ldquo;além do fato de que a proposição é verdadeira&amp;rdquo;.&lt;/p>
&lt;h3 id="3-requisitos-que-a-zkp-deve-satisfazer">3 Requisitos que a ZKP Deve Satisfazer
&lt;/h3>&lt;p>Para ser estabelecida como uma ZKP, os três seguintes atributos devem ser estritamente atendidos:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Completude (Completeness)&lt;/strong>
Se a proposição for verdadeira e tanto o provador quanto o verificador seguirem o protocolo corretamente, o verificador deve aceitar (Accept) a prova com uma probabilidade esmagadora.&lt;/li>
&lt;li>&lt;strong>Solidez (Soundness)&lt;/strong>
Se a proposição for falsa, mesmo o provador mais malicioso e com grande poder computacional não poderá enganar o verificador para aceitar a prova (exceto por uma probabilidade insignificantemente pequena).&lt;/li>
&lt;li>&lt;strong>Conhecimento Zero (Zero-Knowledge)&lt;/strong>
Se a proposição for verdadeira, o verificador não pode obter do processo de prova nenhuma informação além do fato de que &amp;ldquo;a proposição é verdadeira&amp;rdquo;. Do ponto de vista do verificador, prova-se por definição matemática que é possível simular o processo de prova (existe um simulador).&lt;/li>
&lt;/ol>
&lt;h3 id="provas-interativas-e-não-interativas">Provas Interativas e Não Interativas
&lt;/h3>&lt;p>Existem dois tipos de ZKP: &lt;strong>provas interativas (Interactive ZKP)&lt;/strong>, onde o provador e o verificador se comunicam múltiplas vezes, e &lt;strong>provas não interativas (Non-Interactive ZKP)&lt;/strong>, onde o provador envia os dados da prova apenas uma vez e finaliza.&lt;/p>
&lt;h4 id="provas-interativas-interactive-zkp">Provas Interativas (Interactive ZKP)
&lt;/h4>&lt;p>As primeiras ZKPs foram projetadas como protocolos interativos. A famosa alegoria da &amp;ldquo;Caverna de Ali Babá&amp;rdquo; enquadra-se nisso. O fluxo geral do protocolo é o seguinte:&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant Prover as "Prover (Provador)"
participant Verifier as "Verifier (Verificador)"
Note over Prover, Verifier: "Fluxo básico do protocolo de prova interativa"
Prover->>Verifier: "1. Enviar compromisso (Commitment)"
Verifier->>Prover: "2. Enviar desafio aleatório (Challenge)"
Prover->>Verifier: "3. Calcular e enviar resposta (Response)"
Note over Verifier: "Verificar a resposta (Verification)"
Verifier-->>Prover: "4. Aceitar ou rejeitar (Accept / Reject)"
Note over Prover, Verifier: "※Para aumentar a certeza, isso é repetido dezenas de vezes"&lt;/div>
&lt;p>Este método é poderoso, mas o verificador deve estar online, o que o torna inconveniente para aplicação em sistemas distribuídos assíncronos como blockchain. Em uma blockchain, qualquer pessoa deve ser capaz de verificar provas passadas a qualquer momento.&lt;/p>
&lt;h4 id="transformação-de-fiat-shamir-fiat-shamir-heuristic-e-não-interatividade">Transformação de Fiat-Shamir (Fiat-Shamir Heuristic) e Não Interatividade
&lt;/h4>&lt;p>A &lt;strong>Transformação de Fiat-Shamir&lt;/strong> é um método inovador para converter uma prova interativa em uma prova não interativa (Non-Interactive Zero-Knowledge Proof: NIZK).&lt;/p>
&lt;p>Em vez do &amp;ldquo;desafio aleatório&amp;rdquo; enviado pelo verificador, o provador autogera um &amp;ldquo;desafio pseudoaleatório&amp;rdquo; usando seu próprio compromisso e o valor de hash das informações públicas. Assumindo que uma função de hash criptográfica (como SHA-256 ou Keccak) funcione como um oráculo aleatório, o provador não pode prever ou manipular o desafio antecipadamente e pode completar a prova com um único envio de mensagem, mantendo a mesma segurança de uma prova interativa.&lt;/p>
&lt;hr>
&lt;h2 id="detalhes-técnicos-de-zk-snarks">Detalhes Técnicos de zk-SNARKs
&lt;/h2>&lt;p>Atualmente, a ZKP mais amplamente utilizada é o &lt;strong>zk-SNARKs&lt;/strong> (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge). Como o nome sugere, é um argumento de conhecimento (Argument of Knowledge) que possui conhecimento zero (zk), tamanho de prova muito pequeno e verificação rápida (Succinct) e é não interativo (Non-Interactive).&lt;/p>
&lt;p>A base do zk-SNARKs é a geometria algébrica avançada e a teoria criptográfica. Ele converte a execução ou cálculo de um programa na verificação de uma equação polinomial específica.&lt;/p>
&lt;h3 id="1-conversão-para-circuitos-aritméticos-e-r1cs-rank-1-constraint-system">1. Conversão para Circuitos Aritméticos e R1CS (Rank-1 Constraint System)
&lt;/h3>&lt;p>Primeiro, qualquer cálculo a ser provado (um algoritmo ou lógica de contrato inteligente) é convertido em um &lt;strong>circuito aritmético (Arithmetic Circuit)&lt;/strong> que consiste em portas de adição e portas de multiplicação.&lt;/p>
&lt;p>Em seguida, este circuito aritmético é convertido em um conjunto de equações de matriz chamado &lt;strong>R1CS (Rank-1 Constraint System)&lt;/strong>. O R1CS é o problema de encontrar matrizes $A, B, C$ que satisfaçam a seguinte restrição para um vetor de variáveis $x$:&lt;/p>
$$ (A \cdot x) \circ (B \cdot x) = C \cdot x $$
&lt;p>Aqui, $\circ$ representa o produto de Hadamard (produto elemento a elemento). Essa restrição garante que todas as portas lógicas do circuito (especialmente as portas de multiplicação) sejam calculadas corretamente.&lt;/p>
&lt;h3 id="2-conversão-para-qap-quadratic-arithmetic-program">2. Conversão para QAP (Quadratic Arithmetic Program)
&lt;/h3>&lt;p>Como existem inúmeras restrições de matriz do R1CS, verificá-las individualmente é muito ineficiente. Portanto, usando a interpolação de Lagrange, essas restrições são comprimidas em uma única equação polinomial. Isso é o &lt;strong>QAP (Quadratic Arithmetic Program)&lt;/strong>.&lt;/p>
&lt;p>Ao converter para QAP, o problema a ser provado se reduz ao problema de &amp;ldquo;Pode um polinômio específico $P(x)$ ser divisível por outro polinômio conhecido $Z(x)$?&amp;rdquo;.&lt;/p>
$$ P(x) = L(x) \cdot R(x) - O(x) $$
&lt;p>Aqui, $L(x), R(x), O(x)$ são combinações dos polinômios correspondentes a cada linha das matrizes $A, B, C$, respectivamente. Se o provador souber a solução correta (Witness), o valor em cada raiz (ponto de avaliação) de $P(x)$ será 0, portanto, $P(x)$ terá o polinômio alvo $Z(x)$ como um fator. Ou seja, existe um polinômio $H(x)$ e a seguinte equação se mantém:&lt;/p>
$$ P(x) = H(x) \cdot Z(x) $$
&lt;p>O verificador pode verificar instantaneamente se todo o cálculo foi realizado corretamente apenas verificando se esta equação $P(s) = H(s) \cdot Z(s)$ se mantém em um ponto secreto aleatório $s$. Esse é o segredo da &amp;ldquo;Sucintez (Succinctness)&amp;rdquo;.&lt;/p>
&lt;h3 id="3-criptografia-de-curva-elíptica-e-emparelhamentos-bilinear-pairings">3. Criptografia de Curva Elíptica e Emparelhamentos (Bilinear Pairings)
&lt;/h3>&lt;p>No entanto, se o verificador souber o ponto secreto $s$, o provador poderá forjar um polinômio falso para satisfazer a equação (quebra da solidez). Portanto, é necessário realizar o cálculo mantendo $s$ criptografado (usando criptografia homomórfica) para que ninguém o conheça.&lt;/p>
&lt;p>Isto é alcançado pelos &lt;strong>emparelhamentos de curva elíptica (Bilinear Pairings)&lt;/strong>.
Um emparelhamento $e$ é uma função especial que pode calcular um valor equivalente à criptografia de seu produto a partir de dois valores criptografados.&lt;/p>
$$ e(g_1^a, g_2^b) = e(g_1, g_2)^{ab} $$
&lt;p>O provador pode calcular os valores criptografados dos polinômios $P(s)$ e $H(s)$ usando o valor criptografado da potência de $s$ (chamado de CRS: Common Reference String), mesmo sem conhecer o próprio $s$. O verificador utiliza a função de emparelhamento para verificar se a relação $P(s) = H(s) \cdot Z(s)$ é mantida enquanto os valores permanecem criptografados.&lt;/p>
&lt;h3 id="4-configuração-confiável-trusted-setup">4. Configuração Confiável (Trusted Setup)
&lt;/h3>&lt;p>A maior fraqueza dos zk-SNARKs (especialmente os iniciais como o Groth16) é que eles requerem um processo para gerar o ponto secreto $s$, chamado de &lt;strong>Configuração Confiável (Trusted Setup)&lt;/strong>. Se o criador do $s$ mantiver o valor em vez de destruí-lo, ele poderá gerar qualquer prova falsa (problema do Lixo Tóxico / Toxic Waste).&lt;/p>
&lt;p>Para prevenir isso, é realizada uma cerimônia chamada &amp;ldquo;Ceremony&amp;rdquo;, que utiliza Computação Multipartidária (MPC). Vários participantes colaboram para fornecer aleatoriedade, e se pelo menos um participante destruir honestamente seu próprio valor aleatório, a segurança de todo o sistema é mantida. No entanto, pesquisas para eliminar essa dependência vêm sendo conduzidas há muitos anos.&lt;/p>
&lt;hr>
&lt;h2 id="detalhes-técnicos-de-zk-starks">Detalhes Técnicos de zk-STARKs
&lt;/h2>&lt;p>Como resposta à dependência da Configuração Confiável e ao risco de decodificação da criptografia de curva elíptica por computadores quânticos, surgiram os &lt;strong>zk-STARKs&lt;/strong> (Zero-Knowledge Scalable Transparent Argument of Knowledge).&lt;/p>
&lt;p>Desenvolvido por Eli Ben-Sasson e outros, o STARKs não requer nenhuma Configuração Confiável (Trusted Setup), como o nome &amp;ldquo;Transparente (Transparent)&amp;rdquo; sugere, e tem a característica de que o tamanho da prova e o tempo de verificação são mantidos eficientes mesmo se o volume de cálculo aumentar, como sugere o nome &amp;ldquo;Escalável (Scalable)&amp;rdquo;.&lt;/p>
&lt;h3 id="1-compromisso-polinomial-e-protocolo-fri">1. Compromisso Polinomial e Protocolo FRI
&lt;/h3>&lt;p>Os zk-STARKs não dependem de criptografia de curva elíptica, mas ancoram a sua segurança &lt;strong>apenas em funções hash&lt;/strong>. Portanto, eles possuem propriedades de criptografia pós-quântica (Post-Quantum Cryptography).&lt;/p>
&lt;p>A verificação do cálculo é realizada convertendo-o num formato chamado AIR (Algebraic Intermediate Representation) e, em seguida, utilizando as propriedades dos polinómios unidimensionais ou multidimensionais. O núcleo do STARKs está no protocolo &lt;strong>FRI (Fast Reed-Solomon Interactive Oracle Proof of Proximity)&lt;/strong>.&lt;/p>
&lt;p>O protocolo FRI é uma tecnologia para verificar &amp;ldquo;se uma determinada função está suficientemente próxima de um polinômio de um grau específico (Proximity)&amp;rdquo;. O provador compromete os valores do polinômio como folhas de uma árvore de Merkle (Merkle Tree) (compromisso polinomial).&lt;/p>
&lt;div class="mermaid">graph TD
Root["Merkle Root (Compromisso)"] --> Node0["Nó 0"]
Root --> Node1["Nó 1"]
Node0 --> Leaf0["P(x_0)"]
Node0 --> Leaf1["P(x_1)"]
Node1 --> Leaf2["P(x_2)"]
Node1 --> Leaf3["P(x_3)"]&lt;/div>
&lt;p>O verificador exige a revelação de alguns pontos aleatórios e utiliza provas de Merkle (Merkle Proofs) para confirmar que estão incluídos no compromisso. Ao repetir isso recursivamente, garante-se com probabilidade esmagadora que o grau do polinômio original é realmente baixo.&lt;/p>
&lt;h3 id="comparação-entre-zk-snarks-e-zk-starks">Comparação entre zk-SNARKs e zk-STARKs
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Característica&lt;/th>
&lt;th style="text-align:left">zk-SNARKs&lt;/th>
&lt;th style="text-align:left">zk-STARKs&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Suposições Criptográficas&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Curvas elípticas, Emparelhamentos&lt;/td>
&lt;td style="text-align:left">Funções hash resistentes a colisões&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Configuração Confiável&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Necessária (Plonk etc. são universais)&lt;/td>
&lt;td style="text-align:left">Não necessária (Transparente)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Resistência Quântica&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Não&lt;/td>
&lt;td style="text-align:left">Sim&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Tamanho da Prova&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Muito pequeno (~200 Byte)&lt;/td>
&lt;td style="text-align:left">Um pouco maior (dezenas de KB)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Custo Computacional da Geração da Prova&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Alto&lt;/td>
&lt;td style="text-align:left">Relativamente menor que SNARKs&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Custo de Verificação (Taxa de Gas)&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Muito baixo (constante)&lt;/td>
&lt;td style="text-align:left">Baixo (aumenta logaritmicamente)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Nos últimos anos, surgiram SNARKs que &amp;ldquo;não requerem Configuração Confiável, ou precisam de apenas uma vez&amp;rdquo;, como Plonk e Halo2, e a fronteira entre SNARKs e STARKs está gradualmente se tornando tênue, mas a diferença fundamental na abordagem matemática é importante.&lt;/p>
&lt;hr>
&lt;h2 id="as-últimas-aplicações-de-provas-de-conhecimento-zero-na-web3-e-segurança">As Últimas Aplicações de Provas de Conhecimento Zero na Web3 e Segurança
&lt;/h2>&lt;p>A ZKP, que passou da teoria à prática, está atualmente causando uma revolução na vanguarda da Web3 e da segurança cibernética.&lt;/p>
&lt;h3 id="1-dimensionamento-extremo-do-ethereum-por-zk-rollups">1. Dimensionamento Extremo do Ethereum por ZK-Rollups
&lt;/h3>&lt;p>As blockchains de camada 1 (L1) como o Ethereum enfrentam grandes limitações de escalabilidade (o trilema) porque enfatizam a descentralização e a segurança. A solução definitiva de camada 2 (L2) para resolver isso é o &lt;strong>ZK-Rollups&lt;/strong>.&lt;/p>
&lt;p>No ZK-Rollup, milhares de transações são executadas e processadas off-chain (L2), e uma única &amp;ldquo;ZKP (Validity Proof)&amp;rdquo; é gerada para mostrar que todas foram executadas corretamente. O contrato inteligente na cadeia L1 só precisa verificar esta prova.&lt;/p>
&lt;div class="mermaid">flowchart LR
Users["Users (Envio de Tx)"] --> Sequencer["Sequencer (Coleta e Execução de Tx)"]
Sequencer --> Prover["Prover (Geração de ZKP)"]
Sequencer --> L1Contract["L1 Smart Contract (Publicação de Dados de Tx)"]
Prover --> L1Contract["Submissão de ZKP (Prova)"]
L1Contract --> Verify["Verificação &amp; Atualização de Estado"]&lt;/div>
&lt;p>A maior vantagem do ZK-Rollups é que, diferentemente do Optimistic Rollups (como Arbitrum ou Optimism), não há necessidade de um período de contestação (geralmente 7 dias) para provas de fraude (Fraud Proof). Como a correção é garantida criptograficamente, a retirada de fundos (Finality) para a L1 é concluída no momento em que a prova é verificada. Atualmente, projetos como zkSync, Starknet, Scroll e Polygon zkEVM estão em intensa competição de desenvolvimento, e a realização do &lt;strong>zkEVM&lt;/strong>, que é compatível com o EVM (Ethereum Virtual Machine), está impulsionando o rápido crescimento do ecossistema.&lt;/p>
&lt;h3 id="2-identidade-com-preservação-de-privacidade-zkp-for-identity">2. Identidade com Preservação de Privacidade (ZKP for Identity)
&lt;/h3>&lt;p>A forma como a autenticação pessoal funciona no mundo digital também mudará fundamentalmente com a ZKP.
Por exemplo, para a pergunta &amp;ldquo;Você tem 18 anos ou mais?&amp;rdquo;, os sistemas tradicionais exigiam a apresentação de uma carteira de motorista ou passaporte, entregando informações pessoais desnecessárias como nome e endereço à outra parte.&lt;/p>
&lt;p>Usando ZKP, é possível provar &lt;strong>apenas o fato matematicamente&lt;/strong> de que &amp;ldquo;com base na minha data de nascimento, tenho 18 anos ou mais na data atual&amp;rdquo; utilizando certificados digitais emitidos por órgãos governamentais (Verifiable Credential). O verificador só precisa validar a assinatura do certificado e a ZKP, e não pode saber a data de nascimento ou a identidade do usuário.&lt;/p>
&lt;p>Projetos de Prova de Humanidade (Proof of Personhood) como o Worldcoin também não armazenam ou compartilham diretamente os dados da íris, mas usam a ZKP para implementar um sistema que comprova &amp;ldquo;apenas ser um ser humano único&amp;rdquo;.&lt;/p>
&lt;h3 id="3-contratos-inteligentes-confidenciais-e-uso-corporativo">3. Contratos Inteligentes Confidenciais e Uso Corporativo
&lt;/h3>&lt;p>A natureza de &amp;ldquo;todos os dados serem públicos&amp;rdquo; nas blockchains públicas sempre foi uma barreira importante para as empresas lidarem com transações confidenciais ou informações da cadeia de suprimentos na blockchain.&lt;/p>
&lt;p>Utilizando a tecnologia ZKP (por exemplo, redes focadas em privacidade como Aleo e Aztec), é possível registrar na blockchain pública apenas a validade da atualização do estado, mantendo os valores de entrada e saída das transações e até mesmo a própria lógica do contrato inteligente executado criptografados. Isto possibilita prevenir o front-running (MEV) em DeFi (Finanças Descentralizadas) e construir redes de consórcio confidenciais entre empresas, enquanto se desfruta da alta segurança da blockchain pública.&lt;/p>
&lt;hr>
&lt;h2 id="desafios-futuros-e-perspectivas-da-zkp">Desafios Futuros e Perspectivas da ZKP
&lt;/h2>&lt;p>A ZKP é inegavelmente uma tecnologia fundamental da próxima geração, mas ainda restam alguns desafios.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Custo Computacional da Geração de Provas e Aceleração de Hardware&lt;/strong>
A geração da ZKP requer enormes cálculos de polinômios, FFT (Transformada Rápida de Fourier) e MSM (Multiplicação Multi-Escalar). Atualmente, a pesquisa em hardware especializado (FPGA e ASIC) para acelerar essa geração de provas, conhecida como &lt;strong>Mineração ZKP&lt;/strong> (Prover Network), está avançando rapidamente.&lt;/li>
&lt;li>&lt;strong>Padronização e Melhoria da Experiência do Desenvolvedor (DX)&lt;/strong>
Múltiplas linguagens dedicadas para escrever circuitos ZKP, como Circom, Cairo, Noir, Leo, estão proliferando. O padrão que as unifica e a maturidade de compiladores que gerem automaticamente circuitos ZKP a partir de Rust ou C++ existentes serão a chave para a adoção da ZKP por engenheiros de software comuns.&lt;/li>
&lt;/ol>
&lt;h2 id="conclusão">Conclusão
&lt;/h2>&lt;p>As Provas de Conhecimento Zero (ZKP) evoluíram de ser apenas uma &amp;ldquo;tecnologia para aumentar o anonimato das criptomoedas&amp;rdquo; para uma &amp;ldquo;tecnologia de propósito geral que redefine a confiança (trust) de toda a Internet&amp;rdquo;. As pequenas provas calculadas nas profundezas da matemática e da teoria da criptografia expandem infinitamente a escalabilidade da blockchain e funcionam como um forte escudo para proteger nossa privacidade.&lt;/p>
&lt;p>Rumo à verdadeira adoção em massa da Web3 e à construção de uma Internet de próxima geração segura e privada, as Provas de Conhecimento Zero continuarão a funcionar como a peça mais importante. Não podemos tirar os olhos da futura evolução da tecnologia ZKP.&lt;/p>
&lt;hr>
&lt;p>&lt;em>Referências e Links Relacionados&lt;/em>&lt;/p>
&lt;ul>
&lt;li>Groth, J. (2016). &amp;ldquo;On the Size of Pairing-based Non-interactive Arguments&amp;rdquo;&lt;/li>
&lt;li>Ben-Sasson, E., et al. (2018). &amp;ldquo;Scalable, transparent, and post-quantum secure computational integrity&amp;rdquo;&lt;/li>
&lt;li>Vitalik Buterin&amp;rsquo;s blog on zk-SNARKs and zk-STARKs&lt;/li>
&lt;/ul></description></item><item><title>O que é a Criptografia Totalmente Homomórfica (FHE)? Explicando a essência da segurança de próxima geração</title><link>http://kenji.blog/pt/p/fully-homomorphic-encryption-fhe-explained/</link><pubDate>Fri, 11 Sep 2026 11:00:00 +0900</pubDate><guid>http://kenji.blog/pt/p/fully-homomorphic-encryption-fhe-explained/</guid><description>&lt;img src="http://kenji.blog/p/fully-homomorphic-encryption-fhe-explained/img/eyecatch.jpg" alt="Featured image of post O que é a Criptografia Totalmente Homomórfica (FHE)? Explicando a essência da segurança de próxima geração" />&lt;p>À medida que a computação em nuvem e a tecnologia de IA se estabelecem como base da sociedade, o trade-off entre a &amp;ldquo;privacidade de dados&amp;rdquo; e a &amp;ldquo;utilização de dados&amp;rdquo; tornou-se um dos desafios mais importantes. Embora haja uma demanda crescente por ter IAs analisando dados altamente sensíveis na nuvem — como dados médicos, informações financeiras e dados biométricos pessoais —, muitas empresas hesitam em enviar dados externamente por questões de segurança.&lt;/p>
&lt;p>Tecnologias de criptografia tradicionais (como AES e RSA) são excelentes em proteger dados armazenados em disco (Data at Rest) ou dados transmitidos pela rede (Data in Transit). No entanto, quando o servidor executa &lt;strong>processamentos (cálculos) nos dados, como pesquisas ou aprendizado de máquina (Data in Use), é necessário descriptografar a cifra e retorná-la a texto plano primeiro&lt;/strong>. Se o servidor for hackeado exatamente no momento em que os dados estão descriptografados, ou se um administrador interno mal-intencionado visualizar os dados, isso levará diretamente a um vazamento de informações.&lt;/p>
&lt;p>A tecnologia dos sonhos que supera essa fraqueza fundamental da &amp;ldquo;descriptografia durante o processamento&amp;rdquo; é a &lt;strong>Criptografia Totalmente Homomórfica (Fully Homomorphic Encryption: FHE)&lt;/strong>. Ao usar a FHE, torna-se possível realizar cálculos nos dados enquanto eles permanecem criptografados, sem qualquer descriptografia, e retornar apenas o texto cifrado do resultado para o cliente.&lt;/p>
&lt;p>Neste artigo, explicaremos profundamente a FHE, o pilar da segurança da próxima geração, desde os seus conceitos até a história, o avanço revolucionário de Craig Gentry, a base matemática (como Ring-LWE), o maior desafio do &amp;ldquo;ruído&amp;rdquo; e sua solução (bootstrapping), chegando até as bibliotecas de implementação mais recentes.&lt;/p>
&lt;hr>
&lt;h2 id="1-o-que-é-a-criptografia-homomórfica-conceitos-básicos">1. O que é a Criptografia Homomórfica? Conceitos Básicos
&lt;/h2>&lt;p>&amp;ldquo;Homomorfismo&amp;rdquo; é um termo da álgebra que se refere à propriedade de mapeamento entre conjuntos que possuem uma determinada estrutura, preservando a estrutura de suas operações. A &amp;ldquo;propriedade homomórfica&amp;rdquo; na teoria da criptografia é a característica onde &lt;strong>as operações no espaço de texto plano correspondem às operações no espaço de texto cifrado&lt;/strong>.&lt;/p>
&lt;p>Expressado em uma fórmula simples, considere que a função de criptografia para os textos planos $m_1$ e $m_2$ seja $E(\cdot)$ e a função de descriptografia seja $D(\cdot)$. Sendo $\circ$ a operação sobre os textos planos (como adição ou multiplicação) e $\diamond$ a operação sobre os textos cifrados, a seguinte relação é mantida:&lt;/p>
$$ D(E(m_1) \diamond E(m_2)) = m_1 \circ m_2 $$
&lt;p>Em outras palavras, ao descriptografar o resultado da aplicação de alguma operação $\diamond$ nos textos cifrados $E(m_1)$ e $E(m_2)$, obteremos o mesmo resultado da operação $\circ$ feita nos textos planos originais.&lt;/p>
&lt;h3 id="fluxo-de-dados-na-computação-em-nuvem">Fluxo de Dados na Computação em Nuvem
&lt;/h3>&lt;p>A arquitetura de processamento em nuvem usando a FHE é completamente diferente da arquitetura tradicional. O diagrama a seguir ilustra o fluxo de processamento seguro de dados utilizando a FHE.&lt;/p>
&lt;div class="mermaid">graph TD
A["Cliente (Possui a chave secreta)"] -->|1. Criptografar texto plano x: E(x)| B["Servidor em Nuvem (Apenas dados criptografados)"]
B -->|2. Aplicar função f no texto cifrado: E(f(x))| B
B -->|3. Texto cifrado do resultado calculado E(y)| A
A -->|4. Descriptografar com chave secreta: y = f(x)| A
style A fill:#d4edda,stroke:#28a745
style B fill:#f8d7da,stroke:#dc3545&lt;/div>
&lt;p>O servidor recebe os dados criptografados $E(x)$, mas como ele não possui a chave secreta, ele é absolutamente incapaz de saber o conteúdo dos dados. No entanto, explorando as propriedades da FHE, é possível aplicar a função $f$ (por exemplo, um modelo de inferência de aprendizado de máquina) ao texto cifrado e gerar $E(f(x))$. O cliente recebe isso e, descriptografando-o com sua própria chave secreta, obtém o resultado desejado $y = f(x)$.&lt;/p>
&lt;hr>
&lt;h2 id="2-a-história-da-evolução-da-criptografia-homomórfica-phe-she-fhe">2. A História da Evolução da Criptografia Homomórfica: PHE, SHE, FHE
&lt;/h2>&lt;p>A criptografia homomórfica não atingiu sua forma &amp;ldquo;totalmente&amp;rdquo; atual de uma só vez. Ela é amplamente classificada em três estágios dependendo dos tipos e da quantidade de operações que podem ser realizadas.&lt;/p>
&lt;h3 id="partially-homomorphic-encryption-phe-criptografia-parcialmente-homomórfica">Partially Homomorphic Encryption (PHE: Criptografia Parcialmente Homomórfica)
&lt;/h3>&lt;p>A PHE é um método de criptografia que permite que &lt;strong>apenas uma das operações&lt;/strong> (ou adição ou multiplicação) seja executada um número ilimitado de vezes. Na verdade, criptografias com essa propriedade existem há muito tempo.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Criptografia RSA (Homomorfismo para multiplicação)&lt;/strong>
A criptografia RSA obteve inadvertidamente propriedade homomórfica multiplicativa. Dados os textos planos $m_1, m_2$ e a chave pública $(e, N)$:
$$ E(m_1) = m_1^e \pmod N $$
$$ E(m_2) = m_2^e \pmod N $$
Ao multiplicá-los:
$$ E(m_1) \times E(m_2) = (m_1 \cdot m_2)^e \pmod N = E(m_1 \times m_2) $$
Assim, a multiplicação dos textos cifrados corresponde à multiplicação dos textos planos.&lt;/li>
&lt;li>&lt;strong>Criptografia Paillier (Homomorfismo para adição)&lt;/strong>
A criptografia Paillier, inventada em 1999, possui propriedade homomórfica para a adição. Tem sido implementada na prática em sistemas como o voto eletrônico (onde os votos criptografados são agregados e apenas o resultado final é descriptografado).&lt;/li>
&lt;/ul>
&lt;h3 id="somewhat-homomorphic-encryption-she-criptografia-homomórfica-limitada">Somewhat Homomorphic Encryption (SHE: Criptografia Homomórfica Limitada)
&lt;/h3>&lt;p>Este método pode executar &lt;strong>tanto a adição quanto a multiplicação&lt;/strong>, mas há &lt;strong>um limite no número de vezes (a profundidade do circuito)&lt;/strong> em que as operações podem ser realizadas. Devido ao acúmulo de &amp;ldquo;ruído&amp;rdquo; discutido mais adiante, após realizar mais do que um certo número de multiplicações, a descriptografia se torna impossível. A criptografia BGN (Boneh-Goh-Nissim) de 2005 entra nessa categoria, mas tinha limites quando se tentava cálculos complexos práticos (como o deep learning).&lt;/p>
&lt;h3 id="fully-homomorphic-encryption-fhe-criptografia-totalmente-homomórfica">Fully Homomorphic Encryption (FHE: Criptografia Totalmente Homomórfica)
&lt;/h3>&lt;p>Um esquema de criptografia no qual tanto a adição quanto a multiplicação podem ser realizadas &lt;strong>um número ilimitado de vezes&lt;/strong>. Semelhante à completude de Turing na teoria da informação, se a adição (correspondente a XOR) e a multiplicação (correspondente a AND) puderem ser combinadas infinitamente, significa que, em princípio, qualquer função ou algoritmo computável pode ser executado enquanto os dados permanecem criptografados.&lt;/p>
&lt;p>Por muito tempo, a FHE foi chamada de o &amp;ldquo;Santo Graal do mundo da criptografia&amp;rdquo; e muitos pensavam ser impossível. No entanto, em 2009, &lt;strong>Craig Gentry&lt;/strong>, que estava em um programa de doutorado na Universidade de Stanford na época, propôs o primeiro esquema de FHE usando Reticulados Ideais (Ideal Lattices), chocando o mundo.&lt;/p>
&lt;hr>
&lt;h2 id="3-a-base-matemática-da-fhe-o-problema-lwe-e-ring-lwe">3. A Base Matemática da FHE: O Problema LWE e Ring-LWE
&lt;/h2>&lt;p>Muitos esquemas modernos de FHE baseiam-se no &lt;strong>problema LWE (Learning With Errors)&lt;/strong>, um difícil problema matemático da &amp;ldquo;Criptografia baseada em Reticulados (Lattice-based Cryptography)&amp;rdquo;, também conhecida como Criptografia Pós-Quântica (Post-Quantum Cryptography).&lt;/p>
&lt;h3 id="entendimento-intuitivo-do-problema-lwe">Entendimento Intuitivo do Problema LWE
&lt;/h3>&lt;p>Resolver um sistema de equações lineares é fácil usando métodos como a eliminação de Gauss.&lt;/p>
$$ \begin{cases} 3s_1 + 4s_2 + 2s_3 \equiv 12 \pmod{17} \\ 1s_1 + 9s_2 + 5s_3 \equiv 8 \pmod{17} \\ \vdots \end{cases} $$
&lt;p>No entanto, o que acontece se adicionarmos um pequeno &amp;ldquo;erro aleatório (ruído)&amp;rdquo; $e$ ao resultado destas equações?&lt;/p>
$$ \begin{cases} 3s_1 + 4s_2 + 2s_3 + e_1 \equiv 13 \pmod{17} \\ 1s_1 + 9s_2 + 5s_3 + e_2 \equiv 7 \pmod{17} \\ \vdots \end{cases} $$
&lt;p>Ao apenas adicionar esse erro $e$, o problema de descobrir o vetor de variáveis secretas $\vec{s}$ se transforma em um problema NP-difícil, extremamente complicado de ser decifrado mesmo utilizando os supercomputadores ou computadores quânticos de hoje. Esse é o problema LWE.&lt;/p>
&lt;h3 id="problema-ring-lwe-rlwe">Problema Ring-LWE (RLWE)
&lt;/h3>&lt;p>Como o problema LWE padrão envolve operações com matrizes, ele sofria da desvantagem de possuir tamanhos de chave extremamente grandes (às vezes chegando à escala de gigabytes) e de ter baixa eficiência computacional. O &lt;strong>problema Ring-LWE (RLWE)&lt;/strong>, que utiliza operações sobre um anel polinomial, foi introduzido para resolver esse problema.&lt;/p>
&lt;p>No RLWE, os elementos pertencem a um anel polinomial $R_q = \mathbb{Z}_q[x] / (x^N + 1)$ (onde $N$ é uma potência de 2, e $q$ é um número primo para o módulo).
Se a chave secreta for o polinômio $s(x)$, um polinômio aleatório for $a(x)$, e um polinômio de ruído pequeno for $e(x)$, o par de chaves públicas será:&lt;/p>
$$ (a(x), b(x)) \quad \text{where} \quad b(x) = -a(x) \cdot s(x) + e(x) \pmod q $$
&lt;p>No momento da criptografia, a propriedade desse polinômio é usada para codificar o texto plano $m(x)$ e gerar o texto cifrado.&lt;/p>
&lt;hr>
&lt;h2 id="4-a-maior-barreira-ruído-e-o-bootstrapping-de-gentry">4. A Maior Barreira: &amp;ldquo;Ruído&amp;rdquo; e o Bootstrapping de Gentry
&lt;/h2>&lt;p>O conceito mais importante no entendimento da FHE é &lt;strong>&amp;ldquo;a gestão do ruído&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;p>Em criptografias baseadas em LWE/RLWE, pequenos &amp;ldquo;ruídos (erros)&amp;rdquo; são intencionalmente incluídos para garantir a segurança.
O processo de descriptografia do texto cifrado $c$ do texto plano $m$ pode ser expresso em termos gerais pela seguinte fórmula:&lt;/p>
$$ D(c) = (c \cdot s) \pmod q = m + \text{noise} $$
&lt;p>Durante a descriptografia, o texto plano $m$ correto é obtido pela remoção desse &lt;code>noise&lt;/code> por meio de processos como o arredondamento. Contudo, ao realizar operações homomórficas (especialmente a multiplicação) nos textos cifrados, esse ruído se amplifica drasticamente.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Adição homomórfica&lt;/strong>: O ruído aumenta aditivamente ($e_1 + e_2$). É um aumento relativamente suave.&lt;/li>
&lt;li>&lt;strong>Expressão matemática da propriedade homomórfica com adição homomórfica&lt;/strong>:
$$ E(m_1) \oplus E(m_2) = E(m_1 + m_2) $$&lt;/li>
&lt;li>&lt;strong>Multiplicação homomórfica&lt;/strong>: O ruído explode multiplicativamente (pois envolve fatores como $e_1 \times e_2$). Apenas multiplicando algumas vezes, o ruído pode exceder o limiar $q/2$, impossibilitando o arredondamento correto e levando à falha da descriptografia.&lt;/li>
&lt;li>&lt;strong>Expressão matemática da propriedade homomórfica com multiplicação homomórfica&lt;/strong>:
$$ E(m_1) \otimes E(m_2) = E(m_1 \times m_2) $$&lt;/li>
&lt;/ul>
&lt;p>É por isso que a FHE permaneceu sem ser concretizada por um longo tempo, restrita a SHE (limitada em número de operações).&lt;/p>
&lt;h3 id="a-magia-do-bootstrapping">A Magia do Bootstrapping
&lt;/h3>&lt;p>A contribuição genial de Craig Gentry foi a invenção da técnica de redução de ruído chamada &lt;strong>&amp;ldquo;bootstrapping&amp;rdquo;&lt;/strong>. Essa foi uma mudança de paradigma na criptografia.&lt;/p>
&lt;p>Intuitivamente, é o processo de &amp;ldquo;&amp;lsquo;descriptografar&amp;rsquo; o texto cifrado dentro do seu estado criptografado para limpá-lo, antes que ele se torne tão repleto de ruído que quebre, e então colocá-lo em um novo texto cifrado&amp;rdquo;.&lt;/p>
&lt;ol>
&lt;li>Suponha que temos um texto cifrado $C_{noisy}$ com muito ruído.&lt;/li>
&lt;li>O cliente fornece antecipadamente ao servidor sua chave secreta $sk$ &amp;ldquo;criptografada com a chave pública&amp;rdquo;, ou seja, $E_{pk}(sk)$ (isto é chamado de chave de bootstrapping).&lt;/li>
&lt;li>O servidor executa homomorficamente o &lt;strong>Circuito de Descriptografia (Decryption Circuit)&lt;/strong> sobre $C_{noisy}$.&lt;/li>
&lt;li>Especificamente, ele realiza uma &amp;ldquo;descriptografia dentro do espaço criptografado&amp;rdquo; aplicando $E_{pk}(sk)$ em $E_{pk}(C_{noisy})$.&lt;/li>
&lt;li>Como este circuito de descriptografia é em si mesmo uma operação homomórfica, ele gerará um novo ruído, mas o ruído do novo texto cifrado gerado, $C_{fresh}$, é redefinido para um &amp;ldquo;nível fixo&amp;rdquo; constante.&lt;/li>
&lt;/ol>
&lt;div class="mermaid">graph LR
A["Texto cifrado com alto ruído C_noisy"] --> B["Circuito de descriptografia homomórfica (Eval_Dec)"]
C["Chave secreta criptografada E(sk)"] --> B
B --> D["Texto cifrado com baixo ruído C_fresh"]
style B fill:#ffeeba,stroke:#ffc107&lt;/div>
&lt;p>Ao executar este bootstrapping periodicamente no meio dos cálculos, tornou-se teoricamente possível calcular circuitos de profundidade infinita (atingindo a FHE). No entanto, no esquema inicial de Gentry, o custo computacional para esse processo de bootstrapping era desesperadamente alto, levando de dezenas de minutos a horas para ser executado uma única vez.&lt;/p>
&lt;hr>
&lt;h2 id="5-gerações-de-fhe-e-a-evolução-dos-principais-esquemas">5. Gerações de FHE e a Evolução dos Principais Esquemas
&lt;/h2>&lt;p>Para tornar a FHE viável na prática, criptógrafos de todo o mundo vêm competindo para aprimorar os algoritmos. Atualmente, a FHE é amplamente categorizada em quatro gerações ou famílias.&lt;/p>
&lt;h3 id="segunda-geração-aritmética-exata-de-inteiros-bgv-bfv">Segunda Geração: Aritmética Exata de Inteiros (BGV, BFV)
&lt;/h3>&lt;p>Surgidos entre 2011 e 2012, os esquemas &lt;strong>BGV (Brakerski-Gentry-Vaikuntanathan)&lt;/strong> e &lt;strong>BFV (Brakerski/Fan-Vercauteren)&lt;/strong>. Baseados no RLWE, eles são apropriados para a aritmética modular com números inteiros (cálculos exatos).
Eles têm como característica o suporte a técnicas de loteamento (Batching) como SIMD (Single Instruction, Multiple Data), que permite acomodar milhares de slots de dados em um único texto cifrado de polinômio gigante, possibilitando cálculos paralelos de uma só vez.&lt;/p>
&lt;h3 id="terceira-geração-aceleração-do-bootstrapping-gsw-fhew-tfhe">Terceira Geração: Aceleração do Bootstrapping (GSW, FHEW, TFHE)
&lt;/h3>&lt;p>O esquema &lt;strong>GSW (Gentry-Sahai-Waters)&lt;/strong> de 2013 simplificou a estrutura da FHE. Isso então evoluiu para o &lt;strong>TFHE (Fast Fully Homomorphic Encryption over the Torus)&lt;/strong>, que é um dos métodos predominantes hoje em dia.
A característica do TFHE é que o seu bootstrapping é extremamente rápido (na ordem de milissegundos). Ele é robusto no processamento ao nível de portas (circuitos lógicos como AND, XOR) e possui um tamanho de texto cifrado relativamente pequeno, tornando-o ideal para avaliar rapidamente circuitos lógicos arbitrários.&lt;/p>
&lt;h3 id="quarta-geração-especialização-para-cálculo-aproximado-e-aprendizado-de-máquina-ckks">Quarta Geração: Especialização para Cálculo Aproximado e Aprendizado de Máquina (CKKS)
&lt;/h3>&lt;p>O esquema &lt;strong>CKKS (Cheon-Kim-Kim-Song)&lt;/strong>, proposto por Cheon et al. em 2017, pode ser considerado a tecnologia definitiva na proteção da privacidade para a IA e aprendizado de máquina modernos.
Enquanto as versões anteriores da FHE focavam em &amp;ldquo;cálculos com números inteiros exatos&amp;rdquo;, o CKKS suporta homomorficamente &lt;strong>&amp;ldquo;cálculos aproximados com números de ponto flutuante&amp;rdquo;&lt;/strong>. Ele demonstra um desempenho avassalador em cálculos com números reais onde pequenas margens de erro são toleradas, como no treinamento e inferência de redes neurais.&lt;/p>
&lt;p>A tabela abaixo resume como escolher os esquemas conforme a finalidade:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Nome do Esquema&lt;/th>
&lt;th style="text-align:left">Tipo de Dados Adequado&lt;/th>
&lt;th style="text-align:left">Casos de Uso Recomendados&lt;/th>
&lt;th style="text-align:left">Características&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>BFV / BGV&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Inteiros (Integer)&lt;/td>
&lt;td style="text-align:left">Cálculos estatísticos exatos, agregação de dados financeiros, buscas em DB&lt;/td>
&lt;td style="text-align:left">Alto rendimento via loteamento SIMD&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>CKKS&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Números Reais (Real/Complex)&lt;/td>
&lt;td style="text-align:left">Aprendizado de Máquina (DNN, regressão logística), processamento de sinais&lt;/td>
&lt;td style="text-align:left">Aceleração via cálculo aproximado, reescalonamento&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>TFHE&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Valores Booleanos (Boolean)&lt;/td>
&lt;td style="text-align:left">Circuitos lógicos arbitrários, buscas por strings, avaliação de funções não lineares&lt;/td>
&lt;td style="text-align:left">Bootstrapping super-rápido (escala de milissegundos)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="6-prática-bibliotecas-de-fhe-e-código-conceitual">6. Prática: Bibliotecas de FHE e Código Conceitual
&lt;/h2>&lt;p>Atualmente, existem inúmeras bibliotecas de código aberto que permitem usar a FHE sem necessitar de conhecimento profundo em criptografia.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Microsoft SEAL (Simple Encrypted Arithmetic Library)&lt;/strong>: Biblioteca em C++ com suporte para os esquemas BFV, BGV e CKKS. É um dos padrões da indústria. O &lt;strong>TenSEAL&lt;/strong>, seu wrapper em Python, é popular entre engenheiros de IA.&lt;/li>
&lt;li>&lt;strong>Zama (Concrete)&lt;/strong>: Framework baseado em TFHE. Pode ser codificado em Rust/Python e oferece recursos (Concrete ML) para compilar modelos PyTorch existentes para executá-los em FHE.&lt;/li>
&lt;li>&lt;strong>OpenFHE&lt;/strong>: O sucessor do PALISADE, é uma biblioteca C++ abrangente que suporta todos os esquemas principais.&lt;/li>
&lt;/ul>
&lt;h3 id="exemplo-de-programação-fhe-usando-python-tenseal">Exemplo de Programação FHE usando Python (TenSEAL)
&lt;/h3>&lt;p>Abaixo, mostramos um exemplo conceitual em Python usando o esquema CKKS, em que vetores de números reais são somados e multiplicados enquanto permanecem criptografados.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">tenseal&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">ts&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1. Configuração do contexto (incluindo a geração das chaves)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Usando o esquema CKKS e configurando o grau do polinômio para 8192&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">context&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">context&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">SCHEME_TYPE&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">CKKS&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">poly_modulus_degree&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">8192&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">coeff_mod_bit_sizes&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">60&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">40&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">40&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">60&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">context&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">generate_galois_keys&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">context&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">global_scale&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="o">**&lt;/span>&lt;span class="mi">40&lt;/span> &lt;span class="c1"># Fator de escala para números reais&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2. Lado do cliente: Criptografia dos dados&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">vector1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mf">1.5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">vector2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mf">2.0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Convertendo o vetor em texto plano para um texto cifrado (Originalmente executado no cliente)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_v1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ckks_vector&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">context&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">vector1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_v2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ckks_vector&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">context&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">vector2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 3. Lado do servidor: Operações no estado criptografado (Proteção do Data in Use)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># O servidor não conhece os textos planos, mas consegue realizar a adição e a multiplicação&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_add&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_v1&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">enc_v2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_mul&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_v1&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">enc_v2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 4. Lado do cliente: Descriptografia do resultado&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Apenas o cliente que possui a chave secreta consegue ver o resultado&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">res_add&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_add&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decrypt&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">res_mul&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_mul&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decrypt&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Resultado da adição descriptografado: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">res_add&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Exemplo de saída: [3.5000001, 5.5000001, 7.5000002] (Uma pequena margem de erro por causa dos cálculos aproximados)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Resultado da multiplicação descriptografado: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">res_mul&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Exemplo de saída: [3.0000002, 7.5000005, 14.0000003]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Como pode ser visto no código acima, operações normais de operadores de Python como &lt;code>enc_v1 + enc_v2&lt;/code> podem ser sobrecarregadas para expressar cálculos entre textos cifrados de maneira intuitiva. No lado do servidor, as operações vetoriais são completadas sem que se conheça o conteúdo do vetor.&lt;/p>
&lt;hr>
&lt;h2 id="7-desafios-da-fhe-desempenho-e-aceleração-por-hardware">7. Desafios da FHE: Desempenho e Aceleração por Hardware
&lt;/h2>&lt;p>Embora a FHE forneça uma segurança teoricamente perfeita, o maior desafio na sua aplicação prática é a &lt;strong>&amp;ldquo;sobrecarga (overhead) de desempenho&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Sobrecarga computacional&lt;/strong>: Comparado ao cálculo em texto plano, o cálculo sobre um texto cifrado na CPU é milhares a dezenas de milhares de vezes mais lento. Multiplicar polinômios e realizar bootstrapping exige cálculos computacionais imensos, como FFT (Transformada Rápida de Fourier) e NTT (Transformada da Teoria dos Números).&lt;/li>
&lt;li>&lt;strong>Expansão de Dados (Ciphertext Expansion)&lt;/strong>: Um texto plano de alguns bytes, quando criptografado, pode aumentar de tamanho para alguns megabytes. Isso exerce forte pressão sobre a largura de banda de memória e da rede.&lt;/li>
&lt;/ol>
&lt;h3 id="abordagens-de-resolução-através-de-hardware">Abordagens de Resolução Através de Hardware
&lt;/h3>&lt;p>Para superar essa sobrecarga, esforços estão em andamento em todo o mundo para desenvolver aceleradores de hardware dedicados à FHE (suporte a ASIC, FPGA e GPU).&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Aceleração com GPU&lt;/strong>: Esforços para usar as potentes GPUs (como as da NVIDIA) a fim de paralelizar os cálculos de NTT ou o bootstrapping estão progredindo e relatam velocidades que são dezenas de vezes mais rápidas em comparação com as implementações baseadas em software (ex.: 100x.ai, o backend CUDA TFHE-rs da Zama).&lt;/li>
&lt;li>&lt;strong>Projeto DARPA DPRIVE&lt;/strong>: A Defense Advanced Research Projects Agency (DARPA) dos EUA, está conduzindo o &amp;ldquo;DPRIVE (Data Protection in Virtual Environments)&amp;rdquo;, um projeto focado no desenvolvimento de hardware exclusivo projetado para elevar a velocidade do cálculo da FHE a uma capacidade equivalente à velocidade de execução em texto plano (com overhead dentro de 10x), que conta com parceiros como Intel, Microsoft, Intellectual Ventures e afins.&lt;/li>
&lt;li>&lt;strong>O Surgimento da FPU (FHE Processing Unit)&lt;/strong>: Startups como Cornami e Optalysys têm se empenhado em construir chips dedicados à FHE usando arquiteturas de silício especiais ou tecnologias de computação óptica.&lt;/li>
&lt;/ul>
&lt;p>Num futuro próximo, poderemos presenciar a era em que as FPUs estejam incluídas como padrão em infraestruturas de servidores ou na nuvem, da mesma forma que as NPUs (Neural Processing Units) ocorrem na IA.&lt;/p>
&lt;hr>
&lt;h2 id="8-casos-de-uso-esperados">8. Casos de Uso Esperados
&lt;/h2>&lt;p>Hoje em dia, onde a FHE está alcançando uma velocidade em níveis práticos, são aguardadas inovações disruptivas nos seguintes campos:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Proteção à privacidade em análises genômicas e médicas&lt;/strong>:
Informações biológicas (dados de DNA) ou laudos e exames provindos de muitos hospitais diferentes poderão receber modelos de IA em conjunto pelas nuvens sob formatação FHE de estado permanente cifrado, o qual atende inteiramente os limites impostos pelas leis legislativas de conformidade (como a LGPD, HIPAA e GDPR). Esses esforços proporcionarão construções avançadas com diagnóstico e produção em tratamentos farmacêuticos precisos sobre patologias de tumores cancerosos e desenvolvimento de novas medicações sem riscos.&lt;/li>
&lt;li>&lt;strong>Verificação antifraude nas Instituições Financeiras e PLD (Prevenção à Lavagem de Dinheiro)&lt;/strong>:
Instituições financeiras em concorrência poderão verificar em mútuo auxílio o quadro dos extratos ou as referências transacionais de cada cliente sob encriptação, contendo integridade não visível para apontar enormes cadeias criminosas de fraude que praticam remessas desonestas entre bancos nas transferências. O que possibilita executar a chamada avaliação multi-bancos.&lt;/li>
&lt;li>&lt;strong>APIs de IA Seguras de Inferências Pessoais (MaaS: Model as a Service)&lt;/strong>:
Usuários usarão chaves particulares próprias (mensagens digitadas de comandos/prompt, rostos, fotos, imagens de íris, gravações da sua fala) e repassarão elas de maneira cifrada e inacessível a uma determinada aplicação de Inteligência Artificial para Inferência de Modelos de Linguagem (a exemplo de um modelo LLM igual o ChatGPT ou congêneres da tecnologia de processamento natural humano). O Fornecedor provedor detentor da IA despacha e fabrica formulações conclusivas não sabendo jamais qual era o dado ali originário de partida; remetendo sua solução redigida na total cifra. Desse modo erradica o abalo de &amp;ldquo;permitir o espião no treinamento indevido sob rastros dos detalhes expostos pelo indivíduo na internet privada e sensível&amp;rdquo;.&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="9-conclusão-o-futuro-da-criptografia-em-direção-ao-cálculo-invisível">9. Conclusão: O Futuro da Criptografia em Direção ao &amp;ldquo;Cálculo Invisível&amp;rdquo;
&lt;/h2>&lt;p>Assim como a invenção da criptografia de chave pública (como a RSA) na década de 1970 possibilitou a comunicação segura pela internet (como no HTTPS), a invenção da FHE por Craig Gentry é um dos marcos mais cruciais em toda a história criptográfica da humanidade.&lt;/p>
&lt;p>No presente, a Criptografia Totalmente Homomórfica (FHE) deu um salto dos laboratórios teóricos para o mundo real, entrando agora na etapa pela qual as corporações da Microsoft, IBM, Intel, Google, assim como uma quantidade de startups lutam firmemente em direção ao estado da comercialização tangível no sistema prático. O problema da quantidade do peso do tamanho expansível nos dados codificados ainda está contido no rol de entraves e desafios a transpor, mas à luz do requinte arquitetônico dos modelos e softwares matemáticos de algoritmo em sincronia contínua de aperfeiçoamento nos hardwares superacelerados tecnológicos, sua capacidade de melhoria atinge avanços velozes cujas expectativas superam a Lei de Moore.&lt;/p>
&lt;p>Daqui a poucos anos, a frase &amp;ldquo;processar e calcular enquanto os dados se encontram em criptografia resguardada&amp;rdquo; será desprovida da sensação da complexidade esotérica especial e rara e deve vir a ser consolidada na prática essencialmente como base obrigatória generalizada do mercado na segurança protetora das soluções da arquitetura pela nuvem de serviços mundiais atuais. Afinal, no palco dessa presente comunidade conectada (data-driven) embasada globalmente via bases contínuas digitais, a &lt;strong>FHE (Criptografia Totalmente Homomórfica)&lt;/strong> assume sua titularidade do suporte principal absoluto para a segurança nas próximas fronteiras do amanhã que concretiza a conciliação unânime final das realidades — da máxima e rigorosa preservação do resguardo íntimo da &lt;strong>privacidade e paralelamente de suas inúmeras flexibilidades promissoras no uso interconectado nos dados&lt;/strong>.&lt;/p></description></item></channel></rss>