<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Quantum Computing on kenji.blog</title><link>http://kenji.blog/pt/categories/quantum-computing/</link><description>Recent content in Quantum Computing on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>pt</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 20:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/pt/categories/quantum-computing/index.xml" rel="self" type="application/rss+xml"/><item><title>Uma Super Introdução à Programação Quântica usando Qiskit</title><link>http://kenji.blog/pt/p/qiskit-quantum-programming-intro/</link><pubDate>Fri, 11 Sep 2026 20:00:00 +0900</pubDate><guid>http://kenji.blog/pt/p/qiskit-quantum-programming-intro/</guid><description>&lt;img src="http://kenji.blog/p/qiskit-quantum-programming-intro/img/eyecatch.jpg" alt="Featured image of post Uma Super Introdução à Programação Quântica usando Qiskit" />&lt;h2 id="1-introdução">1. Introdução
&lt;/h2>&lt;p>Os computadores modernos (computadores clássicos) mudaram drasticamente as nossas vidas, apoiando todos os aspectos da sociedade através de seu alto poder computacional. No entanto, sabe-se que para certos problemas específicos (como a fatoração de números primos gigantescos, a simulação de estruturas moleculares complexas, problemas de otimização, etc.), mesmo os supercomputadores mais avançados da atualidade precisariam de um tempo superior à idade do universo para resolvê-los.&lt;/p>
&lt;p>O que possui o potencial para quebrar esses &amp;ldquo;limites dos computadores clássicos&amp;rdquo; é o &lt;strong>computador quântico (Quantum Computer)&lt;/strong>. Acredita-se que, utilizando propriedades fascinantes da mecânica quântica (sobreposição e emaranhamento quântico) como recursos computacionais, é possível acelerar drasticamente a resolução de determinados problemas.&lt;/p>
&lt;p>Neste artigo, daremos o primeiro passo no mundo da programação quântica utilizando o &lt;strong>Qiskit&lt;/strong>, um framework de computação quântica de código aberto fornecido pela IBM. Este é um guia de introdução extremamente detalhado, cobrindo tudo de forma minuciosa, desde os fundamentos da física e da matemática, até escrever código na prática em Python e executar circuitos quânticos em um simulador.&lt;/p>
&lt;hr>
&lt;h2 id="2-fundamentos-de-física-e-matemática-que-sustentam-a-computação-quântica">2. Fundamentos de Física e Matemática que Sustentam a Computação Quântica
&lt;/h2>&lt;p>Para compreender a programação quântica, é necessário primeiro entender os conceitos fundamentais da mecânica quântica. Aqui, explicaremos três pilares importantes: qubits, sobreposição e emaranhamento quântico.&lt;/p>
&lt;h3 id="21-bits-clássicos-e-qubits-quantum-bits">2.1 Bits Clássicos e Qubits (Quantum bits)
&lt;/h3>&lt;p>A unidade de informação de um computador clássico é o &amp;ldquo;bit (Bit)&amp;rdquo;. Um bit sempre assume um de dois estados: &lt;code>0&lt;/code> ou &lt;code>1&lt;/code>.&lt;/p>
&lt;p>Por outro lado, a menor unidade de informação de um computador quântico é chamada de &lt;strong>qubit (Qubit: Quantum bit)&lt;/strong>. Um qubit não só pode assumir o estado &lt;code>0&lt;/code> ou &lt;code>1&lt;/code>, mas também é capaz de &lt;strong>manter ambos os estados simultaneamente&lt;/strong>.&lt;/p>
&lt;p>Matematicamente, o estado de um qubit $|\psi\rangle$ é expresso como uma combinação linear (sobreposição) dos estados base $|0\rangle$ e $|1\rangle$.&lt;/p>
$$
|\psi\rangle = \alpha|0\rangle + \beta|1\rangle
$$
&lt;p>Aqui, $\alpha$ e $\beta$ são números complexos e representam as amplitudes de probabilidade de observar os estados $|0\rangle$ e $|1\rangle$, respectivamente. Com base nos princípios fundamentais da mecânica quântica, a soma das probabilidades deve ser 1, de modo que satisfaçam a seguinte condição de normalização:&lt;/p>
$$
|\alpha|^2 + |\beta|^2 = 1
$$
&lt;p>Isso significa que, quando este qubit é &amp;ldquo;medido (observado)&amp;rdquo;, a probabilidade de se obter $|0\rangle$ é $|\alpha|^2$ e a probabilidade de se obter $|1\rangle$ é $|\beta|^2$. O fato de que o estado é determinado apenas de forma probabilística antes da medição é a diferença crucial em relação aos bits clássicos.&lt;/p>
&lt;div class="mermaid">graph LR
A["Bit Clássico (Classical Bit)"] --> B["Estado determinado: 0 ou 1"]
C["Qubit (Quantum bit)"] --> D["Sobreposição: ambos 0 e 1"]
D --> E["O estado é determinado probabilisticamente pela medição"]&lt;/div>
&lt;h3 id="22-sobreposição-superposition">2.2 Sobreposição (Superposition)
&lt;/h3>&lt;p>Como mencionado anteriormente, o estado onde $|0\rangle$ e $|1\rangle$ estão misturados é chamado de &lt;strong>sobreposição (Superposition)&lt;/strong>.&lt;/p>
&lt;p>Por exemplo, quando um qubit está em um estado de sobreposição perfeitamente uniforme, temos $\alpha = \frac{1}{\sqrt{2}}$ e $\beta = \frac{1}{\sqrt{2}}$.&lt;/p>
$$
|\psi\rangle = \frac{1}{\sqrt{2}}|0\rangle + \frac{1}{\sqrt{2}}|1\rangle
$$
&lt;p>Quando medimos este estado, $|0\rangle$ e $|1\rangle$ são observados com 50% de probabilidade cada.
Se tivermos 2 qubits, podemos criar uma sobreposição de 4 estados: $|00\rangle, |01\rangle, |10\rangle, |11\rangle$. Com $n$ qubits, $2^n$ estados podem ser representados simultaneamente, e essa é uma das fontes do poder de processamento paralelo dos computadores quânticos.&lt;/p>
&lt;h3 id="23-emaranhamento-quântico-entanglement">2.3 Emaranhamento Quântico (Entanglement)
&lt;/h3>&lt;p>A propriedade mais poderosa e misteriosa da computação quântica é o &lt;strong>emaranhamento quântico (Entanglement)&lt;/strong>. Este fenômeno, que Einstein chamou de &amp;ldquo;ação fantasmagórica à distância&amp;rdquo;, é a propriedade em que dois ou mais qubits se tornam fortemente interligados, de modo que quando o estado de um qubit é determinado, o estado do outro qubit é determinado instantaneamente, independentemente da distância física que os separe.&lt;/p>
&lt;p>Um dos mais famosos estados de emaranhamento quântico, o &amp;ldquo;Estado de Bell (Bell State)&amp;rdquo; $\Phi^+$, é expresso da seguinte forma:&lt;/p>
$$
|\Phi^+\rangle = \frac{|00\rangle + |11\rangle}{\sqrt{2}}
$$
&lt;p>Neste estado, os estados $|01\rangle$ e $|10\rangle$ não existem. Portanto, se o primeiro qubit for medido e resultar em $|0\rangle$, é certo que o segundo qubit também será $|0\rangle$, sem nem mesmo precisar medi-lo. Inversamente, se o primeiro for $|1\rangle$, o segundo também será necessariamente $|1\rangle$.&lt;/p>
&lt;hr>
&lt;h2 id="3-portas-lógicas-quânticas-quantum-logic-gates">3. Portas Lógicas Quânticas (Quantum Logic Gates)
&lt;/h2>&lt;p>Assim como computadores clássicos usam portas lógicas como AND, OR e NOT para realizar cálculos, os computadores quânticos usam &lt;strong>portas quânticas&lt;/strong> para manipular o estado dos qubits. Como um estado quântico é um vetor, uma porta quântica é representada como uma &amp;ldquo;matriz unitária&amp;rdquo; que atua nesse vetor.&lt;/p>
&lt;h3 id="31-portas-de-pauli-pauli-x-y-z">3.1 Portas de Pauli (Pauli-X, Y, Z)
&lt;/h3>&lt;p>As portas de Pauli são operações básicas em um único qubit.&lt;/p>
&lt;p>&lt;strong>・Porta Pauli-X (Porta NOT)&lt;/strong>
Equivale à porta NOT clássica. Inverte o estado $|0\rangle$ para $|1\rangle$, e $|1\rangle$ para $|0\rangle$. (Rotação de 180 graus em torno do eixo X na Esfera de Bloch).&lt;/p>
$$
X = \begin{pmatrix} 0 &amp; 1 \\ 1 &amp; 0 \end{pmatrix}
$$
&lt;p>&lt;strong>・Porta Pauli-Y&lt;/strong>
Realiza uma rotação de 180 graus em torno do eixo Y. Tem o efeito de inverter tanto a fase quanto o bit.&lt;/p>
$$
Y = \begin{pmatrix} 0 &amp; -i \\ i &amp; 0 \end{pmatrix}
$$
&lt;p>&lt;strong>・Porta Pauli-Z (Porta de inversão de fase)&lt;/strong>
Mantém o estado $|0\rangle$ como está, e inverte a fase (multiplica por $-1$) do estado $|1\rangle$. (Rotação de 180 graus em torno do eixo Z).&lt;/p>
$$
Z = \begin{pmatrix} 1 &amp; 0 \\ 0 &amp; -1 \end{pmatrix}
$$
&lt;h3 id="32-porta-hadamard-hadamard-gate">3.2 Porta Hadamard (Hadamard Gate)
&lt;/h3>&lt;p>A porta Hadamard (Porta H) é uma porta extremamente importante que converte estados definidos ($|0\rangle$ ou $|1\rangle$) em estados de sobreposição.&lt;/p>
$$
H = \frac{1}{\sqrt{2}}
\begin{pmatrix}
1 &amp; 1 \\
1 &amp; -1
\end{pmatrix}
$$
&lt;p>Aplicando a porta H a $|0\rangle$, obtemos $|+\rangle$, que é um estado de sobreposição uniforme.&lt;/p>
$$
H|0\rangle = \frac{1}{\sqrt{2}}|0\rangle + \frac{1}{\sqrt{2}}|1\rangle = |+\rangle
$$
&lt;h3 id="33-portas-de-fase-phase-gates">3.3 Portas de Fase (Phase Gates)
&lt;/h3>&lt;p>A porta de fase é uma generalização da porta Z, que gira a fase do estado $|1\rangle$ por um ângulo especificado $\theta$.&lt;/p>
$$
P(\theta) = \begin{pmatrix} 1 &amp; 0 \\ 0 &amp; e^{i\theta} \end{pmatrix}
$$
&lt;p>Exemplos típicos são a porta S ($\theta = \pi/2$) e a porta T ($\theta = \pi/4$).&lt;/p>
&lt;h3 id="34-porta-cnot-controlled-not-gate">3.4 Porta CNOT (Controlled-NOT Gate)
&lt;/h3>&lt;p>A porta CNOT (Porta CX) opera entre dois qubits e é essencial para criar emaranhamento quântico. Consiste em um &amp;ldquo;bit de controle (Control)&amp;rdquo; e um &amp;ldquo;bit alvo (Target)&amp;rdquo;.&lt;/p>
&lt;p>Aplica-se uma porta X (operação NOT) no bit alvo apenas se o bit de controle for $|1\rangle$, e não faz nada se o bit de controle for $|0\rangle$.&lt;/p>
$$
CNOT = \begin{pmatrix}
1 &amp; 0 &amp; 0 &amp; 0 \\
0 &amp; 1 &amp; 0 &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1 \\
0 &amp; 0 &amp; 1 &amp; 0
\end{pmatrix}
$$
&lt;hr>
&lt;h2 id="4-noções-básicas-e-configuração-do-ambiente-qiskit">4. Noções Básicas e Configuração do Ambiente Qiskit
&lt;/h2>&lt;p>A partir daqui, vamos de fato usar Python e Qiskit para escrever um programa quântico.&lt;/p>
&lt;h3 id="41-o-que-é-o-qiskit">4.1 O que é o Qiskit?
&lt;/h3>&lt;p>&lt;strong>Qiskit&lt;/strong> é um kit de desenvolvimento de software (SDK) de código aberto para computação quântica desenvolvido pela IBM Quantum. Ele permite construir circuitos quânticos intuitivamente usando Python e executá-los em um simulador local ou em um computador quântico real da IBM através da nuvem.&lt;/p>
&lt;h3 id="42-como-instalar">4.2 Como Instalar
&lt;/h3>&lt;p>Para usar o Qiskit, é necessário um ambiente Python. Você pode instalar o Qiskit e pacotes relacionados (como simuladores e bibliotecas de visualização) com o seguinte comando:&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pip install qiskit qiskit-aer qiskit-ibm-runtime matplotlib pylatexenc
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="43-fluxo-básico-de-programação">4.3 Fluxo Básico de Programação
&lt;/h3>&lt;p>A programação quântica usando o Qiskit prossegue principalmente nas seguintes etapas:&lt;/p>
&lt;div class="mermaid">graph TD
A["1. Construção do Circuito (Build)"] --> B["2. Compilação/Transpilação (Compile)"]
B --> C["3. Execução (Execute)"]
C --> D["4. Análise e Visualização dos Resultados (Analyze)"]&lt;/div>
&lt;ol>
&lt;li>&lt;strong>Construção do Circuito&lt;/strong>: Criar um objeto &lt;code>QuantumCircuit&lt;/code> e adicionar portas a ele.&lt;/li>
&lt;li>&lt;strong>Compilação&lt;/strong>: Otimizar o circuito de acordo com o backend (hardware real ou simulador) onde será executado.&lt;/li>
&lt;li>&lt;strong>Execução&lt;/strong>: Enviar o trabalho (job) para o backend e obter os resultados.&lt;/li>
&lt;li>&lt;strong>Análise&lt;/strong>: Plotar um histograma dos resultados da medição, etc.&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="5-prática-construindo-um-circuito-para-criar-um-estado-de-bell-emaranhamento-quântico">5. Prática: Construindo um Circuito para Criar um Estado de Bell (Emaranhamento Quântico)
&lt;/h2>&lt;p>Vamos agora usar o Qiskit para criar na prática o &amp;ldquo;emaranhamento quântico (Estado de Bell)&amp;rdquo; que aprendemos na teoria. O estado alvo é $|\Phi^+\rangle = \frac{|00\rangle + |11\rangle}{\sqrt{2}}$.&lt;/p>
&lt;h3 id="51-projeto-do-circuito">5.1 Projeto do Circuito
&lt;/h3>&lt;p>Para criar o estado de Bell, seguiremos os seguintes passos:&lt;/p>
&lt;ol>
&lt;li>Preparar 2 qubits (ambos inicialmente no estado $|0\rangle$).&lt;/li>
&lt;li>Aplicar a porta Hadamard (H) ao primeiro qubit para colocá-lo em um estado de sobreposição.&lt;/li>
&lt;li>Aplicar a porta CNOT, usando o primeiro qubit como &amp;ldquo;bit de controle&amp;rdquo; e o segundo qubit como &amp;ldquo;bit alvo&amp;rdquo;.&lt;/li>
&lt;li>Realizar a medição (Measure) para ler os resultados.&lt;/li>
&lt;/ol>
&lt;h3 id="52-implementação-do-código-em-pythonqiskit">5.2 Implementação do Código em Python/Qiskit
&lt;/h3>&lt;p>Vejamos agora o código real.&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;/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">numpy&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">np&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">qiskit&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">QuantumCircuit&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">transpile&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">qiskit_aer&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">Aer&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">qiskit.visualization&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">plot_histogram&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">matplotlib.pyplot&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">plt&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. Inicialização do Circuito&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Criar um circuito quântico com 2 qubits e 2 bits clássicos&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">qc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">QuantumCircuit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&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"># 2. Aplicação da porta H&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Aplicar a porta Hadamard ao qubit 0 (q0)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">h&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">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"># 3. Aplicação da porta CNOT&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Aplicar CNOT usando q0 como bit de controle e q1 como bit alvo&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cx&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&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"># 4. Medição&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Medir os qubits 0 e 1, e escrever os resultados nos bits clássicos 0 e 1, respectivamente&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">measure&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&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"># Desenhar o diagrama do circuito (usando matplotlib)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># qc.draw(&amp;#39;mpl&amp;#39;)&lt;/span>
&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="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">draw&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Ao executar este código, o seguinte diagrama de circuito quântico será exibido em arte ASCII no console:&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> ┌───┐ ┌─┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">q_0: ┤ H ├──■──┤M├───
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └───┘┌─┴─┐└╥┘┌─┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">q_1: ─────┤ X ├─╫─┤M├
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └───┘ ║ └╥┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">c: 2/═══════════╩══╩═
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 0 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;code>H&lt;/code> representa a porta Hadamard, a combinação de &lt;code>■&lt;/code> e &lt;code>X&lt;/code> representa a porta CNOT, e &lt;code>M&lt;/code> representa a medição.&lt;/p>
&lt;h3 id="53-execução-no-simulador-e-interpretação-dos-resultados">5.3 Execução no Simulador e Interpretação dos Resultados
&lt;/h3>&lt;p>Em seguida, executaremos este circuito no simulador de alto desempenho da IBM, &lt;code>Aer&lt;/code>, e verificaremos os resultados.&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;/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="c1"># Obter o backend do simulador Aer&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">simulator&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Aer&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_backend&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;qasm_simulator&amp;#39;&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"># Transpilar (otimizar) o circuito para o simulador&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">compiled_circuit&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">transpile&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">qc&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">simulator&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"># Executar o circuito (aqui, realizamos 1000 execuções ou &amp;#34;shots&amp;#34;)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">job&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">simulator&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">run&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">compiled_circuit&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">shots&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">1000&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"># Obter o resultado&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">job&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">result&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"># Obter a contagem de vezes que cada estado foi observado&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">counts&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">result&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_counts&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">compiled_circuit&lt;/span>&lt;span class="p">)&lt;/span>
&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="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">Resultados da medição:&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">counts&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"># Plotar o histograma&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># plot_histogram(counts)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># plt.show()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;strong>Interpretação dos Resultados&lt;/strong>&lt;/p>
&lt;p>A saída do console deve ser algo semelhante a isto:
&lt;code>Resultados da medição: {'00': 495, '11': 505}&lt;/code>
(&lt;em>Nota: como as probabilidades são aleatórias, os números variam ligeiramente a cada execução&lt;/em>)&lt;/p>
&lt;p>Em um ambiente de simulação ideal, os resultados da medição mostrarão &lt;code>00&lt;/code> e &lt;code>11&lt;/code> sendo observados com cerca de 50% de probabilidade cada um, e &lt;code>01&lt;/code> e &lt;code>10&lt;/code> não serão observados em absoluto.
Isto corresponde perfeitamente à previsão teórica para o estado de Bell $|\Phi^+\rangle = \frac{|00\rangle + |11\rangle}{\sqrt{2}}$ que criamos. O &amp;ldquo;emaranhamento quântico&amp;rdquo; foi simulado com precisão, confirmando que se o primeiro qubit for 0, o segundo também será necessariamente 0, e se o primeiro for 1, o segundo também será necessariamente 1.&lt;/p>
&lt;p>No entanto, se for executado em um hardware quântico real (IBM Quantum Hardware), os estados &lt;code>01&lt;/code> ou &lt;code>10&lt;/code> podem ser levemente observados devido à influência de ruídos (decoerência quântica e erros de portas). Como reduzir esse ruído (correção de erros quânticos) é atualmente um dos maiores desafios no desenvolvimento de computadores quânticos.&lt;/p>
&lt;hr>
&lt;h2 id="6-escalando-para-algoritmos-mais-avançados">6. Escalando para Algoritmos Mais Avançados
&lt;/h2>&lt;p>A criação do estado de Bell pode ser considerada o &amp;ldquo;Hello World&amp;rdquo; da programação quântica. Ao nos desenvolvermos a partir daqui, podemos construir algoritmos poderosos que superam os computadores clássicos.&lt;/p>
&lt;h3 id="61-algoritmo-de-deutsch-jozsa-deutsch-jozsa-algorithm">6.1 Algoritmo de Deutsch-Jozsa (Deutsch-Jozsa Algorithm)
&lt;/h3>&lt;p>Este é um problema para determinar se uma dada função $f(x)$ é &amp;ldquo;constante&amp;rdquo; (sempre gera 0 ou sempre 1 independentemente da entrada) ou &amp;ldquo;balanceada&amp;rdquo; (gera 0 para metade das entradas e 1 para a outra metade).
Em um computador clássico, no pior dos casos, seriam necessárias $2^{n-1} + 1$ avaliações da função, mas usando o algoritmo de Deutsch-Jozsa, podemos usar o paralelismo quântico para determinar a resposta com &lt;strong>apenas 1 avaliação&lt;/strong>. Isto demonstra o padrão básico de algoritmos quânticos: inserir um estado de sobreposição e usar a interferência (Interference) para cancelar estados indesejados e amplificar a resposta desejada.&lt;/p>
&lt;h3 id="62-algoritmo-de-grover-grovers-algorithm">6.2 Algoritmo de Grover (Grover&amp;rsquo;s Algorithm)
&lt;/h3>&lt;p>Em um problema de busca onde procuramos por dados específicos em um banco de dados não ordenado de $N$ itens, um algoritmo clássico requer em média $N/2$ cálculos, enquanto o algoritmo de Grover pode encontrar os dados desejados em cerca de $\sqrt{N}$ vezes.
Este algoritmo usa uma caixa preta chamada &amp;ldquo;Oráculo (Oracle)&amp;rdquo; para inverter a fase da solução desejada e, em seguida, realiza uma &amp;ldquo;Amplificação de Amplitude (Amplitude Amplification)&amp;rdquo;, o que aumenta drasticamente a probabilidade de a solução desejada ser observada.&lt;/p>
&lt;div class="mermaid">graph TD
A["Inicialização (Sobreposição de todos os estados)"] --> B["Oráculo (Inversão da fase da resposta correta)"]
B --> C["Operador de difusão (Amplificação da amplitude por inversão em torno da média)"]
C --> D{"Alcançou uma probabilidade suficiente?"}
D -- "Não" --> B
D -- "Sim" --> E["Medição"]&lt;/div>
&lt;hr>
&lt;h2 id="7-conclusão-e-próximos-passos-no-aprendizado">7. Conclusão e Próximos Passos no Aprendizado
&lt;/h2>&lt;p>Neste artigo, explicamos detalhadamente, desde os conceitos fundamentais da computação quântica como sobreposição e emaranhamento quântico, passando pela manipulação de portas lógicas quânticas usando o Qiskit, até a construção, simulação prática de um estado de Bell e interpretação de seus resultados.&lt;/p>
&lt;p>O Qiskit é uma ferramenta poderosa que, por poder ser escrita em uma linguagem familiar como o Python, permite superar barreiras matemáticas e físicas para que você possa se concentrar na construção de algoritmos. Os computadores quânticos estão atualmente na era dos Dispositivos Quânticos Ruidosos de Escala Intermediária (NISQ: Noisy Intermediate-Scale Quantum), mas a pesquisa aplicada está avançando rapidamente ao redor do mundo em muitos campos, como Aprendizado de Máquina Quântico (Quantum Machine Learning), Simulação Química (Quantum Chemistry) e Criptografia.&lt;/p>
&lt;p>Por favor, aproveite esta oportunidade para criar por conta própria vários circuitos quânticos usando o Qiskit e tente executá-los em processadores reais do IBM Quantum. Você certamente poderá experimentar com as próprias mãos o paradigma da computação do futuro.&lt;/p>
&lt;h3 id="materiais-de-referência">Materiais de Referência
&lt;/h3>&lt;ul>
&lt;li>&lt;a class="link" href="https://qiskit.org/documentation/" target="_blank" rel="noopener"
>Documentação Oficial do Qiskit&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://qiskit.org/textbook/ja/preface.html" target="_blank" rel="noopener"
>Qiskit Textbook&lt;/a> - Um livro didático oficial recomendado para quem deseja aprender mais profundamente os fundamentos matemáticos e os algoritmos (disponível em vários idiomas).&lt;/li>
&lt;li>IBM Quantum Learning&lt;/li>
&lt;/ul>
&lt;p>Bem-vindo ao mundo quântico!&lt;/p></description></item><item><title>O que é Supremacia Quântica? As últimas tendências do Google e da IBM</title><link>http://kenji.blog/pt/p/what-is-quantum-supremacy-google-ibm/</link><pubDate>Fri, 11 Sep 2026 18:00:00 +0900</pubDate><guid>http://kenji.blog/pt/p/what-is-quantum-supremacy-google-ibm/</guid><description>&lt;img src="http://kenji.blog/p/what-is-quantum-supremacy-google-ibm/img/eyecatch.jpg" alt="Featured image of post O que é Supremacia Quântica? As últimas tendências do Google e da IBM" />&lt;h2 id="1-introdução-o-amanhecer-da-computação-quântica-e-a-supremacia-quântica">1. Introdução: O Amanhecer da Computação Quântica e a &amp;ldquo;Supremacia Quântica&amp;rdquo;
&lt;/h2>&lt;p>A computação quântica tem o potencial de resolver problemas complexos, que não podem ser resolvidos em um tempo realista por computadores clássicos (os PCs e supercomputadores que usamos diariamente hoje), aplicando a mecânica quântica, o princípio fundamental da física, ao processamento de informações. Este campo tem sido predominantemente de pesquisa teórica por muito tempo, mas nos últimos anos, o rápido avanço do hardware tem intensificado a competição pela sua aplicação prática.&lt;/p>
&lt;p>Nesse contexto, uma das palavras-chave que mais chamou a atenção foi &amp;ldquo;Supremacia Quântica&amp;rdquo; (Quantum Supremacy). Isso se refere ao momento em que um computador quântico demonstra uma capacidade de computação que supera a de um computador clássico em uma tarefa de cálculo específica. Neste artigo, partindo da definição rigorosa de supremacia quântica, explicaremos em detalhes o experimento do processador &amp;ldquo;Sycamore&amp;rdquo; do Google, que anunciou ter alcançado este marco pela primeira vez no mundo em 2019, as contra-argumentações e abordagens únicas da IBM em relação a isso, e o mais recente roteiro para a &amp;ldquo;Correção Quântica de Erros&amp;rdquo; (Quantum Error Correction: QEC) e a &amp;ldquo;Computação Quântica Tolerante a Falhas&amp;rdquo; (Fault-Tolerant Quantum Computing: FTQC), que são as maiores barreiras para a verdadeira aplicação prática, aprofundando-se nos aspectos técnicos e matemáticos.&lt;/p>
&lt;hr>
&lt;h2 id="2-antecedentes-teóricos-fundamentos-da-computação-quântica-e-classes-de-complexidade">2. Antecedentes Teóricos: Fundamentos da Computação Quântica e Classes de Complexidade
&lt;/h2>&lt;p>Para entender a supremacia quântica, é primeiro necessário entender os fundamentos matemáticos da computação quântica e seu posicionamento na teoria da complexidade computacional.&lt;/p>
&lt;h3 id="qubits-e-sobreposição">Qubits e Sobreposição
&lt;/h3>&lt;p>A menor unidade de informação em um computador clássico é o bit (0 ou 1), mas em um computador quântico, utiliza-se o qubit (Qubit). O estado de um único qubit $|\psi\rangle$ é representado por uma combinação linear complexa dos estados de base $|0\rangle$ e $|1\rangle$.&lt;/p>
$$
|\psi\rangle = \alpha|0\rangle + \beta|1\rangle
$$
&lt;p>Onde $\alpha, \beta \in \mathbb{C}$, e satisfaz a condição de normalização $|\alpha|^2 + |\beta|^2 = 1$. Esta propriedade é chamada de &amp;ldquo;Sobreposição&amp;rdquo; (Superposition).&lt;/p>
&lt;h3 id="emaranhamento-entanglement-e-produto-tensorial">Emaranhamento (Entanglement) e Produto Tensorial
&lt;/h3>&lt;p>Quando existem múltiplos qubits, o estado de todo o sistema é representado pelo produto tensorial dos espaços de estados dos qubits individuais. Um sistema de $n$ qubits é um vetor em um espaço de Hilbert $\mathcal{H}^{\otimes n}$ de $2^n$ dimensões.&lt;/p>
$$
|\Psi\rangle = \sum_{x \in \{0, 1\}^n} c_x |x\rangle
$$
&lt;p>Onde $\sum |c_x|^2 = 1$. O estado em que os qubits não são independentes entre si e o estado de um depende do outro é chamado de &amp;ldquo;Emaranhamento Quântico&amp;rdquo; (Quantum Entanglement). Isso dá aos computadores quânticos o potencial de processar simultaneamente um espaço de estados exponencialmente vasto.&lt;/p>
&lt;h3 id="definição-na-teoria-da-complexidade-computacional-da-supremacia-quântica">Definição na Teoria da Complexidade Computacional da Supremacia Quântica
&lt;/h3>&lt;p>Na teoria da complexidade computacional, a classe de problemas que um computador clássico pode resolver eficientemente (em tempo polinomial) é chamada de &lt;strong>BPP&lt;/strong> (Bounded-error Probabilistic Polynomial time). Por outro lado, a classe de problemas que um computador quântico pode resolver eficientemente é a &lt;strong>BQP&lt;/strong> (Bounded-error Quantum Polynomial time).&lt;/p>
&lt;p>A demonstração da supremacia quântica significa &amp;ldquo;executar uma tarefa específica incluída em BQP, mas não incluída em BPP (ou com uma probabilidade extremamente alta de não ser), em hardware quântico real e superar a simulação por supercomputadores clássicos em termos de tempo e recursos&amp;rdquo;. Pode-se dizer que é uma tentativa histórica de refutar a tese de Church-Turing estendida (&amp;ldquo;todos os modelos de computação fisicamente realizáveis podem ser simulados eficientemente por uma máquina de Turing probabilística em tempo polinomial&amp;rdquo;) por meio de um experimento físico.&lt;/p>
&lt;hr>
&lt;h2 id="3-2019-demonstração-da-supremacia-quântica-pelo-google">3. 2019: Demonstração da Supremacia Quântica pelo Google
&lt;/h2>&lt;p>Em outubro de 2019, a equipe do Google Quantum AI anunciou na revista científica &amp;ldquo;Nature&amp;rdquo; que havia alcançado a supremacia quântica usando o processador supercondutor de 53 qubits &amp;ldquo;Sycamore&amp;rdquo;.&lt;/p>
&lt;h3 id="arquitetura-do-processador-sycamore">Arquitetura do Processador Sycamore
&lt;/h3>&lt;p>O processador Sycamore consiste em 54 qubits supercondutores do tipo Transmon dispostos em uma grade bidimensional (no experimento, 53 foram usados devido ao mau funcionamento de um). Acopladores variáveis (Tunable Couplers) foram colocados entre qubits adjacentes, realizando portas de 2 qubits (um híbrido de portas iSWAP e portas Z controladas) de alta velocidade e alta precisão.&lt;/p>
&lt;div class="mermaid">graph TD
A["Entrada de Algoritmo Quântico"] --> B["Processador Sycamore (53 Qubits)"]
B --> C["Aplicar Portas Quânticas Aleatórias"]
C --> D["Medir Estados Quânticos (Cadeias de Bits)"]
D --> E["Benchmarking de Entropia Cruzada (XEB)"]
E --> F["Verificar Supremacia Quântica"]&lt;/div>
&lt;h3 id="amostragem-de-circuito-quântico-aleatório-random-circuit-sampling-rcs">Amostragem de Circuito Quântico Aleatório (Random Circuit Sampling: RCS)
&lt;/h3>&lt;p>A tarefa escolhida pelo Google foi a &amp;ldquo;amostragem de circuito quântico aleatório&amp;rdquo;. Isso envolve a aplicação de portas de um único qubit e portas de dois qubits escolhidas aleatoriamente ao longo de vários ciclos (profundidade $m$) e, em seguida, a realização de amostragem a partir da distribuição de probabilidade das cadeias de bits obtidas medindo o estado final.&lt;/p>
&lt;p>A probabilidade de uma cadeia de bits $x$ ser produzida por um circuito quântico aleatório ideal (sem ruído) não é uma distribuição uniforme, mas mostra um padrão semelhante a franjas de interferência chamado distribuição de Porter-Thomas. Para amostrar dessa distribuição em um computador clássico, é necessária a simulação de todo o vetor de estado, e a complexidade computacional aumenta exponencialmente com o número de qubits $n$ e a profundidade do circuito $m$.&lt;/p>
&lt;h3 id="avaliação-de-fidelidade-fidelity-benchmarking-de-entropia-cruzada-linear-xeb">Avaliação de Fidelidade (Fidelity): Benchmarking de Entropia Cruzada Linear (XEB)
&lt;/h3>&lt;p>Para provar que os resultados do experimento não eram mero ruído, mas os resultados de cálculos quânticos reais, o Google usou o benchmarking de entropia cruzada linear (Linear Cross-Entropy Benchmarking: XEB). Eles calcularam a probabilidade ideal $P(x_i)$ do circuito para a cadeia de bits $x_i$ obtida no experimento usando um computador clássico e calcularam a fidelidade $\mathcal{F}_{\text{XEB}}$ com a seguinte fórmula:&lt;/p>
$$
\mathcal{F}_{\text{XEB}} = 2^n \langle P(x_i) \rangle_{i} - 1
$$
&lt;p>Se $\mathcal{F}_{\text{XEB}}$ for 0, significa ruído puro, e se for 1, significa um processador quântico ideal sem ruído. O processador Sycamore alcançou $\mathcal{F}_{\text{XEB}} \approx 0.002$ (0,2%) em um circuito de profundidade 20. Embora pareça baixo à primeira vista, é um valor estatisticamente significativo maior que zero, sendo uma conquista impressionante de controle de um espaço de estados de $2^{53} \approx 9 \times 10^{15}$.&lt;/p>
&lt;p>A taxa de erro geral foi modelada de forma aproximada como o produto de erros de portas individuais, erros de medição, etc.&lt;/p>
$$
\mathcal{F} \approx (1 - e_1)^{N_1}(1 - e_2)^{N_2} \cdots \approx \prod_{g \in 1Q} (1 - e_g) \prod_{g \in 2Q} (1 - e_g) \prod_{q} (1 - e_{RO})
$$
&lt;p>（※ Onde $e_g$ é o erro da porta e $e_{RO}$ é o erro de medição）&lt;/p>
&lt;p>O Google argumentou que levaria cerca de 10.000 anos para simular esse circuito em um supercomputador clássico (Summit). Em contraste, o Sycamore completou a amostragem em apenas 200 segundos.&lt;/p>
&lt;hr>
&lt;h2 id="4-a-contra-argumentação-da-ibm-da-supremacia-para-a-utilidade-utility">4. A Contra-argumentação da IBM: Da &amp;ldquo;Supremacia&amp;rdquo; para a &amp;ldquo;Utilidade&amp;rdquo; (Utility)
&lt;/h2>&lt;p>O anúncio do Google chocou o mundo, mas a IBM, que desenvolveu o maior supercomputador do mundo, o &amp;ldquo;Summit&amp;rdquo;, e que também lidera o desenvolvimento de computadores quânticos, publicou rapidamente um artigo refutando essa afirmação.&lt;/p>
&lt;h3 id="melhoria-da-simulação-clássica-pela-contração-de-redes-tensoriais">Melhoria da Simulação Clássica pela Contração de Redes Tensoriais
&lt;/h3>&lt;p>O núcleo da contra-argumentação da IBM era que &amp;ldquo;a otimização de algoritmos e recursos no lado do computador clássico foi insuficiente&amp;rdquo;. O Google fez uma estimativa de 10.000 anos presumindo um simulador de vetor de estado que calcula diretamente a evolução temporal da equação de Schrödinger, mas a IBM apontou que o tempo de simulação poderia ser drasticamente reduzido pelo uso de um método chamado &amp;ldquo;Redes Tensoriais&amp;rdquo; (Tensor Network).&lt;/p>
&lt;p>Nas redes tensoriais, as operações das portas do circuito quântico são representadas como operações de matrizes multidimensionais (tensores), e a ordem de &amp;ldquo;contração&amp;rdquo; (Contraction) da rede é otimizada. Além disso, eles argumentaram que, se a enorme capacidade de armazenamento de 250 PB do Summit (uma hierarquia de discos e memória) fosse totalmente utilizada, uma simulação de maior precisão seria possível em apenas &amp;ldquo;dois dias e meio&amp;rdquo;, mantendo todo o vetor de estado.&lt;/p>
&lt;h3 id="vantagem-quântica-quantum-advantage-e-utilidade-quântica-quantum-utility">Vantagem Quântica (Quantum Advantage) e Utilidade Quântica (Quantum Utility)
&lt;/h3>&lt;p>Impulsionada por esse debate, a tendência de toda a indústria mudou da fixação em &amp;ldquo;executar uma tarefa artificial impossível em meios clássicos (Supremacia)&amp;rdquo; para &amp;ldquo;demonstrar uma vantagem substancial sobre a abordagem clássica em problemas úteis do mundo real (Vantagem Quântica)&amp;rdquo;, e ainda mais para a fase em que &amp;ldquo;os computadores quânticos funcionam como uma nova ferramenta para a descoberta científica (Utilidade Quântica)&amp;rdquo;.&lt;/p>
&lt;p>A própria IBM evita o termo &amp;ldquo;supremacia&amp;rdquo; e propôs o &amp;ldquo;Volume Quântico&amp;rdquo; (Quantum Volume) e &amp;ldquo;CLOPS (Circuit Layer Operations Per Second)&amp;rdquo; como indicadores de desempenho abrangentes para processadores quânticos, promovendo o desenvolvimento com ênfase no equilíbrio entre a escala e a qualidade do hardware.&lt;/p>
&lt;div class="mermaid">timeline
title "A Evolução dos Marcos Quânticos"
2019 : "Google Sycamore (53Q)" : "Anúncio de Supremacia Quântica"
2019 : "Refutação da IBM" : "Simulação no supercomputador Summit em 2,5 dias"
2021 : "IBM Eagle (127Q)" : "Quebrando a barreira dos 100 qubits"
2022 : "IBM Osprey (433Q)" : "Avanço na escala do processador"
2023 : "Google Surface Code" : "Escalando a correção de erros (d=3 para d=5)"
2023 : "Utilidade Quântica da IBM" : "Simulação de modelo de spin complexo em 127Q"
2024 : "Além" : "Era dos Qubits Lógicos e Mitigação de Erros"&lt;/div>
&lt;hr>
&lt;h2 id="5-a-próxima-fronteira-mitigação-de-erros-error-mitigation-e-correção-quântica-de-erros-qec">5. A Próxima Fronteira: Mitigação de Erros (Error Mitigation) e Correção Quântica de Erros (QEC)
&lt;/h2>&lt;p>Os computadores quânticos atuais são chamados de &amp;ldquo;NISQ (Noisy Intermediate-Scale Quantum)&amp;rdquo; e são suscetíveis a ruídos (erros devido à interação com o ambiente externo e controle imperfeito), de modo que, se cálculos longos forem executados, os resultados serão encobertos por ruídos. As abordagens para superar esse problema são amplamente divididas em &amp;ldquo;Mitigação de Erros&amp;rdquo; (Error Mitigation) e &amp;ldquo;Correção Quântica de Erros&amp;rdquo; (Quantum Error Correction).&lt;/p>
&lt;h3 id="mitigação-de-erros-error-mitigation">Mitigação de Erros (Error Mitigation)
&lt;/h3>&lt;p>A mitigação de erros é um método para remover o efeito do ruído do valor esperado do resultado do cálculo por meio de pós-processamento clássico, sem alterar o hardware quântico. Em 2023, a IBM demonstrou a &amp;ldquo;Utilidade Quântica&amp;rdquo; combinando o processador &amp;ldquo;Eagle&amp;rdquo; de 127 qubits com técnicas de mitigação de erros, como a &amp;ldquo;Extrapolação de Ruído Zero&amp;rdquo; (Zero-Noise Extrapolation: ZNE), para alcançar uma precisão superior ao método avançado de aproximação de rede tensorial na simulação da evolução temporal de modelos complexos de Ising.&lt;/p>
&lt;h3 id="correção-quântica-de-erros-qec-e-qubits-lógicos">Correção Quântica de Erros (QEC) e Qubits Lógicos
&lt;/h3>&lt;p>No entanto, para executar algoritmos arbitrariamente complexos (por exemplo, o algoritmo de fatoração de Shor ou cálculos de química quântica complexos) em última análise, a mitigação de erros por si só não é suficiente, e a &amp;ldquo;Correção Quântica de Erros&amp;rdquo; (QEC), que detecta e corrige erros dinamicamente, é indispensável.&lt;/p>
&lt;p>A principal abordagem em QEC é o &amp;ldquo;Código de Superfície&amp;rdquo; (Surface Code). Este é um método em que vários qubits físicos (qubits de dados) são dispostos em uma grade bidimensional, e qubits de medição (qubits de ancila) são colocados entre eles para realizar verificações de paridade contínuas chamadas &amp;ldquo;Estabilizadores&amp;rdquo; (Stabilizers).&lt;/p>
&lt;div class="mermaid">graph LR
Q1["Qubit de Dados (Dados)"] --- M1["Medir Estabilizador X (Ancila)"]
Q2["Qubit de Dados (Dados)"] --- M1
Q3["Qubit de Dados (Dados)"] --- M2["Medir Estabilizador Z (Ancila)"]
Q4["Qubit de Dados (Dados)"] --- M2
M1 --> EC["Decodificação de Síndrome de Erro (Clássico)"]
M2 --> EC
EC --> LQ["Atualização de Estado do Qubit Lógico"]&lt;/div>
&lt;h4 id="teorema-do-limiar-threshold-theorem-e-distância-d">Teorema do Limiar (Threshold Theorem) e Distância $d$
&lt;/h4>&lt;p>Existe um &amp;ldquo;Teorema do Limiar&amp;rdquo; para a correção quântica de erros. Quando a taxa de erro $p$ dos qubits físicos está abaixo de um determinado limiar $p_{th}$ (em torno de 1% para o código de superfície), a taxa de erro lógico $p_L$ pode ser reduzida exponencialmente aumentando a distância (Distance) do código $d$ (alocando mais qubits físicos a um qubit lógico).&lt;/p>
&lt;p>A fórmula de aproximação para a taxa de erro lógico é expressa da seguinte forma:&lt;/p>
$$
p_L \approx \Lambda \left( \frac{p}{p_{th}} \right)^{\frac{d+1}{2}}
$$
&lt;p>Onde $\Lambda$ é uma constante. Se $p &lt; p_{th}$, quanto maior o valor de $d$, menor será $p_L$. No entanto, se $p > p_{th}$, o aumento do número de qubits físicos acumula mais ruído, piorando a taxa de erro lógico.&lt;/p>
&lt;h4 id="marco-do-google-em-2023-demonstração-de-redução-de-erros-ampliando-a-distância">Marco do Google em 2023: Demonstração de Redução de Erros Ampliando a Distância
&lt;/h4>&lt;p>Em fevereiro de 2023, o Google publicou um artigo monumental na &amp;ldquo;Nature&amp;rdquo;. Eles usaram seu processador Sycamore de 3ª geração para demonstrar, pela primeira vez no mundo, que ao estender a distância do código de superfície de $d=3$ (usando 17 qubits físicos) para $d=5$ (usando 49 qubits físicos), a taxa de erro lógico diminuiu ligeiramente de 3,028% para 2,914%.&lt;/p>
&lt;p>Isso significa que eles entraram no regime $p &lt; p_{th}$, indicando a conclusão da mais importante Prova de Conceito (Proof of Concept) em direção à FTQC, onde o desempenho melhora à medida que o número de qubits físicos aumenta.&lt;/p>
&lt;hr>
&lt;h2 id="6-roteiro-e-perspectivas-para-ftqc-computação-quântica-tolerante-a-falhas">6. Roteiro e Perspectivas para FTQC (Computação Quântica Tolerante a Falhas)
&lt;/h2>&lt;p>Embora o Google e a IBM adotem arquiteturas e abordagens diferentes, eles estão envolvidos em uma competição acirrada de desenvolvimento em direção ao seu objetivo final: a FTQC (Fault-Tolerant Quantum Computing).&lt;/p>
&lt;h3 id="a-abordagem-da-ibm-modularidade-e-grade-heavy-hex">A Abordagem da IBM: Modularidade e Grade Heavy-Hex
&lt;/h3>&lt;p>A IBM está se concentrando em aumentar a escala de seus processadores em paralelo com a redução rigorosa da taxa de erro. Enquanto desafiam os limites de chips individuais com &amp;ldquo;Eagle (127Q)&amp;rdquo;, &amp;ldquo;Osprey (433Q)&amp;rdquo; e &amp;ldquo;Condor (1121Q)&amp;rdquo;, eles anunciaram uma arquitetura modular chamada &amp;ldquo;Quantum System Two&amp;rdquo;. Além disso, para a topologia de acoplamento dos qubits, eles adotaram uma &amp;ldquo;Grade Heavy-Hex&amp;rdquo;, que reduz o crosstalk (interferência) indesejado e melhora a estabilidade. A estratégia da IBM é uma abordagem híbrida: buscar a utilidade a curto prazo por meio da mitigação avançada de erros, ao mesmo tempo em que introduz a QEC em etapas.&lt;/p>
&lt;h3 id="a-abordagem-do-google-melhoria-da-qualidade-dos-qubits-lógicos">A Abordagem do Google: Melhoria da Qualidade dos Qubits Lógicos
&lt;/h3>&lt;p>A estratégia do Google dá maior ênfase em reduzir drasticamente a taxa de erro de um único qubit lógico (por exemplo, reduzindo para $10^{-6}$), em vez de aumentar rapidamente o número de qubits físicos. Com base nisso, eles visam estabelecer tecnologia de transferência de estados quânticos entre módulos (Interconexões Quânticas) em direção a um sistema em grande escala que opera milhares a dezenas de milhares de qubits físicos em paralelo.&lt;/p>
&lt;p>A implementação de protocolos para executar portas não Clifford, como a destilação de estados mágicos (Magic State Distillation), de maneira tolerante a falhas será um grande obstáculo tecnológico no futuro. Diz-se que a execução do algoritmo de Shor na prática para decifrar a criptografia RSA de 2048 bits exigirá milhares de qubits lógicos com uma taxa de erro de $10^{-8}$ ou inferior, o que se traduz em milhões a dezenas de milhões de qubits físicos, o que indica que o caminho ainda é longo.&lt;/p>
&lt;hr>
&lt;h2 id="7-conclusão">7. Conclusão
&lt;/h2>&lt;p>A &amp;ldquo;Supremacia Quântica&amp;rdquo; foi um marco importante na história dos computadores quânticos, provando fisicamente o potencial teórico das máquinas de computação. A demonstração do Google em 2019 e a refutação construtiva da IBM impulsionaram a indústria inteira de uma prova puramente teórica para a busca pela utilidade real (Utility) e, finalmente, para a era de engenharia de larga escala voltada à Computação Quântica Tolerante a Falhas (FTQC).&lt;/p>
&lt;p>Estamos atualmente testemunhando o período de transição de dispositivos NISQ ruidosos para dispositivos de qubits lógicos equipados com correção de erros. Nos próximos anos a décadas, a descoberta de novos materiais científicos, a revolução nos processos de descoberta de medicamentos e os avanços nos problemas de otimização se tornarão realidade junto com esta evolução do hardware quântico.&lt;/p>
&lt;p>Devemos continuar de olho nas tendências do Google e da IBM, bem como dos pesquisadores em todo o mundo, à medida que moldam a ciência da computação do futuro.&lt;/p></description></item><item><title>Como a blockchain e as criptomoedas mudarão na era pós-quântica?</title><link>http://kenji.blog/pt/p/post-quantum-blockchain-and-crypto/</link><pubDate>Fri, 11 Sep 2026 17:00:00 +0900</pubDate><guid>http://kenji.blog/pt/p/post-quantum-blockchain-and-crypto/</guid><description>&lt;img src="http://kenji.blog/p/post-quantum-blockchain-and-crypto/img/eyecatch.jpg" alt="Featured image of post Como a blockchain e as criptomoedas mudarão na era pós-quântica?" />&lt;h2 id="1-introdução-os-passos-da-era-pós-quântica-e-a-crise-da-blockchain">1. Introdução: Os passos da era pós-quântica e a crise da blockchain
&lt;/h2>&lt;p>Desde a criação do Bitcoin por Satoshi Nakamoto em 2009, a tecnologia blockchain cresceu para se tornar a base de sistemas financeiros e aplicativos em todo o mundo como um &amp;ldquo;livro-razão descentralizado e à prova de adulteração&amp;rdquo;. Essa segurança robusta é sustentada pela criptografia moderna, especificamente a &lt;strong>Criptografia de Chave Pública (Public Key Cryptography)&lt;/strong> e as &lt;strong>Funções Hash Criptográficas (Cryptographic Hash Functions)&lt;/strong>.&lt;/p>
&lt;p>Essas tecnologias criptográficas garantem a segurança com base na &amp;ldquo;dificuldade computacional&amp;rdquo; matemática, segundo a qual computadores clássicos (os PCs e supercomputadores que usamos atualmente) levariam um tempo equivalente à idade do universo para decifrá-las.&lt;/p>
&lt;p>No entanto, essa premissa está prestes a ser fundamentalmente derrubada pelo rápido desenvolvimento e implementação prática de &lt;strong>Computadores Quânticos (Quantum Computers)&lt;/strong>, a fronteira da física e da ciência da informação. Utilizando a &amp;ldquo;Superposição (Superposition)&amp;rdquo; e o &amp;ldquo;Emaranhamento Quântico (Entanglement)&amp;rdquo; exclusivos da mecânica quântica, os computadores quânticos exibem um poder computacional que supera os computadores clássicos convencionais em problemas matemáticos específicos, alcançando a chamada &amp;ldquo;Supremacia Quântica (Quantum Supremacy)&amp;rdquo;.&lt;/p>
&lt;p>Neste artigo, exploraremos detalhadamente, de uma perspectiva técnica e matemática, as ameaças específicas que a tecnologia blockchain enfrenta devido aos computadores quânticos. Também discutiremos a solução: as últimas tendências em &lt;strong>Criptografia Pós-Quântica (PQC: Post-Quantum Cryptography)&lt;/strong> e os cenários de transição para redes de criptoativos.&lt;/p>
&lt;hr>
&lt;h2 id="2-fundamentos-da-computação-quântica-e-duas-grandes-ameaças-à-blockchain">2. Fundamentos da computação quântica e duas grandes ameaças à blockchain
&lt;/h2>&lt;p>Os sistemas de blockchain atuais são compostos principalmente pelos dois elementos criptográficos a seguir, cada um exposto a diferentes ameaças de algoritmos quânticos.&lt;/p>
&lt;div class="mermaid">graph TD
A["Incrível poder de computação dos computadores quânticos"] --> B["Algoritmo de Shor (Shor's Algorithm)"]
A --> C["Algoritmo de Grover (Grover's Algorithm)"]
B --> D["Colapso da criptografia de chave pública (ECDSA/RSA/DSA)"]
C --> E["Impacto na função hash criptográfica (SHA-256)"]
D --> F["Identificação de chaves privadas de terceiros e falsificação de transações"]
E --> G["Vantagem na mineração PoW e ataques a alguns endereços"]
F --> H["Ameaça fatal e direta na blockchain"]
G --> I["Ameaça contornável por ajustes de algoritmo (ex: expansão do tamanho da chave)"]
style H fill:#ff9999,stroke:#cc0000,stroke-width:2px;
style I fill:#ffff99,stroke:#cccc00,stroke-width:2px;&lt;/div>
&lt;h3 id="21-fundamentos-e-dificuldade-computacional-da-criptografia-de-curva-elíptica-ecdsa">2.1. Fundamentos e dificuldade computacional da Criptografia de Curva Elíptica (ECDSA)
&lt;/h3>&lt;p>Muitas blockchains, incluindo Bitcoin e Ethereum, adotam o &lt;strong>Algoritmo de Assinatura Digital de Curva Elíptica (ECDSA: Elliptic Curve Digital Signature Algorithm)&lt;/strong> como seu algoritmo de assinatura digital. Especificamente, o Bitcoin usa uma curva elíptica com o parâmetro &lt;code>secp256k1&lt;/code>.&lt;/p>
&lt;p>A segurança da criptografia de curva elíptica depende da dificuldade computacional do &lt;strong>Problema do Logaritmo Discreto em Curvas Elípticas (ECDLP: Elliptic Curve Discrete Logarithm Problem)&lt;/strong>.
Uma curva elíptica é definida pela equação na forma padrão de Weierstrass a seguir:&lt;/p>
$$
y^2 \equiv x^3 + ax + b \pmod{p}
$$
&lt;p>No &lt;code>secp256k1&lt;/code> do Bitcoin, $a = 0, b = 7$, e $p$ é um número primo extremamente grande.
Seja $G$ o ponto base (ponto de referência) nesta curva, e $k$ a chave privada, que é um número inteiro gigante de 256 bits escolhido aleatoriamente. Neste caso, a chave pública $K$ é obtida pela adição (multiplicação escalar) do ponto base por $k$ vezes.&lt;/p>
$$
K = k \times G = \underbrace{G + G + \dots + G}_{k \text{ vezes}}
$$
&lt;p>Usar um computador clássico para calcular reversamente (encontrar o logaritmo discreto) a chave privada $k$ a partir da chave pública publicada $K$ e do ponto base $G$ leva um tempo computacional exponencial de $\mathcal{O}(\sqrt{p})$, mesmo usando os melhores algoritmos clássicos, como o método de fatoração rho de Pollard. Para uma chave de 256 bits, seriam necessárias cerca de $2^{128}$ operações, um nível impossível de resolver mesmo executando os supercomputadores atuais por bilhões de anos.&lt;/p>
&lt;h3 id="22-colapso-pelo-algoritmo-de-shor-shors-algorithm">2.2. Colapso pelo Algoritmo de Shor (Shor&amp;rsquo;s Algorithm)
&lt;/h3>&lt;p>No entanto, o &lt;strong>Algoritmo de Shor&lt;/strong>, publicado por Peter Shor em 1994, destruiu completamente essa premissa. O algoritmo de Shor foi originalmente proposto para resolver o problema de fatoração de inteiros (a base da criptografia RSA) em tempo polinomial, mas também pode ser aplicado ao problema do logaritmo discreto e ao problema do logaritmo discreto em curvas elípticas.&lt;/p>
&lt;p>O núcleo do algoritmo de Shor reside em sua capacidade de encontrar rapidamente o &amp;ldquo;Período (Period)&amp;rdquo; de uma função usando a &lt;strong>Transformada de Fourier Quântica (QFT: Quantum Fourier Transform)&lt;/strong>.&lt;/p>
$$
\text{Complexidade clássica} = \mathcal{O}(2^{n/2}) \quad (\text{onde } n \text{ é o comprimento em bits})
$$
$$
\text{Complexidade do algoritmo quântico} = \mathcal{O}(n^3)
$$
&lt;p>Dessa forma, o algoritmo de Shor reduz drasticamente o tempo exponencial para &lt;strong>Tempo Polinomial (Polynomial Time)&lt;/strong>. Se um computador quântico com qubits lógicos suficientes for concluído, será possível identificar a chave privada $k$ a partir de uma chave pública $K$ publicada na rede em minutos ou até segundos. Isso permite que os invasores obtenham facilmente as chaves privadas das carteiras de outras pessoas e assumam o controle total de seus fundos.&lt;/p>
&lt;h4 id="221-passo-a-passo-da-decodificação-do-ecdlp-com-o-algoritmo-de-shor">2.2.1 Passo a passo da decodificação do ECDLP com o Algoritmo de Shor
&lt;/h4>&lt;p>Vamos observar, passo a passo, o processo interno de como um computador quântico resolve o Problema do Logaritmo Discreto em Curvas Elípticas (ECDLP).&lt;/p>
&lt;p>Definição do problema: Em $K = k \times G$, $G$ e $K$ são conhecidos e queremos encontrar o número inteiro desconhecido $k$ (chave privada). Seja $N$ a ordem da curva elíptica.&lt;/p>
&lt;p>&lt;strong>Passo 1: Criação do estado de superposição&lt;/strong>
Primeiro, preparamos dois registradores quânticos e aplicamos uma porta Hadamard (Hadamard Gate) a cada um para criar um estado de superposição de todas as combinações de números inteiros possíveis.
&lt;/p>
$$
|\psi_1\rangle = \frac{1}{N} \sum_{x=0}^{N-1} \sum_{y=0}^{N-1} |x\rangle |y\rangle |0\rangle
$$
&lt;p>&lt;strong>Passo 2: Aplicação do oráculo quântico (avaliação da função)&lt;/strong>
Em seguida, usando um circuito quântico (oráculo) que realiza a adição de pontos na curva elíptica, calculamos a função $f(x, y) = x \times G + y \times K$ no terceiro registrador.
&lt;/p>
$$
|\psi_2\rangle = \frac{1}{N} \sum_{x=0}^{N-1} \sum_{y=0}^{N-1} |x\rangle |y\rangle |x \times G + y \times K\rangle
$$
&lt;p>
O ponto importante aqui é que, como $K = k \times G$, a função pode ser reescrita como $f(x, y) = (x + y \cdot k) \times G$.&lt;/p>
&lt;p>&lt;strong>Passo 3: Medição do terceiro registrador&lt;/strong>
A medição do terceiro registrador o colapsa para um determinado ponto $R$ na curva elíptica. Como resultado, o primeiro e o segundo registradores colapsam para uma superposição de pares $(x, y)$ que satisfazem $x + y \cdot k \equiv c \pmod{N}$ (onde $c$ é uma constante).
&lt;/p>
$$
|\psi_3\rangle = \frac{1}{\sqrt{N}} \sum_{y=0}^{N-1} |c - y \cdot k \pmod{N}\rangle |y\rangle
$$
&lt;p>&lt;strong>Passo 4: Aplicação da Transformada de Fourier Quântica (QFT)&lt;/strong>
Este estado possui uma periodicidade relacionada ao período $k$. Ao aplicar a Transformada de Fourier Quântica Inversa (Inverse QFT) a isso, causamos interferência de fase e convertemos a informação do período em amplitude.&lt;/p>
&lt;p>&lt;strong>Passo 5: Medição e pós-processamento clássico&lt;/strong>
Ao medir o primeiro e o segundo registradores, obtemos valores contendo informações sobre $k$ com alta probabilidade. Aplicando algoritmos clássicos de teoria dos números, como Frações Contínuas (Continued Fractions), aos valores medidos, a chave privada desconhecida $k$ pode ser perfeitamente identificada.&lt;/p>
&lt;p>O número de portas quânticas exigido para todo esse processo é $\mathcal{O}(\log^3 N)$, o que revela a chave privada a uma velocidade incomparável em relação à busca $\mathcal{O}(\sqrt{N})$ realizada por computadores clássicos.&lt;/p>
&lt;h3 id="23-o-algoritmo-de-grover-grovers-algorithm-e-o-impacto-nas-funções-hash">2.3. O Algoritmo de Grover (Grover&amp;rsquo;s Algorithm) e o impacto nas funções hash
&lt;/h3>&lt;p>Outra ameaça é o &lt;strong>Algoritmo de Grover&lt;/strong>, proposto por Lov Grover em 1996. Ele tem um impacto significativo nas funções hash (ex: SHA-256).&lt;/p>
&lt;p>Na blockchain, as funções hash são usadas para garantir a integridade dos dados, gerar endereços e servir como base para a &lt;strong>mineração PoW (Proof of Work)&lt;/strong> no Bitcoin. O cálculo reverso (cálculo de pré-imagem) de uma função hash pode ser visto como um &amp;ldquo;problema de busca em banco de dados não estruturado&amp;rdquo; no qual, para um valor de saída específico $y$, buscamos um valor de entrada $x$ tal que $H(x) = y$.&lt;/p>
&lt;p>Com computadores clássicos, para encontrar a resposta correta dentre $N$ possibilidades, é necessária uma média de $\frac{N}{2}$ tentativas, ou $N$ tentativas no pior dos casos. Ou seja, a complexidade é $\mathcal{O}(N)$.
No entanto, o algoritmo de Grover usa uma técnica quântica chamada &amp;ldquo;Amplificação de Amplitude (Amplitude Amplification)&amp;rdquo;. Ele amplifica repetidamente a amplitude de probabilidade do estado que é a resposta correta dentre todas as possibilidades em superposição, reduzindo assim o tempo de busca para a raiz quadrada.&lt;/p>
$$
\text{Complexidade do Algoritmo de Grover} = \mathcal{O}(\sqrt{N})
$$
&lt;p>No caso do SHA-256, $N = 2^{256}$, então uma busca de força bruta clássica requer cerca de $2^{256}$ tentativas. No entanto, o uso do algoritmo de Grover exigiria apenas $\sqrt{2^{256}} = 2^{128}$ tentativas. Isso significa que, para computadores quânticos, uma função hash de 256 bits terá sua &lt;strong>força de segurança efetivamente cortada pela metade, para 128 bits&lt;/strong>.&lt;/p>
&lt;h4 id="231-o-sha-256-sobreviverá-supremacia-quântica-no-hashing">2.3.1. O SHA-256 sobreviverá? (Supremacia Quântica no Hashing)
&lt;/h4>&lt;p>Embora a segurança caia pela metade, &amp;ldquo;128 bits de segurança&amp;rdquo; ainda é incrivelmente forte. O número de cálculos $2^{128}$ é astronômico e, do ponto de vista do nível de tecnologia atual, levaria um tempo na escala de vida do universo.
Portanto, considera-se amplamente que &lt;strong>&amp;ldquo;o SHA-256 manterá a segurança prática mesmo contra computadores quânticos&amp;rdquo;&lt;/strong>. Se for necessário aumentar a margem de segurança no futuro, a segurança clássica de 256 bits pode ser mantida no mundo quântico simplesmente dobrando o comprimento de saída do hash (ex: migrando do SHA-256 para o SHA-512).&lt;/p>
&lt;p>Em conclusão, embora a ameaça quântica às funções hash seja &amp;ldquo;leve e contornável&amp;rdquo;, a ameaça à criptografia de chave pública (ECDSA) pode ser considerada &amp;ldquo;fatal&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h2 id="3-análise-detalhada-do-impacto-atual-nos-criptoativos-bitcoin-ethereum">3. Análise detalhada do impacto atual nos criptoativos (Bitcoin, Ethereum)
&lt;/h2>&lt;p>Em um mundo onde a quebra do ECDSA por computadores quânticos se torna possível, com quais vulnerabilidades específicas as redes de criptoativos lidarão? Aqui, com base na estrutura do Bitcoin, conduzimos uma análise detalhada da perspectiva do &lt;strong>&amp;ldquo;momento em que a chave pública é exposta&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;h3 id="31-geração-de-endereços-e-não-divulgação-de-chaves-públicas">3.1. Geração de endereços e &amp;ldquo;não divulgação&amp;rdquo; de chaves públicas
&lt;/h3>&lt;p>Os endereços do Bitcoin (P2PKH: Pay-to-Public-Key-Hash e P2WPKH: Pay-to-Witness-Public-Key-Hash) não usam a própria chave pública, mas a chave pública com hash aplicado múltiplas vezes.&lt;/p>
$$
\text{Endereço Bitcoin} = \text{Base58Check}(\text{RIPEMD160}(\text{SHA256}(\text{Chave Pública})))
$$
&lt;p>Como mencionado, como as funções hash são resistentes a ataques quânticos (algoritmo de Grover), não é possível reverter da &amp;ldquo;chave pública&amp;rdquo; original a partir do &amp;ldquo;endereço&amp;rdquo;, que é um valor de hash, mesmo com um computador quântico.
Ou seja, para &lt;strong>&amp;ldquo;endereços não utilizados (que nunca enviaram fundos)&amp;rdquo;&lt;/strong>, a chave pública não foi exposta de forma alguma na blockchain, e apenas o valor hash foi registrado. Portanto, contanto que a chave pública seja desconhecida, não há alvo para o algoritmo de Shor, impossibilitando a identificação da chave privada. Uma carteira nesse estado pode ser considerada quanticamente segura (Quantum-safe).&lt;/p>
&lt;h3 id="32-a-vulnerabilidade-fatal-no-momento-do-envio-da-transação-ataque-front-running">3.2. A vulnerabilidade fatal no momento do envio da transação (Ataque Front-running)
&lt;/h3>&lt;p>O problema ocorre quando os usuários enviam fundos.
Ao transmitir (enviar) uma transação para a rede, o usuário deve &lt;strong>incluir sua chave pública nos dados da transação juntamente com a assinatura digital, expondo-a para toda a rede&lt;/strong> para verificação.&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant User as "Usuário (Alice)"
participant Mempool as "Mempool (Pool de transações não confirmadas)"
participant QuantumAttacker as "Invasor Quântico"
participant Miner as "Minerador (Geração de bloco)"
User->>Mempool: Envia transação (incluindo chave pública + assinatura)
Mempool-->>QuantumAttacker: Intercepta a chave pública na rede
note right of QuantumAttacker: Executa o algoritmo de Shor em minutos&lt;br/>(Calcula a chave privada a partir da chave pública)
QuantumAttacker->>QuantumAttacker: Gera uma nova assinatura usando a chave privada da Alice
QuantumAttacker->>Mempool: Transmite transferência fraudulenta com taxa de mineração mais alta
Miner->>Miner: Prioriza transações fraudulentas com taxa (Gas) alta e as inclui no bloco
Miner-->>User: Registrado na blockchain (perda de fundos da Alice)&lt;/div>
&lt;p>Uma vez que a chave pública é enviada ao Mempool (área de espera para transações não confirmadas), os dados são compartilhados com os nós ao redor do mundo. Se um invasor possuísse um computador quântico super-rápido, ele poderia roubar os fundos através do seguinte processo:&lt;/p>
&lt;ol>
&lt;li>Interceptar a transação do usuário legítimo (Alice) no Mempool e &lt;strong>extrair a chave pública&lt;/strong>.&lt;/li>
&lt;li>Executar o algoritmo de Shor e &lt;strong>calcular a chave privada a partir da chave pública em minutos (antes que o bloco seja confirmado)&lt;/strong>.&lt;/li>
&lt;li>Usar a chave privada obtida para &lt;strong>criar uma transação falsa&lt;/strong> transferindo os fundos da Alice para o endereço do invasor.&lt;/li>
&lt;li>Enviar essa transação falsa para a rede &lt;strong>definindo uma taxa de mineração (Fee) muito maior&lt;/strong> do que a da transação original da Alice.&lt;/li>
&lt;/ol>
&lt;p>Seguindo o incentivo econômico, os mineradores priorizarão a transação com as taxas mais altas e a incluirão no bloco. Como resultado, a transferência fraudulenta do invasor é aprovada (Confirm) primeiro e a transferência legítima da Alice é rejeitada como &amp;ldquo;saldo insuficiente (Double Spend)&amp;rdquo;.
Essa sequência de eventos é chamada de &lt;strong>Ataque Front-running (Front-running Attack)&lt;/strong> e, em um mundo onde computadores quânticos são colocados em uso prático, as pessoas terão seus fundos roubados por hackers no instante em que clicarem no botão enviar.&lt;/p>
&lt;h3 id="33-a-crise-dos-endereços-reutilizados-e-endereços-antigos-p2pk">3.3. A crise dos endereços reutilizados e endereços antigos (P2PK)
&lt;/h3>&lt;p>Um problema ainda mais sério é que os endereços que enviaram fundos pelo menos uma vez no passado (por exemplo, quando reutilizados como endereços de troco) já têm suas chaves públicas registradas permanentemente na blockchain. Essas carteiras correm o risco de ter as chaves privadas calculadas e os saldos roubados a qualquer momento, sem precisar aguardar que enviem novas transações.&lt;/p>
&lt;p>Além disso, o formato &lt;strong>P2PK (Pay-to-Public-Key)&lt;/strong>, popular em 2009-2010 e que inclui as recompensas iniciais de mineração de Satoshi Nakamoto (mais de 1 milhão de BTC), registra a chave pública em si, e não o hash, diretamente na blockchain como endereço. Esses enormes Bitcoins inativos se tornarão os alvos mais fáceis para os computadores quânticos, podendo ser roubados de uma vez e despejados (dumping) no mercado, o que poderia causar um crash no preço.&lt;/p>
&lt;hr>
&lt;h2 id="4-o-cenário-de-transição-para-a-criptografia-pós-quântica-pqc">4. O cenário de transição para a Criptografia Pós-Quântica (PQC)
&lt;/h2>&lt;p>Para evitar tal catástrofe no &amp;ldquo;Q-Day (o dia em que os computadores quânticos romperão a criptografia)&amp;rdquo;, a comunidade acadêmica de criptografia e a comunidade blockchain estão planejando migrar para a &lt;strong>Criptografia Pós-Quântica (PQC)&lt;/strong>, que é extremamente difícil de decifrar até mesmo com algoritmos quânticos.
O Instituto Nacional de Padrões e Tecnologia dos EUA (NIST) tem promovido a padronização da PQC há muitos anos e, após múltiplas rodadas de avaliação rigorosa, selecionou vários sistemas de criptografia promissores como padrões finais.&lt;/p>
&lt;p>Abaixo, detalhamos os principais algoritmos de PQC que estão chamando atenção como alternativas de assinatura digital para a blockchain, bem como seus mecanismos matemáticos.&lt;/p>
&lt;h3 id="41-assinaturas-baseadas-em-hash-hash-based-signatures">4.1. Assinaturas Baseadas em Hash (Hash-Based Signatures)
&lt;/h3>&lt;p>As assinaturas baseadas em hash são esquemas de criptografia cuja segurança baseia-se puramente em um alicerce muito simples e robusto: a &amp;ldquo;resistência a colisões das funções hash&amp;rdquo;. Como a segurança das funções hash contra computadores quânticos já foi provada (como mencionado, uma margem de segurança de 128 bits é suficiente), esta é uma abordagem incrivelmente confiável.
Alguns exemplos representativos incluem a &lt;strong>Assinatura de Lamport (Lamport Signatures)&lt;/strong>, e as suas extensões como a WOTS (Winternitz One-Time Signature), e o candidato à padronização do NIST, o &lt;strong>SPHINCS+&lt;/strong> (atualmente chamado de SLH-DSA como FIPS 205).&lt;/p>
&lt;h4 id="411-detalhes-matemáticos-da-assinatura-de-lamport-one-time-signature">4.1.1. Detalhes matemáticos da Assinatura de Lamport (One-Time Signature)
&lt;/h4>&lt;p>Vejamos mais a fundo os detalhes matemáticos do funcionamento da assinatura de Lamport.
Seja a função hash $H: \{0, 1\}^* \to \{0, 1\}^{256}$.&lt;/p>
&lt;p>&lt;strong>[Geração de chaves]&lt;/strong>
Alice (a remetente) usa um gerador de números aleatórios verdadeiros (TRNG) para gerar 256 pares de chaves privadas.
&lt;/p>
$$
\text{sk}_{i,0} \in \{0, 1\}^{256}, \quad \text{sk}_{i,1} \in \{0, 1\}^{256} \quad (1 \le i \le 256)
$$
&lt;p>
Com isso, a chave privada $\text{sk}$ consistirá de um total de 512 strings de 256 bits (Tamanho: $512 \times 32 = 16.384$ bytes).&lt;/p>
&lt;p>Em seguida, calcula-se a chave pública $\text{pk}$. Aplica-se hash em cada um dos componentes da chave privada.
&lt;/p>
$$
\text{pk}_{i,0} = H(\text{sk}_{i,0}), \quad \text{pk}_{i,1} = H(\text{sk}_{i,1})
$$
&lt;p>
A chave pública será também de $16.384$ bytes. Ela publicará isso na rede da blockchain.&lt;/p>
&lt;p>&lt;strong>[Geração de assinatura]&lt;/strong>
Alice, para assinar os dados da transação $M$, primeiro calculará seu valor de hash.
&lt;/p>
$$
h = H(M) \in \{0, 1\}^{256}
$$
&lt;p>
Seja o $i$-ésimo bit do valor de hash $h$ expresso como $h_i \in \{0, 1\}$.
A assinatura $\sigma$ de Alice será um conjunto de componentes da chave privada correspondente a cada bit $h_i$.
&lt;/p>
$$
\sigma = (\text{sk}_{1, h_1}, \text{sk}_{2, h_2}, \dots, \text{sk}_{256, h_{256}})
$$
&lt;p>
Ou seja, se o bit do hash da mensagem for &lt;code>0&lt;/code>, será revelado o $\text{sk}_{i,0}$, se for &lt;code>1&lt;/code>, será revelado o $\text{sk}_{i,1}$. O tamanho da assinatura será de $256 \times 32 = 8.192$ bytes.&lt;/p>
&lt;p>&lt;strong>[Verificação de assinatura]&lt;/strong>
O minerador (o verificador) fará a verificação usando a transação $M$ recebida, a assinatura $\sigma = (s_1, s_2, \dots, s_{256})$ e a chave pública $\text{pk}$.
O hash da transação $h = H(M)$ é recalculado e, em seguida, verifica-se se o hash de cada $s_i$ corresponde ao elemento da chave pública, $\text{pk}_{i, h_i}$.
&lt;/p>
$$
H(s_i) \overset{?}{=} \text{pk}_{i, h_i} \quad (\text{para todo } 1 \le i \le 256)
$$
&lt;p>Este processo é matematicamente extremamente simples e impossível de forjar assinaturas a menos que o computador quântico consiga reverter $H$. No entanto, ao assinar uma vez, metade da chave privada é exposta à rede. Isso resulta em uma forte limitação de que pode ser usada &amp;ldquo;apenas uma vez (One-Time)&amp;rdquo;, pois se a mesma chave for usada para assinar outra mensagem, a combinação das chaves privadas expostas daria ao invasor espaço para falsificações.
Para tornar isso prático, foram desenvolvidas tecnologias como &lt;strong>XMSS&lt;/strong>, que agrupa várias chaves one-time sob uma chave pública raiz através da Árvore de Merkle, e o &lt;strong>SPHINCS+&lt;/strong> sem estado, mas com o lado negativo de que o tamanho da assinatura pode chegar a dezenas de kilobytes.&lt;/p>
&lt;h3 id="42-criptografia-baseada-em-reticulados-lattice-based-cryptography">4.2. Criptografia Baseada em Reticulados (Lattice-Based Cryptography)
&lt;/h3>&lt;p>Atualmente, a mais promissora forma de PQC e que foi adotada como o principal padrão NIST (FIPS 204: ML-DSA / antigo CRYSTALS-Dilithium e Falcon) é a &lt;strong>criptografia baseada em reticulados (Lattice-Based Cryptography)&lt;/strong>.&lt;/p>
&lt;p>A segurança da criptografia de reticulados depende de problemas matemáticos comprovadamente difíceis como o &amp;ldquo;Problema do Vetor Mais Curto em reticulados multidimensionais (SVP: Shortest Vector Problem)&amp;rdquo; e o &amp;ldquo;Aprendizado com Erros (LWE: Learning With Errors)&amp;rdquo;. Nenhum algoritmo eficiente, seja clássico ou quântico, foi descoberto para resolver problemas de reticulados.&lt;/p>
&lt;p>&lt;strong>O modelo matemático do LWE (Learning With Errors):&lt;/strong>
A ideia fundamental por trás do problema LWE é adicionar intencionalmente um &amp;ldquo;pequeno ruído (erro)&amp;rdquo; a um sistema de equações lineares, tornando o problema dramaticamente mais difícil de ser resolvido.
Seja o vetor secreto $\mathbf{s} \in \mathbb{Z}_q^n$.
Existe uma matriz pública enorme, escolhida aleatoriamente, $\mathbf{A} \in \mathbb{Z}_q^{m \times n}$, e um pequeno vetor de ruído adicionado intencionalmente $\mathbf{e} \in \mathbb{Z}_q^m$.
A chave pública $\mathbf{b}$ é calculada da seguinte forma:&lt;/p>
$$
\mathbf{b} = \mathbf{A}\mathbf{s} + \mathbf{e} \pmod{q}
$$
&lt;p>Mesmo que a matriz $\mathbf{A}$ e o vetor $\mathbf{b}$ (a chave pública) sejam de conhecimento público, devido ao ruído $\mathbf{e}$, calcular de trás pra frente a chave privada $\mathbf{s}$ será extremamente difícil. Sem o ruído, poderia ser resolvido via eliminação gaussiana simples, mas a adição do ruído causa um aumento explosivo no espaço de busca em todas as dimensões, o que confere forte segurança contra computadores clássicos e quânticos.
Em algoritmos práticos usados pela blockchain (como Dilithium), utilizam-se essas instâncias em anéis polinomiais, conhecidos como &lt;strong>Ring-LWE (ou Module-LWE)&lt;/strong>, para reduzir o tamanho da chave e acelerar os cálculos.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Vantagens&lt;/strong>: Em relação às assinaturas baseadas em hash, a chave pública e as assinaturas têm um tamanho relativamente pequeno (por volta de alguns kilobytes), e as velocidades de verificação e geração de assinaturas são incrivelmente altas (iguais ou superiores às do ECDSA).&lt;/li>
&lt;li>&lt;strong>Desvantagens&lt;/strong>: Possui estruturas matemáticas complexas, e por conta do curto período de avaliação histórica, o risco do descobrimento de novos algoritmos de decodificação no futuro não é nulo.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="5-desafios-técnicos-na-transição-de-pqc-em-blockchains">5. Desafios técnicos na transição de PQC em Blockchains
&lt;/h2>&lt;p>Apenas a existência dos algoritmos de PQC (como Dilithium ou SPHINCS+) não significa que possam ser imediatamente implementados no Bitcoin ou no Ethereum amanhã. Sistemas descentralizados enfrentam diversos obstáculos enormes.&lt;/p>
&lt;h3 id="51-aumento-do-tamanho-das-assinaturas-e-quebra-da-escalabilidade">5.1. Aumento do tamanho das assinaturas e quebra da escalabilidade
&lt;/h3>&lt;p>O maior obstáculo na introdução de PQC é o aumento em larga escala dos dados.
O tamanho atual da assinatura ECDSA ronda cerca de 70 bytes. Por outro lado, com o Dilithium da criptografia de reticulado (ML-DSA), o tamanho da assinatura está por volta de 2.420 bytes a 4.595 bytes (dependendo do nível de segurança), e a chave pública ultrapassa 1.300 bytes. O tamanho total por transação do SPHINCS+, que é baseado em hash, ultrapassa as dezenas de milhares de bytes só para a assinatura.&lt;/p>
&lt;p>Se a rede Bitcoin implementar a PQC mas continuar a ter o mesmo limite do tamanho de blocos que possui no presente (aproximadamente o peso de 4MB, incluindo a SegWit), a quantidade de transações que caberão em 1 bloco despencará agressivamente. A velocidade das transações (TPS: Transactions Per Second) diminuirá absurdamente, e as paralisações das transferências se tornarão normais.
Para resolver esse problema, é imprescindível um tremendo crescimento no tamanho do bloco, mas tal solução requer mais armazenamento e requisitos de banda de internet dos full nodes, tornando muito mais complicado executar um nó de forma independente. Como resultado, cairá no dilema de induzir uma forte &lt;strong>centralização da rede&lt;/strong>.&lt;/p>
&lt;div class="mermaid">pie title "Comparação dos tamanhos dos dados de assinatura em blockchain (Conceitual)"
"ECDSA (aprox. 70 Bytes)" : 2
"Dilithium ML-DSA (aprox. 2.500 Bytes)" : 58
"SPHINCS+ (aprox. 17.000 Bytes)" : 40&lt;/div>
&lt;p>&lt;em>(※ O aumento dos dados de transação que decorre com a implementação da PQC será um gargalo fatal para a escalabilidade)&lt;/em>&lt;/p>
&lt;h3 id="52-o-impacto-no-ethereum-virtual-machine-evm-e-os-contratos-pré-compilados-precompiled-contracts">5.2. O impacto no Ethereum Virtual Machine (EVM) e os Contratos Pré-compilados (Precompiled Contracts)
&lt;/h3>&lt;p>Em uma plataforma Turing completa como o Ethereum, a introdução de PQC precisa demandar uma atualização profunda do EVM (Ethereum Virtual Machine).
Atualmente, no EVM, o &lt;code>ecrecover&lt;/code> (no endereço: &lt;code>0x01&lt;/code>) é um Precompiled Contract oferecido especificamente para verificação da assinatura do ECDSA. Isso reduz o custo e serve como otimização para verificar as assinaturas gastando o mínimo possível de Gas (3000 Gas).&lt;/p>
&lt;p>Todavia, os novos algoritmos de criptografia de reticulados, como o Dilithium e Falcon, requerem operações de matrizes e polinômios complexos na verificação, logo, seriam necessários milhões e até dezenas de milhões de gás, utilizando os Opcodes que já estão lá atualmente. Esse é o limite atual do Gas consumido no bloco inteiro (perto dos 30 milhões de Gas) sumindo inteiramente num único uso por uma transação.&lt;/p>
&lt;p>A melhor maneira de combater essa questão é inserir um Precompiled Contract próprio para verificação PQC através de Hard Forks na rede (Ex.: usar o endereço &lt;code>0x10&lt;/code> para DilithiumVerify) inseridos no próprio EVM. E isso, é claro, implica em uma colaboração profunda dos desenvolvedores principais do Ethereum de todos os clientes (Geth, Nethermind, Erigon, etc.), aplicando a verificação num nível mais denso pelas linguagens como C++, Go, e Rust; além de necessitar passar por auditorias duradouras pelo processo.&lt;/p>
&lt;h3 id="53-a-dificuldade-de-formar-consenso-através-do-hard-fork">5.3. A dificuldade de formar consenso através do Hard Fork
&lt;/h3>&lt;p>Para alterar o algoritmo basilar de assinatura, é necessária uma forte mudança em toda a rede de blockchain, mais conhecida como &lt;strong>Hard Fork&lt;/strong>. Porém, a comunidade, como a do Bitcoin que valoriza &amp;ldquo;ser imutável sob suas normas&amp;rdquo;, &amp;ldquo;descentralizada&amp;rdquo;, etc. tende a ter dificuldades para obter o consenso político. Assim, entre propor uma BIP (Bitcoin Improvement Proposal) e a implementação na mainnet, anos e mais anos de discussões e testnets seriam essenciais para esse salto com a PQC.&lt;/p>
&lt;hr>
&lt;h2 id="6-quando-o-q-day-chegará-roadmap-rumo-à-transição">6. Quando o &amp;ldquo;Q-Day&amp;rdquo; chegará? Roadmap rumo à transição
&lt;/h2>&lt;p>Quando chegará o dia em que o computador quântico vai totalmente aniquilar a criptografia de curvas elípticas de 256-bit, chamado de &amp;ldquo;Q-Day&amp;rdquo;?
Enquanto as previsões diferem de um perito para outro, muitos estipulam algo &lt;strong>&amp;ldquo;de meados de 2030 aos anos 2040&amp;rdquo;&lt;/strong>. Acreditam na aparição de um computador quântico de nível escalar (com qubits livres de interferência - Logical Qubits) de fato funcional na escala de milhares e talvez até dezenas de milhares. Mas também não se descarta que a grande evolução da tecnologia possa acontecer bem mais cedo, de volta aos anos 2030, antecipando uma série de arquiteturas.&lt;/p>
&lt;p>Aqui está um mapa básico delineando as rotas da comunidade antes de sucumbir para sempre:&lt;/p>
&lt;h3 id="fase-1-assinatura-híbrida-e-abstração-de-contas-hoje---2028">Fase 1: Assinatura Híbrida e Abstração de Contas (Hoje - 2028)
&lt;/h3>&lt;p>No campo de desenvolvimento atual, o corpo principal da blockchain do Ethereum (Vitalik Buterin e cia.) foca nas &lt;strong>&amp;ldquo;Assinaturas Híbridas (Hybrid Signatures)&amp;rdquo;&lt;/strong>, que englobam a PQC (seja baseada em hash, reticulados, ou outros métodos) e a clássica ECDSA. Essa transação exige ambos e, mesmo quando uma é corrompida, as barreiras da outra impedem os estragos, assim validando o procedimento de forma pacífica.
Ao invés de contar só com forks pesados a nível de protocolo, implementações adicionais como a Abstração da Conta (Account Abstraction, ERC-4337) em Smart Contract Wallets com formato Opt-in já estão sendo oferecidas por aqueles que desejam testar a PQC em suas próprias chaves.&lt;/p>
&lt;h3 id="fase-2-uso-de-provas-de-conhecimento-zero-zk-rollups-2025--">Fase 2: Uso de Provas de Conhecimento Zero (ZK-Rollups) (2025 -)
&lt;/h3>&lt;p>Para combater a &amp;ldquo;ampliação do tamanho das assinaturas&amp;rdquo;, um defeito crônico da PQC, o salvador parece ser o advento da tecnologia Layer-2 focada em &lt;strong>ZK-Rollups (Zero-Knowledge Proofs)&lt;/strong>.
Os dados superpesados da PQC serão registrados inicialmente e verificados nas transações fora da cadeia da Main Layer (Layer 1). A Layer-2 consolida todos em blocos enormes utilizando a criptografia de ZK-SNARKs ou ZK-STARKs. Transformados nessas singulares &amp;ldquo;provas minúsculas (Proof)&amp;rdquo;, eles serão arquivados na rede original em fração do tamanho da PQC.
Detalhando, um pequeno grupo de SNARKs, na sua total base estrutural do Groth16, também é indefeso contra ataques quânticos. Então a solução foca puramente no que usa Hash, as &lt;strong>ZK-STARKs&lt;/strong>.&lt;/p>
&lt;h3 id="fase-3-hard-fork-em-nível-de-protocolo-em-torno-de-2030">Fase 3: Hard Fork em Nível de Protocolo (em torno de 2030)
&lt;/h3>&lt;p>E então a padronização oficial através das avaliações do NIST. Ao se solidificarem e as bibliotecas estarem sendo usadas por um bom momento, cadeias centrais como Bitcoin ou Ethereum implementarão sem dúvidas os Hard Forks definitivos em nível padrão e primário. A imensa migração demandaria o incentivo global do mercado por inúmeras campanhas aconselhando &amp;ldquo;migrar os fundos das carteiras velhas para uma recém adaptada para PQC&amp;rdquo;.&lt;/p>
&lt;h3 id="projetos-pioneiros">Projetos Pioneiros
&lt;/h3>&lt;p>Existem alguns projetos inovadores na era blockchain focados exclusivamente nessa barreira quântica:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>QRL (Quantum Resistant Ledger)&lt;/strong>: A XMSS (eXtended Merkle Signature Scheme) em formato hash serviu de alicerce da blockchain com PQC inserida na base desde seus primórdios em mainnets mais antigos.&lt;/li>
&lt;li>&lt;strong>Algorand / Cellframe&lt;/strong>: Sistemas modelados com foco na evolução para PQC de camadas mais flexíveis da criptografia, abraçando e aprofundando o formato nos reticulados num momento precoce.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="7-conclusão-para-o-futuro-e-a-salvaguarda-de-nossas-moedas">7. Conclusão: Para o futuro e a salvaguarda de nossas moedas
&lt;/h2>&lt;p>A era pós-quântica está deixando de ser uma premissa da FC (Ficção Científica) para transformar-se numa ameaça tangível de problemas e riscos graves na própria infraestrutura do ecossistema criptográfico hoje.&lt;/p>
&lt;p>Com o machado de ponta-dupla do Algoritmo de Shor e do Algoritmo de Grover pelas frentes quânticas, tanto o ECDSA da Chave Pública quanto a Função Hash encaram o seu extermínio respectivo. Notoriamente a fragilidade destrutiva do ECDSA dita as regras: os perigos vindos da extração dos fundos via ataques front-running (Front-Running Attacks) exigirão medidas impetuosas para o PQC sem demora.&lt;/p>
&lt;p>Felizmente, não é apenas um fim apocalíptico onde sentam-se à espera. As soluções de reticulados, hashes sob novos padrões validados do PQC, os recursos Layer-2 ZK-STARKs provaram ser barreiras excelentes no desafio iminente, controlando por fim a praga da enorme quantia e tamanho que as transações requerem.&lt;/p>
&lt;p>Para qualquer indivíduo normal investido nesse campo, não precisa de ataques de pânico momentâneos hoje. Contudo, todos necessitarão portar os conhecimentos de auto-preservação:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Evitar reciclar endereços&lt;/strong>: Evite endereços (os já manuseados e cujas chaves públicas perambulam na blockchain exposta). E também manter no radar as regras básicas de privacidade.&lt;/li>
&lt;li>&lt;strong>Ficar atento nas tecnologias e relatórios&lt;/strong>: Como ler BIPs e EIPs da comunidade de Bitcoin/Ethereum focadas nos Hard Forks. Isso propicia que seja fácil fazer a manobra da sua carteira se requerido num anúncio do tipo, da melhor maneira possível.&lt;/li>
&lt;/ul>
&lt;p>A resiliência das Blockchains define seu ciclo imortal e histórico, superando e vencendo a escalabilidade (a conversão brutal que aconteceu no PoW e PoS no ecossistema atual e a própria camada sustentável ambiental) com melhoria vital. Em frente as crises de magnitude quântica global, é um embate que exigirá todos de nós no coletivo inteiro das rotas descentralizadas para superar o dilema sem igual.
E no decorrer dessa odisseia, quem dirá se o choque dessas duas esferas intelectuais criadas pelas mentes humanas (A tecnologia Blockchain imutável versus a capacidade máxima Quântica), gerem não apenas destruição e escombros, mas uma transcendência suprema da tecnologia baseada em segurança superior no amanhecer sem fim da posteridade!&lt;/p>
&lt;hr>
&lt;p>&lt;em>Referências e links úteis:&lt;/em>&lt;/p>
&lt;ul>
&lt;li>National Institute of Standards and Technology (NIST) - Post-Quantum Cryptography Standardization Project&lt;/li>
&lt;li>Shor, P. W. (1994). Algorithms for quantum computation: discrete logarithms and factoring.&lt;/li>
&lt;li>Grover, L. K. (1996). A fast quantum mechanical algorithm for database search.&lt;/li>
&lt;li>Buterin, V. (2024). How to hard-fork to save most users&amp;rsquo; funds in a quantum emergency.&lt;/li>
&lt;/ul></description></item><item><title>A diferença entre Annealing Quântico e Modelo de Porta Quântica explicada de forma simples</title><link>http://kenji.blog/pt/p/quantum-annealing-vs-gate-model-explained/</link><pubDate>Fri, 11 Sep 2026 12:00:00 +0900</pubDate><guid>http://kenji.blog/pt/p/quantum-annealing-vs-gate-model-explained/</guid><description>&lt;img src="http://kenji.blog/p/quantum-annealing-vs-gate-model-explained/img/eyecatch.jpg" alt="Featured image of post A diferença entre Annealing Quântico e Modelo de Porta Quântica explicada de forma simples" />&lt;h1 id="a-diferença-entre-annealing-quântico-e-modelo-de-porta-quântica-explicada-de-forma-simples">A diferença entre Annealing Quântico e Modelo de Porta Quântica explicada de forma simples
&lt;/h1>&lt;p>A computação quântica é uma tecnologia de computação de próxima geração com o potencial de resolver de forma incrivelmente rápida, utilizando princípios da mecânica quântica (sobreposição e emaranhamento quântico), problemas específicos que levariam um tempo enorme para serem processados por computadores clássicos modernos (incluindo supercomputadores convencionais).&lt;/p>
&lt;p>Atualmente, existem dois paradigmas principais na abordagem para a realização de computadores quânticos: &lt;strong>&amp;ldquo;Annealing Quântico&amp;rdquo; (Quantum Annealing)&lt;/strong> e o &lt;strong>&amp;ldquo;Modelo de Porta Quântica&amp;rdquo; (Quantum Gate Model)&lt;/strong>. Esses dois métodos diferem significativamente em sua abordagem física fundamental, nas tarefas computacionais em que se destacam e nos desafios de hardware na sua implementação.&lt;/p>
&lt;p>Neste artigo, compararemos e explicaremos detalhadamente esses dois métodos a partir de uma perspectiva altamente técnica e detalhada, abrangendo os princípios físicos, modelos matemáticos (modelo de Ising, QUBO, transformações unitárias, etc.), as limitações tecnológicas atuais e os casos de uso específicos.&lt;/p>
&lt;hr>
&lt;h2 id="1-fundamentos-da-computação-quântica-a-diferença-fundamental-em-relação-aos-computadores-clássicos">1. Fundamentos da Computação Quântica: A diferença fundamental em relação aos computadores clássicos
&lt;/h2>&lt;p>Os computadores clássicos processam informações como &amp;ldquo;Bits&amp;rdquo;, que assumem o estado &amp;ldquo;0&amp;rdquo; ou &amp;ldquo;1&amp;rdquo;. Em contraste, os computadores quânticos usam &amp;ldquo;Qubits&amp;rdquo; (Bits Quânticos). Graças ao princípio da &amp;ldquo;sobreposição&amp;rdquo; (Superposition) da mecânica quântica, os qubits podem manter os estados 0 e 1 simultaneamente de forma probabilística.&lt;/p>
&lt;p>Além disso, utilizando um fenômeno chamado &amp;ldquo;emaranhamento quântico&amp;rdquo; (Entanglement), o estado de múltiplos qubits torna-se fortemente correlacionado, de modo que uma operação em um único qubit afeta instantaneamente todo o sistema. Isso possibilita a realização de cálculos semelhantes ao processamento paralelo (paralelismo quântico).&lt;/p>
&lt;p>No entanto, os estados quânticos são extremamente vulneráveis a ruídos externos (como calor e ondas eletromagnéticas), e a &amp;ldquo;decoerência&amp;rdquo; (Decoherence) – onde o estado colapsa e retorna a um estado clássico – é um grande desafio. A diferença na abordagem a esse problema de ruído levou a grandes diferenças nas filosofias de design do annealing e do modelo de portas.&lt;/p>
&lt;hr>
&lt;h2 id="2-detalhes-do-annealing-quântico-quantum-annealing">2. Detalhes do Annealing Quântico (Quantum Annealing)
&lt;/h2>&lt;p>O annealing quântico é uma arquitetura de computação especializada, focada principalmente em resolver &lt;strong>&amp;ldquo;problemas de otimização combinatória&amp;rdquo;&lt;/strong>. Baseia-se na teoria proposta em 1998 por Hidetoshi Nishimori e Tadashi Kadowaki do Instituto de Tecnologia de Tóquio (Tokyo Tech), e tornou-se amplamente conhecido após ser comercializado pela primeira vez no mundo pela empresa canadense D-Wave Systems.&lt;/p>
&lt;h3 id="21-mecanismo-físico-modelo-de-ising-de-campo-transversal-e-flutuação-quântica">2.1. Mecanismo Físico: Modelo de Ising de campo transversal e flutuação quântica
&lt;/h3>&lt;p>O annealing quântico usa a propriedade natural dos sistemas físicos de tentar se acomodar no &amp;ldquo;estado de menor energia&amp;rdquo; (estado fundamental) para realizar cálculos.&lt;/p>
&lt;p>Na abordagem clássica do &amp;ldquo;Simulated Annealing&amp;rdquo; (Recozimento Simulado), a flutuação térmica é usada para escapar das soluções ótimas locais (mínimos locais). Por outro lado, no annealing quântico, a &amp;ldquo;flutuação quântica&amp;rdquo; (Quantum Fluctuation) é usada para atravessar barreiras de energia por meio do &amp;ldquo;efeito de tunelamento quântico&amp;rdquo; (Quantum Tunneling), explorando de maneira mais eficiente a solução ótima global (mínimo global).&lt;/p>
&lt;p>A evolução temporal do sistema de annealing quântico é descrita pelo seguinte Hamiltoniano (operador que representa a energia total do sistema) $H(t)$:&lt;/p>
$$ H(t) = A(t) H_0 + B(t) H_P $$
&lt;p>Onde $t$ é o tempo, $A(t)$ é uma função que diminui gradualmente e $B(t)$ é uma função que aumenta gradualmente.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>$H_0$ (Hamiltoniano inicial)&lt;/strong>: Representa o campo transversal (Transverse field) e gera flutuações quânticas.
$$ H_0 = - \sum_{i} \sigma_i^x $$
($\sigma_i^x$ é a matriz de Pauli X e representa a inversão de bits.)&lt;/li>
&lt;li>&lt;strong>$H_P$ (Hamiltoniano do problema)&lt;/strong>: O modelo de Ising (Ising Model) que expressa o problema de otimização a ser resolvido.&lt;/li>
&lt;/ul>
&lt;p>No estado inicial ($t=0$), $A(0)$ está no seu máximo e o sistema está no estado fundamental de $H_0$ (um estado onde todos os estados possíveis estão uniformemente sobrepostos). A partir daí, o campo transversal é lentamente reduzido ao longo do tempo, enquanto simultaneamente a interação do Hamiltoniano do problema é aumentada.&lt;/p>
&lt;h3 id="22-computação-quântica-adiabática-adiabatic-quantum-computation">2.2. Computação Quântica Adiabática (Adiabatic Quantum Computation)
&lt;/h3>&lt;p>O &lt;strong>&amp;ldquo;Teorema Adiabático&amp;rdquo; (Adiabatic Theorem)&lt;/strong> é importante neste processo. De acordo com o teorema adiabático, se o sistema for alterado de forma &amp;ldquo;suficientemente lenta (adiabática)&amp;rdquo;, o sistema permanecerá constantemente no estado fundamental do Hamiltoniano daquele momento.&lt;/p>
&lt;p>Em outras palavras, quando no final tivermos $A(t) \to 0$ e $B(t) \to 1$, o sistema terá atingido o estado fundamental de $H_P$, ou seja, a &lt;strong>&amp;ldquo;solução exata do problema de otimização&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;div class="mermaid">graph TD
A["Hamiltoniano H_0 (Estado Inicial)"] -->|"Mudança Adiabática (Suficientemente lenta)"| B["Mantém o estado fundamental o tempo todo"]
A -->|"Mudança não adiabática (Muito rápida/Ruído térmico)"| C["Transição para estados excitados (Erro)"]
B --> D["Hamiltoniano H_P (Solução ótima global)"]
C --> E["Preso em um ótimo local"]
D --> F["Leitura da solução"]
E --> F&lt;/div>
&lt;h3 id="23-mapeamento-de-qubo-para-o-modelo-de-ising">2.3. Mapeamento de QUBO para o Modelo de Ising
&lt;/h3>&lt;p>Para resolver problemas do mundo real em um annealer quântico, o problema deve ser formulado no formato &lt;strong>QUBO (Quadratic Unconstrained Binary Optimization)&lt;/strong>.&lt;/p>
&lt;p>A função objetivo do QUBO é definida da seguinte forma:
&lt;/p>
$$ \min_{x \in \{0,1\}^n} \sum_{i} Q_{ii} x_i + \sum_{i &lt; j} Q_{ij} x_i x_j $$
&lt;p>
Onde $x_i \in \{0, 1\}$ são variáveis binárias e $Q$ é a matriz de pesos.&lt;/p>
&lt;p>Como o hardware (como os da D-Wave) lida com spins físicos (para cima / para baixo), é necessário converter as variáveis para o modelo de Ising usando $\sigma_i \in \{-1, +1\}$. A fórmula de conversão é a seguinte:
&lt;/p>
$$ x_i = \frac{1 - \sigma_i}{2} \quad \text{ou} \quad \sigma_i = 1 - 2x_i $$
&lt;p>Substituindo isso na equação do QUBO e simplificando, obtemos o Hamiltoniano do modelo de Ising $H_P$:
&lt;/p>
$$ H_P = - \sum_{i&lt;j} J_{ij} \sigma_i^z \sigma_j^z - \sum_{i} h_i \sigma_i^z $$
&lt;ul>
&lt;li>$J_{ij}$: A interação entre os spins (coeficiente de acoplamento). Força do acoplamento entre os qubits físicos.&lt;/li>
&lt;li>$h_i$: Campo magnético local (bias) aplicado a cada spin.&lt;/li>
&lt;/ul>
&lt;h3 id="24-hardware-e-desafios-do-annealing-quântico-exemplo-da-d-wave">2.4. Hardware e desafios do Annealing Quântico (Exemplo da D-Wave)
&lt;/h3>&lt;p>Os processadores quânticos da D-Wave são realizados usando Dispositivos Supercondutores de Interferência Quântica (SQUID). O acoplamento entre qubits físicos depende do cabeamento de hardware e não apresenta acoplamento total (um estado em que todos os bits estão interconectados).
Embora o grau de acoplamento tenha melhorado, evoluindo do &amp;ldquo;Gráfico Chimera (Chimera graph)&amp;rdquo; original para o &amp;ldquo;Gráfico Pegasus (Pegasus)&amp;rdquo; e &amp;ldquo;Gráfico Zephyr (Zephyr)&amp;rdquo;, ainda há limitações.&lt;/p>
&lt;p>Por esse motivo, é necessário um processo chamado &lt;strong>&amp;ldquo;Incorporação de Menores (Minor Embedding)&amp;rdquo;&lt;/strong>, que mapeia problemas com estruturas gráficas complexas nos gráficos físicos. Isso resulta em uma única variável lógica sendo representada por múltiplos qubits físicos (cadeias), o que reduz o número de qubits utilizáveis na prática e gera o problema de degradação da precisão do cálculo.&lt;/p>
&lt;hr>
&lt;h2 id="3-detalhes-do-modelo-de-porta-quântica-quantum-gate-model">3. Detalhes do Modelo de Porta Quântica (Quantum Gate Model)
&lt;/h2>&lt;p>O modelo de porta quântica é uma extensão quântica das portas lógicas de computadores clássicos (AND, OR, NOT, etc.) e é uma arquitetura que permite a &lt;strong>&amp;ldquo;Computação Quântica Universal&amp;rdquo; (Universal Quantum Computation)&lt;/strong>. Muitas empresas, como IBM, Google, Rigetti e IonQ, adotam esse método.&lt;/p>
&lt;h3 id="31-transformações-unitárias-e-vetores-de-estado">3.1. Transformações Unitárias e Vetores de Estado
&lt;/h3>&lt;p>No modelo de porta quântica, o estado de todo o sistema de qubits é expresso como um &amp;ldquo;Vetor de Estado&amp;rdquo; (State Vector) $|\psi\rangle$. O estado de 1 qubit é expresso como uma combinação linear dos estados base $|0\rangle$ e $|1\rangle$, como mostrado abaixo:
&lt;/p>
$$ |\psi\rangle = \alpha |0\rangle + \beta |1\rangle $$
&lt;p>
Onde $\alpha$ e $\beta$ são amplitudes de probabilidade complexas, e satisfazem $|\alpha|^2 + |\beta|^2 = 1$. Esse estado é visualizado geometricamente como um ponto na &amp;ldquo;Esfera de Bloch&amp;rdquo; (Bloch Sphere).&lt;/p>
&lt;p>As etapas da computação quântica são descritas como a aplicação de um &lt;strong>Operador Unitário (Unitary Operator) $U$&lt;/strong> ao vetor de estado. Matrizes unitárias possuem a propriedade $U^\dagger U = I$ (o produto pelo seu conjugado hermitiano resulta na matriz identidade), sendo uma operação reversível que corresponde à evolução temporal da equação de Schrödinger na mecânica quântica.
&lt;/p>
$$ |\psi_{t+1}\rangle = U_t |\psi_t\rangle $$
&lt;h3 id="32-portas-quânticas-básicas-e-modelo-de-circuito">3.2. Portas Quânticas Básicas e Modelo de Circuito
&lt;/h3>&lt;p>Algoritmos de computação quântica são projetados como uma sequência de portas quânticas (um circuito quântico).&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Portas de Pauli (X, Y, Z)&lt;/strong>: Rotações de 180 graus em torno de cada eixo na esfera de Bloch. A porta X equivale à porta clássica NOT.&lt;/li>
&lt;li>&lt;strong>Porta Hadamard (H)&lt;/strong>: Transforma $|0\rangle$ em $\frac{|0\rangle + |1\rangle}{\sqrt{2}}$, criando um estado de sobreposição.
$$ H = \frac{1}{\sqrt{2}} \begin{pmatrix} 1 &amp; 1 \\ 1 &amp; -1 \end{pmatrix} $$&lt;/li>
&lt;li>&lt;strong>Porta CNOT (Controlled-NOT)&lt;/strong>: Uma porta de 2 qubits. Aplica a porta X ao bit alvo apenas quando o bit de controle é $|1\rangle$. Isso gera emaranhamento quântico (Entanglement).&lt;/li>
&lt;/ul>
&lt;p>Qualquer algoritmo quântico pode ser expresso de forma aproximada através da combinação de um pequeno número de portas de 1 qubit e portas CNOT (conjunto de portas universais).&lt;/p>
&lt;div class="mermaid">graph LR
Q0["Qubit 0: |0>"] --> H1["Porta Hadamard (H)"]
Q1["Qubit 1: |0>"] --> I1["Operação Identidade (I)"]
H1 --> C1["Bit de Controle (Control)"]
I1 --> T1["Bit Alvo (Target)"]
C1 -. "Emaranhamento" .- T1
C1 --> M0["Medição (Measurement)"]
T1 --> M1["Medição (Measurement)"]
M0 --> Result["Resultado Clássico (0 ou 1)"]
M1 --> Result&lt;/div>
&lt;h3 id="33-correção-de-erros-e-o-caminho-do-nisq-para-o-ftqc">3.3. Correção de Erros e o Caminho do NISQ para o FTQC
&lt;/h3>&lt;p>O maior desafio do modelo de porta quântica é a &amp;ldquo;decoerência&amp;rdquo;, onde os estados quânticos são destruídos por ruídos. Conforme os passos de cálculo (profundidade das portas) aumentam, os erros se acumulam.&lt;/p>
&lt;p>Para realizar cálculos ideais, a &lt;strong>Correção de Erros Quânticos (Quantum Error Correction)&lt;/strong> é essencial. Por exemplo, em métodos como o &amp;ldquo;Código de Superfície&amp;rdquo; (Surface Code), agrupa-se múltiplos qubits físicos para formar 1 &amp;ldquo;qubit lógico&amp;rdquo; (Logical Qubit) sem erros. No entanto, são necessários milhares a dezenas de milhares de qubits físicos para criar 1 qubit lógico, resultando em um enorme custo indireto (overhead).&lt;/p>
&lt;p>O estágio em que estamos agora é a era dos dispositivos &lt;strong>NISQ (Noisy Intermediate-Scale Quantum)&lt;/strong> de dezenas a centenas de qubits sem correção de erros. Para alcançar o &lt;strong>FTQC (Fault-Tolerant Quantum Computing)&lt;/strong> com correção de erros total, muitos avanços ainda são necessários.&lt;/p>
&lt;hr>
&lt;h2 id="4-resumo-da-comparação-técnica-e-matemática">4. Resumo da Comparação Técnica e Matemática
&lt;/h2>&lt;p>Vamos comparar as diferenças fundamentais entre as duas arquiteturas.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Item de Comparação&lt;/th>
&lt;th style="text-align:left">Annealing Quântico (Quantum Annealing)&lt;/th>
&lt;th style="text-align:left">Modelo de Porta Quântica (Gate Model)&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Modelo Computacional&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Computação quântica adiabática (Evolução temporal contínua do Hamiltoniano)&lt;/td>
&lt;td style="text-align:left">Transformações unitárias (Sequência de operações discretas em portas)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Problemas Adequados&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Problemas de otimização combinatória (QUBO, modelo de Ising)&lt;/td>
&lt;td style="text-align:left">Universal (Simulação química quântica, fatoração de primos, busca, etc.)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Poder de Expressão&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Otimização heurística (Soluções aproximadas)&lt;/td>
&lt;td style="text-align:left">Equivalente à Máquina de Turing Quântica Universal (Teoricamente capaz de todos os cálculos)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Exemplos de Implementação&lt;/strong>&lt;/td>
&lt;td style="text-align:left">D-Wave Systems&lt;/td>
&lt;td style="text-align:left">IBM, Google, Quantinuum, IonQ, etc.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Tolerância a Ruídos&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Relativamente alta (Permanece perto do estado fundamental, certo ruído térmico é aceitável)&lt;/td>
&lt;td style="text-align:left">Muito fraca (O mínimo ruído causa desalinhamento de fase e destrói o cálculo)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Escalabilidade&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Milhares a dezenas de milhares de qubits (Depende da estrutura física. A conversão para qubits lógicos é difícil)&lt;/td>
&lt;td style="text-align:left">Escala de centenas de qubits (Milhões são necessários para FTQC)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>O Annealing Quântico atua como um &amp;ldquo;coprocessador para fins específicos&amp;rdquo;, sendo adequado para resolver problemas de otimização complementando os limites dos computadores clássicos. Por outro lado, o Modelo de Porta Quântica é a versão quântica de um &amp;ldquo;computador de propósito geral&amp;rdquo; e visa fundamentalmente superar as capacidades de cálculo dos computadores clássicos (supremacia quântica), mas a construção do hardware é extremamente difícil.&lt;/p>
&lt;hr>
&lt;h2 id="5-limitações-e-desafios-atuais">5. Limitações e Desafios Atuais
&lt;/h2>&lt;h3 id="limitações-do-annealing-quântico">Limitações do Annealing Quântico
&lt;/h3>&lt;ol>
&lt;li>&lt;strong>Limitação de Conectividade (Connectivity)&lt;/strong>: Devido à incorporação de menores (minor embedding) mencionada acima, à medida que a escala do problema aumenta, o número de qubits físicos necessários cresce exponencialmente.&lt;/li>
&lt;li>&lt;strong>Precisão dos Coeficientes (Precision)&lt;/strong>: Os erros físicos ao configurar os parâmetros analógicos, como $J_{ij}$ e $h_i$, no hardware, afetam diretamente a qualidade da solução.&lt;/li>
&lt;li>&lt;strong>Temperatura e Transição Não Adiabática&lt;/strong>: Como a temperatura do sistema não é o zero absoluto, há uma probabilidade de se desviar da solução ótima devido à excitação térmica.&lt;/li>
&lt;/ol>
&lt;h3 id="limitações-do-modelo-de-porta-quântica">Limitações do Modelo de Porta Quântica
&lt;/h3>&lt;ol>
&lt;li>&lt;strong>Tempo de Coerência (Coherence Time)&lt;/strong>: O tempo em que o estado quântico pode ser mantido é de apenas alguns microssegundos a milissegundos, limitando severamente o número de portas (profundidade do circuito) que podem ser executadas nesse intervalo.&lt;/li>
&lt;li>&lt;strong>Fidelidade da Porta (Gate Fidelity)&lt;/strong>: A taxa de erro nas operações de portas de 2 qubits (como a CNOT) ainda não é suficientemente baixa (geralmente em torno de 99,x%). Para realizar o FTQC, isso precisará ser elevado para mais de 99,99%.&lt;/li>
&lt;li>&lt;strong>Volume Quântico (Quantum Volume)&lt;/strong>: O maior desafio atual é escalar não apenas o número de qubits puros, mas a capacidade computacional efetiva (Volume Quântico), que leva em conta a interconexão e a taxa de erros.&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="6-casos-de-uso-específicos-e-algoritmos">6. Casos de Uso Específicos e Algoritmos
&lt;/h2>&lt;p>Vamos ver as áreas de aplicação específicas em que cada método se destaca.&lt;/p>
&lt;h3 id="61-casos-de-uso-do-annealing-quântico">6.1. Casos de Uso do Annealing Quântico
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Logística e Roteamento&lt;/strong>: Otimização de rotas de entrega para vários veículos (Variação do problema do caixeiro viajante). Busca de rotas em tempo real considerando o congestionamento do tráfego.&lt;/li>
&lt;li>&lt;strong>Engenharia Financeira&lt;/strong>: Otimização de portfólios. Exploração da combinação de ativos para maximizar retornos enquanto se minimizam os riscos.&lt;/li>
&lt;li>&lt;strong>Aprendizado de Máquina (Machine Learning)&lt;/strong>: Seleção de Características (Feature Selection). Extrair a combinação de variáveis que mais contribui para as previsões de um enorme conjunto de dados.&lt;/li>
&lt;li>&lt;strong>Manufatura&lt;/strong>: O problema de escalonamento job-shop nas fábricas (qual máquina deve processar qual peça e em que ordem para ser a mais rápida).&lt;/li>
&lt;/ul>
&lt;h3 id="62-casos-de-uso-do-modelo-de-porta-quântica">6.2. Casos de Uso do Modelo de Porta Quântica
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Simulação Química Quântica&lt;/strong>: Simulação de alta precisão dos estados energéticos de moléculas e reações químicas.&lt;/li>
&lt;li>&lt;strong>Fatoração em Primos (Algoritmo de Shor)&lt;/strong>: Um algoritmo para fatorar enormes números compostos em tempo polinomial. Se for colocado em uso prático, a infraestrutura atual de criptografia de chave pública, como o RSA, será quebrada, tornando urgente a transição para a criptografia pós-quântica (PQC).&lt;/li>
&lt;li>&lt;strong>Busca em Banco de Dados (Algoritmo de Grover)&lt;/strong>: Quando se pesquisa dados em bancos de dados não classificados, computadores clássicos exigem etapas de $O(N)$, enquanto o algoritmo de Grover pode pesquisar em etapas de $O(\sqrt{N})$.&lt;/li>
&lt;/ul>
&lt;h3 id="63-algoritmos-híbridos-na-era-nisq-vqe-e-qaoa">6.3. Algoritmos Híbridos na Era NISQ: VQE e QAOA
&lt;/h3>&lt;p>Para superar as limitações dos circuitos quânticos rasos dos dispositivos NISQ, algoritmos como os &amp;ldquo;Algoritmos Quânticos Variacionais&amp;rdquo; (Variational Quantum Algorithms), que combinam os pontos fortes dos computadores quânticos e clássicos, estão chamando a atenção.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>VQE (Variational Quantum Eigensolver)&lt;/strong>: Um algoritmo para calcular a energia do estado fundamental de moléculas. Ele prepara os estados quânticos usando um circuito quântico parametrizado (Ansatz) e mede o valor esperado da energia $\langle \psi(\theta) | H | \psi(\theta) \rangle$. Usando esse valor esperado como função objetivo, algoritmos clássicos de otimização (como a descida de gradiente) são usados para atualizar os parâmetros $\theta$. A repetição disso até a convergência fornece o estado exato de energia da molécula.&lt;/li>
&lt;li>&lt;strong>QAOA (Quantum Approximate Optimization Algorithm)&lt;/strong>: Um algoritmo para resolver problemas de otimização combinatória usando o modelo de portas quânticas. Ele aproxima a evolução temporal adiabática do annealing quântico em operações de portas discretas por meio da &amp;ldquo;Trotterização&amp;rdquo; (Trotterization), aplicando alternadamente os Hamiltonianos para obter soluções aproximadas. O QAOA é considerado um meio promissor de resolver problemas de otimização na abordagem por portas.&lt;/li>
&lt;/ul>
&lt;div class="mermaid">graph TD
User["Problema do Usuário"] --> Formulation{"Natureza do Problema"}
Formulation -- "Otimização Combinatória" --> QA_Path["Annealing Quântico / Máquina de Ising"]
QA_Path --> QUBO["Formulação QUBO"]
QUBO --> DWave["Execução D-Wave"]
Formulation -- "Cálculos Químicos / Computação de Propósito Geral" --> Gate_Path["Modelo de Porta Quântica"]
Gate_Path --> Circuit["Design de Circuito Quântico (VQE / QAOA)"]
Circuit --> IBMGoogle["Execução de Hardware Quântico IBM / Google"]&lt;/div>
&lt;hr>
&lt;h2 id="7-conclusão">7. Conclusão
&lt;/h2>&lt;p>Tanto o Annealing Quântico quanto o Modelo de Porta Quântica são semelhantes no sentido de que utilizam as misteriosas propriedades da mecânica quântica como um recurso computacional, mas suas abordagens e objetivos finais são amplamente diferentes.&lt;/p>
&lt;ul>
&lt;li>O &lt;strong>Annealing Quântico&lt;/strong> é um &amp;ldquo;motor heurístico especializado&amp;rdquo; voltado para entregar de forma antecipada resultados práticos para problemas reais específicos de otimização combinatória. Diversas provas de conceito (PoCs) já estão em andamento por várias empresas.&lt;/li>
&lt;li>O &lt;strong>Modelo de Porta Quântica&lt;/strong> é um &amp;ldquo;computador quântico de propósito geral&amp;rdquo; com o potencial de abalar fundamentalmente o paradigma da ciência da computação, que vai desde simulações rigorosas em física e química até decodificação de criptografia. No entanto, é necessária pesquisa e desenvolvimento a longo prazo para superar o enorme obstáculo da correção de erros.&lt;/li>
&lt;/ul>
&lt;p>No futuro, espera-se que um ambiente de &lt;strong>&amp;ldquo;computação heterogênea&amp;rdquo; (Heterogeneous Computing)&lt;/strong> seja construído, tendo os supercomputadores clássicos (HPC) como o núcleo, enquanto as máquinas de annealing serão chamadas para tarefas de otimização e computadores quânticos baseados em portas para cálculos de química quântica.&lt;/p>
&lt;p>Os computadores quânticos ainda são uma tecnologia em desenvolvimento, mas estão evoluindo a passos largos, tanto em hardware quanto em algoritmos. Compreender a matemática do modelo de Ising e os fundamentos dos circuitos quânticos será uma grande ferramenta para a era dos &amp;ldquo;nativos quânticos&amp;rdquo; que está por vir.&lt;/p>
&lt;hr>
&lt;p>&lt;em>Este artigo é uma explicação abrangente dos conceitos básicos da computação quântica até as tendências mais recentes de hardware. Fique atento às futuras tendências de pesquisa.&lt;/em>&lt;/p></description></item><item><title>Simulando o Algoritmo de Shor em Python</title><link>http://kenji.blog/pt/p/shors-algorithm-simulation-python/</link><pubDate>Fri, 11 Sep 2026 08:00:00 +0900</pubDate><guid>http://kenji.blog/pt/p/shors-algorithm-simulation-python/</guid><description>&lt;img src="http://kenji.blog/p/shors-algorithm-simulation-python/img/eyecatch.jpg" alt="Featured image of post Simulando o Algoritmo de Shor em Python" />&lt;h1 id="1-introdução-a-crise-da-criptografia-trazida-pelos-computadores-quânticos">1. Introdução: A Crise da Criptografia Trazida pelos Computadores Quânticos
&lt;/h1>&lt;p>A maior parte da segurança na sociedade atual da internet depende de &lt;strong>sistemas de criptografia de chave pública&lt;/strong> (especialmente a criptografia RSA). Quando enviamos informações de cartão de crédito em compras online ou trocamos dados altamente confidenciais, o conteúdo dessa comunicação é fortemente protegido pela criptografia RSA.&lt;/p>
&lt;p>A base da segurança da criptografia RSA reside no fato matemático de que &amp;ldquo;&lt;strong>fatorar números inteiros gigantescos em primos é extremamente difícil para computadores clássicos (os PCs e supercomputadores que normalmente usamos)&lt;/strong>&amp;rdquo;. No entanto, o &amp;ldquo;&lt;strong>Algoritmo de Shor (Shor&amp;rsquo;s Algorithm)&lt;/strong>&amp;rdquo;, publicado por Peter Shor em 1994, virou essa premissa de cabeça para baixo. Foi matematicamente provado que, se o algoritmo de Shor for executado em um computador quântico de grande escala, a fatoração de primos, que levaria mais tempo que a idade do universo em um computador clássico, poderia ser resolvida em apenas alguns minutos a algumas horas.&lt;/p>
&lt;p>Neste artigo, explicaremos de forma minuciosa e detalhada como o algoritmo de Shor realiza essa fatoração de primos em alta velocidade, desde o seu mecanismo matemático até a implementação de uma simulação específica usando Python e o framework de computação quântica &lt;strong>Qiskit&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h1 id="2-a-mudança-dramática-na-complexidade-computacional-de-exponencial-para-tempo-polinomial">2. A Mudança Dramática na Complexidade Computacional: De Exponencial para Tempo Polinomial
&lt;/h1>&lt;p>Por que a fatoração de primos é difícil? Mesmo usando a &amp;ldquo;Peneira Geral dos Corpos de Números (General Number Field Sieve, GNFS)&amp;rdquo;, conhecida como o melhor algoritmo de fatoração em computadores clássicos, a sua complexidade computacional é subexponencial.&lt;/p>
&lt;p>A complexidade de tempo para fatorar um número composto de $N$ dígitos usando métodos clássicos é a seguinte:&lt;/p>
$$ O\left(\exp\left( c (\log N)^{1/3} (\log \log N)^{2/3} \right)\right) $$
&lt;p>Por esse motivo, apenas aumentando o tamanho da chave (por exemplo, para 2048 bits ou 4096 bits), o tempo necessário para a decodificação em computadores clássicos passa a ser de milhares ou dezenas de milhares de anos, o que é um tempo irreal.&lt;/p>
&lt;p>No entanto, ao usar o &lt;strong>Algoritmo de Shor&lt;/strong> em um computador quântico, a complexidade computacional é drasticamente reduzida para tempo polinomial em relação ao número de bits da entrada, $\log N$.&lt;/p>
$$ O((\log N)^3) $$
&lt;p>Isso significa que, se o número de bits for dobrado, enquanto o tempo de computação em um computador clássico aumentaria astronomicamente, no computador quântico o tempo aumentaria, no máximo, cerca de 8 vezes. Essa &lt;strong>redução da classe de complexidade de tempo exponencial para tempo polinomial (inclusão na classe BQP)&lt;/strong> é o verdadeiro poder do algoritmo de Shor.&lt;/p>
&lt;div class="mermaid">graph TD
A["Aumento do tamanho da entrada (número de bits) N"] --> B{"Escolha do algoritmo"}
B -->|Clássico: Peneira Geral dos Corpos de Números| C["Aumento subexponencial O(exp(...))"]
B -->|Quântico: Algoritmo de Shor| D["Tempo polinomial O((log N)^3)"]
C --> E["Milhares a bilhões de anos (Indecifrável)"]
D --> F["Minutos a horas (Decifrável em tempo real)"]&lt;/div>
&lt;hr>
&lt;h1 id="3-visão-geral-do-algoritmo-e-base-matemática">3. Visão Geral do Algoritmo e Base Matemática
&lt;/h1>&lt;p>O algoritmo de Shor não realiza tudo no computador quântico, na verdade. Ele é composto pela cooperação entre o pré-processamento e o pós-processamento realizados em computadores clássicos e a parte central (o algoritmo de descoberta de período) executada em um computador quântico.&lt;/p>
&lt;p>O fluxo geral do algoritmo é o seguinte:&lt;/p>
&lt;div class="mermaid">graph TD
A["Entrada: Número composto N a ser fatorado"] --> B["Escolher número aleatório a tal que a &lt; N"]
B --> C{"gcd(a, N) > 1 ?"}
C -- "Yes" --> D["Imprimir fator trivial gcd(a, N) e encerrar"]
C -- "No" --> E["Encontrar o período r de f(x) = a^x mod N com algoritmo quântico"]
E --> F{"r é par E a^(r/2) ≢ -1 mod N ?"}
F -- "No" --> B
F -- "Yes" --> G["Calcular os fatores p = gcd(a^(r/2) - 1, N), q = gcd(a^(r/2) + 1, N)"]
G --> H["Saída: p, q"]&lt;/div>
&lt;h2 id="reduzindo-a-fatoração-de-primos-ao-problema-de-descoberta-de-período">Reduzindo a Fatoração de Primos ao Problema de Descoberta de Período
&lt;/h2>&lt;p>A genialidade de Shor consistiu em converter o &amp;ldquo;&lt;strong>Problema de Fatoração de Primos&lt;/strong>&amp;rdquo; no &amp;ldquo;&lt;strong>Problema de Descoberta de Período (Order Finding Problem)&lt;/strong>&amp;rdquo;.&lt;/p>
&lt;p>Considere um inteiro $N$ (o número que queremos fatorar) e um inteiro $a$ co-primo a ele ($1 &lt; a &lt; N$). Definimos a seguinte função de exponenciação modular:&lt;/p>
$$ f(x) = a^x \bmod N $$
&lt;p>Essa função possui um certo período $r$. Ou seja, para qualquer $x$, temos $f(x+r) = f(x)$. Especialmente quando $x=0$, o menor inteiro positivo $r$ tal que:&lt;/p>
$$ a^r \equiv 1 \pmod N $$
&lt;p>é chamado de &amp;ldquo;ordem de $a$ módulo $N$&amp;rdquo;. Se conseguirmos encontrar esse período $r$, poderemos derivar os fatores primos da seguinte maneira.&lt;/p>
&lt;p>Rearranjando a equação, temos:
&lt;/p>
$$ a^r - 1 \equiv 0 \pmod N $$
&lt;p>
Se $r$ for par, podemos fatorá-la usando a fórmula da diferença de quadrados:
&lt;/p>
$$ (a^{r/2} - 1)(a^{r/2} + 1) \equiv 0 \pmod N $$
&lt;p>Isso significa que $N$ compartilha um divisor comum com $(a^{r/2} - 1)$ ou com $(a^{r/2} + 1)$ (desde que satisfaça a condição de que $a^{r/2} \not\equiv -1 \pmod N$). Portanto, usando o algoritmo de Euclides, podemos calcular:&lt;/p>
$$ p = \gcd(a^{r/2} - 1, N) $$
$$ q = \gcd(a^{r/2} + 1, N) $$
&lt;p>e encontrar os fatores primos não triviais $p, q$ de $N$. Esses cálculos (o cálculo do máximo divisor comum e a geração de números aleatórios) podem ser feitos muito rapidamente em computadores clássicos. O problema se resume a &lt;strong>como encontrar rapidamente o período $r$&lt;/strong>. Em computadores clássicos, encontrar o próprio período $r$ exige tempo exponencial. É aqui que entram os computadores quânticos.&lt;/p>
&lt;hr>
&lt;h1 id="4-a-parte-do-algoritmo-quântico-como-funciona-a-descoberta-do-período">4. A Parte do Algoritmo Quântico: Como Funciona a Descoberta do Período
&lt;/h1>&lt;p>A sub-rotina para encontrar o período $r$ usando um computador quântico consiste nos 4 passos a seguir.&lt;/p>
&lt;div class="mermaid">graph LR
subgraph "Transição de Estados Quânticos"
S1["|0⟩|0⟩ (Inicialização)"] --> S2["Porta H: Sobreposição Σ|x⟩|0⟩"]
S2 --> S3["Oráculo U: Σ|x⟩|a^x mod N⟩"]
S3 --> S4["QFT: Extração do período via interferência"]
S4 --> S5["Medição: Obtenção do valor aproximado y"]
end&lt;/div>
&lt;h2 id="passo-1-inicialização-e-sobreposição-do-registrador-quântico">Passo 1: Inicialização e Sobreposição do Registrador Quântico
&lt;/h2>&lt;p>Primeiro, preparamos dois registradores quânticos. O primeiro registrador é para a entrada de estados, e o segundo é para armazenar o resultado do cálculo da função.
O estado inicial é todo $|0\rangle$.&lt;/p>
$$ |\psi_0\rangle = |0\rangle_1 |0\rangle_2 $$
&lt;p>Aplicamos uma Porta Hadamard (Hadamard Gate) a todos os qubits do primeiro registrador, criando um estado de sobreposição de igual probabilidade para todas as entradas possíveis $x$ (de $0$ a $Q-1$, onde $Q=2^n$).&lt;/p>
$$ |\psi_1\rangle = \frac{1}{\sqrt{Q}} \sum_{x=0}^{Q-1} |x\rangle_1 |0\rangle_2 $$
&lt;p>Com isso, o computador quântico manterá os estados de todas as $Q$ entradas simultaneamente, em uma única operação. Essa é a poderosa fonte do &lt;strong>paralelismo quântico&lt;/strong>.&lt;/p>
&lt;h2 id="passo-2-aplicação-da-função-oráculo-exponenciação-modular">Passo 2: Aplicação da Função Oráculo (Exponenciação Modular)
&lt;/h2>&lt;p>Em seguida, usamos o circuito de operação quântica $U_f$ para calcular a função $f(x) = a^x \bmod N$ e armazenamos o resultado no segundo registrador.&lt;/p>
$$ |\psi_2\rangle = \frac{1}{\sqrt{Q}} \sum_{x=0}^{Q-1} |x\rangle_1 |a^x \bmod N\rangle_2 $$
&lt;p>Neste ponto, o primeiro e o segundo registradores estão em um estado de &lt;strong>entrelaçamento quântico (Entanglement)&lt;/strong>. Se (hipoteticamente) observarmos o segundo registrador e obtivermos um valor específico $k = a^{x_0} \bmod N$, o estado do primeiro registrador colapsará para uma sobreposição dos $x$ que resultam nesse valor $k$. Como o período da função é $r$, os estados restantes assumirão os valores $x_0, x_0+r, x_0+2r, \dots$ em saltos de $r$.&lt;/p>
$$ |\psi_3\rangle = \sqrt{\frac{r}{Q}} \sum_{j=0}^{M-1} |x_0 + j r\rangle_1 |k\rangle_2 $$
&lt;p>No entanto, não queremos saber $x_0$; queremos saber o próprio período $r$. Observar $r$ diretamente a partir deste estado é impossível. Portanto, utilizamos a Transformada Quântica de Fourier.&lt;/p>
&lt;h2 id="passo-3-interferência-de-fase-via-transformada-quântica-de-fourier-qft">Passo 3: Interferência de Fase via Transformada Quântica de Fourier (QFT)
&lt;/h2>&lt;p>Aplicamos a &lt;strong>Transformada Quântica de Fourier (Quantum Fourier Transform, QFT)&lt;/strong> ao primeiro registrador. A QFT é a versão quântica da clássica transformada discreta de Fourier, e transforma as amplitudes do vetor de estado. A ação da QFT em um estado de base $|x\rangle$ é definida como:&lt;/p>
$$ QFT |x\rangle = \frac{1}{\sqrt{Q}} \sum_{y=0}^{Q-1} \omega^{xy} |y\rangle $$
&lt;p>Onde $\omega = e^{2\pi i / Q}$.&lt;/p>
&lt;p>Ao aplicar a QFT, as amplitudes dos estados sofrem interferência. Sem entrar nos detalhes matemáticos, quando aplicamos a QFT a um estado com período $r$, as ondas causarão &lt;strong>interferência construtiva (Constructive Interference)&lt;/strong> apenas quando $y$ for extremamente próximo a um múltiplo inteiro de $Q/r$. Para os outros estados, as amplitudes de probabilidade serão canceladas por &lt;strong>interferência destrutiva (Destructive Interference)&lt;/strong>, aproximando-se de zero.&lt;/p>
&lt;h2 id="passo-4-medição-e-expansão-em-frações-contínuas">Passo 4: Medição e Expansão em Frações Contínuas
&lt;/h2>&lt;p>Por fim, medimos o primeiro registrador. O valor $y$ obtido pela medição satisfará a seguinte condição com alta probabilidade:&lt;/p>
$$ y \approx c \frac{Q}{r} \implies \frac{y}{Q} \approx \frac{c}{r} $$
&lt;p>($c$ é um inteiro desconhecido tal que $0 \le c &lt; r$)&lt;/p>
&lt;p>Aplicando o algoritmo clássico da &lt;strong>Expansão em Frações Contínuas (Continued Fraction Expansion)&lt;/strong> ao número racional obtido $y/Q$, podemos calcular a fração aproximada $c/r$ e extrair o período $r$ do denominador.&lt;/p>
&lt;hr>
&lt;h1 id="5-implementação-da-simulação-usando-python-e-qiskit">5. Implementação da Simulação usando Python e Qiskit
&lt;/h1>&lt;p>Como apenas a teoria não transmite o sentido real da coisa, vamos simular de fato o algoritmo de Shor usando Python e o framework de computação quântica da IBM, o &lt;strong>Qiskit&lt;/strong>.&lt;/p>
&lt;p>Aqui, implementaremos o cenário clássico e mais famoso: &lt;strong>&amp;ldquo;Fatorar $N=15$ utilizando $a=7$&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;h2 id="preparação-do-ambiente-de-execução">Preparação do Ambiente de Execução
&lt;/h2>&lt;p>Por favor, instale o Qiskit previamente.&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pip install qiskit qiskit-aer numpy
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="visão-geral-do-código-de-implementação-em-python">Visão Geral do Código de Implementação em Python
&lt;/h2>&lt;p>O código a seguir é um exemplo de implementação do algoritmo de Shor especializado para $N=15$ e $a=7$. Como construir um circuito genérico de exponenciação modular tem um custo computacional muito alto nos simuladores atuais, codificamos diretamente as operações das portas lógicas (hardcoding) especificamente para o caso de $a=7$.&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;span class="lnt"> 36
&lt;/span>&lt;span class="lnt"> 37
&lt;/span>&lt;span class="lnt"> 38
&lt;/span>&lt;span class="lnt"> 39
&lt;/span>&lt;span class="lnt"> 40
&lt;/span>&lt;span class="lnt"> 41
&lt;/span>&lt;span class="lnt"> 42
&lt;/span>&lt;span class="lnt"> 43
&lt;/span>&lt;span class="lnt"> 44
&lt;/span>&lt;span class="lnt"> 45
&lt;/span>&lt;span class="lnt"> 46
&lt;/span>&lt;span class="lnt"> 47
&lt;/span>&lt;span class="lnt"> 48
&lt;/span>&lt;span class="lnt"> 49
&lt;/span>&lt;span class="lnt"> 50
&lt;/span>&lt;span class="lnt"> 51
&lt;/span>&lt;span class="lnt"> 52
&lt;/span>&lt;span class="lnt"> 53
&lt;/span>&lt;span class="lnt"> 54
&lt;/span>&lt;span class="lnt"> 55
&lt;/span>&lt;span class="lnt"> 56
&lt;/span>&lt;span class="lnt"> 57
&lt;/span>&lt;span class="lnt"> 58
&lt;/span>&lt;span class="lnt"> 59
&lt;/span>&lt;span class="lnt"> 60
&lt;/span>&lt;span class="lnt"> 61
&lt;/span>&lt;span class="lnt"> 62
&lt;/span>&lt;span class="lnt"> 63
&lt;/span>&lt;span class="lnt"> 64
&lt;/span>&lt;span class="lnt"> 65
&lt;/span>&lt;span class="lnt"> 66
&lt;/span>&lt;span class="lnt"> 67
&lt;/span>&lt;span class="lnt"> 68
&lt;/span>&lt;span class="lnt"> 69
&lt;/span>&lt;span class="lnt"> 70
&lt;/span>&lt;span class="lnt"> 71
&lt;/span>&lt;span class="lnt"> 72
&lt;/span>&lt;span class="lnt"> 73
&lt;/span>&lt;span class="lnt"> 74
&lt;/span>&lt;span class="lnt"> 75
&lt;/span>&lt;span class="lnt"> 76
&lt;/span>&lt;span class="lnt"> 77
&lt;/span>&lt;span class="lnt"> 78
&lt;/span>&lt;span class="lnt"> 79
&lt;/span>&lt;span class="lnt"> 80
&lt;/span>&lt;span class="lnt"> 81
&lt;/span>&lt;span class="lnt"> 82
&lt;/span>&lt;span class="lnt"> 83
&lt;/span>&lt;span class="lnt"> 84
&lt;/span>&lt;span class="lnt"> 85
&lt;/span>&lt;span class="lnt"> 86
&lt;/span>&lt;span class="lnt"> 87
&lt;/span>&lt;span class="lnt"> 88
&lt;/span>&lt;span class="lnt"> 89
&lt;/span>&lt;span class="lnt"> 90
&lt;/span>&lt;span class="lnt"> 91
&lt;/span>&lt;span class="lnt"> 92
&lt;/span>&lt;span class="lnt"> 93
&lt;/span>&lt;span class="lnt"> 94
&lt;/span>&lt;span class="lnt"> 95
&lt;/span>&lt;span class="lnt"> 96
&lt;/span>&lt;span class="lnt"> 97
&lt;/span>&lt;span class="lnt"> 98
&lt;/span>&lt;span class="lnt"> 99
&lt;/span>&lt;span class="lnt">100
&lt;/span>&lt;span class="lnt">101
&lt;/span>&lt;span class="lnt">102
&lt;/span>&lt;span class="lnt">103
&lt;/span>&lt;span class="lnt">104
&lt;/span>&lt;span class="lnt">105
&lt;/span>&lt;span class="lnt">106
&lt;/span>&lt;span class="lnt">107
&lt;/span>&lt;span class="lnt">108
&lt;/span>&lt;span class="lnt">109
&lt;/span>&lt;span class="lnt">110
&lt;/span>&lt;span class="lnt">111
&lt;/span>&lt;span class="lnt">112
&lt;/span>&lt;span class="lnt">113
&lt;/span>&lt;span class="lnt">114
&lt;/span>&lt;span class="lnt">115
&lt;/span>&lt;span class="lnt">116
&lt;/span>&lt;span class="lnt">117
&lt;/span>&lt;span class="lnt">118
&lt;/span>&lt;span class="lnt">119
&lt;/span>&lt;span class="lnt">120
&lt;/span>&lt;span class="lnt">121
&lt;/span>&lt;span class="lnt">122
&lt;/span>&lt;span class="lnt">123
&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">numpy&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">np&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">qiskit&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">QuantumCircuit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">qiskit_aer&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">AerSimulator&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">qiskit.visualization&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">plot_histogram&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">fractions&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">Fraction&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">math&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. Função para construir a Transformada Quântica de Fourier inversa (QFT†)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">qft_dagger&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;Gera um circuito para a Transformada Quântica de Fourier inversa de n qubits&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">QuantumCircuit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Porta SWAP para inverter a ordem&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">qubit&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">swap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">qubit&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">qubit&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Aplicação de portas de fase controlada e portas H&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">j&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">m&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">j&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cp&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">pi&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="nb">float&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="o">**&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">j&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">m&lt;/span>&lt;span class="p">)),&lt;/span> &lt;span class="n">m&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">j&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">h&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">j&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">name&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;QFT_dagger&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">qc&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. Função para construir a operação de exponenciação modular controlada de 7^x mod 15&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">c_amod15&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">power&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;Gera a porta U controlada para uma a e uma potência específicas (exclusivo para N=15)&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">U&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">QuantumCircuit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">_&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">power&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Lógica hardcoded para 7^x mod 15 no caso de a=7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">13&lt;/span>&lt;span class="p">]:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">U&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">swap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">U&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">swap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">U&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">swap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">7&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="p">]:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">U&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">swap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">U&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">swap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">U&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">swap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">11&lt;/span>&lt;span class="p">]:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">U&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">swap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">U&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">swap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">7&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">11&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">13&lt;/span>&lt;span class="p">]:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">q&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">U&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">q&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">U&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">U&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">to_gate&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">U&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">name&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">^&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">power&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> mod 15&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">c_U&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">U&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">control&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">c_U&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. Construção do circuito quântico principal&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">shor_circuit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n_count&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># n_count: número de bits do registrador de controle&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># O registrador alvo tem 4 bits para representar de 0 a 15&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">QuantumCircuit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n_count&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n_count&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"># Inicialização do primeiro registrador (registrador de controle, gerando a sobreposição)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">q&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n_count&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">h&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">q&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"># Inicializando o segundo registrador (registrador alvo) para |1&amp;gt; (0001)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">n_count&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"># Aplicação da operação de exponenciação modular controlada (oráculo)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">q&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n_count&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Aplicação da operação elevada a 2^q&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">c_amod15&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="o">**&lt;/span>&lt;span class="n">q&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 class="n">q&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">n_count&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">4&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"># Aplicação da QFT inversa no primeiro registrador&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">qft_dagger&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n_count&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n_count&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"># Medição do primeiro registrador&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">measure&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n_count&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n_count&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">qc&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"># --- Seção de Execução ---&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;__main__&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="n">N&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">15&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">n_count&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">8&lt;/span> &lt;span class="c1"># Usamos 8 qubits no registrador de controle (Q=256)&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;Configuração da busca: N=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">N&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">, a=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">, qubits de controle=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">n_count&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>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Geração do circuito&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">shor_circuit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n_count&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"># Execução no simulador&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">sim&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">AerSimulator&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># O transpile é recomendado nas versões mais recentes do Qiskit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kn">from&lt;/span> &lt;span class="nn">qiskit&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">transpile&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">compiled_circuit&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">transpile&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">qc&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">sim&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">job&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sim&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">run&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">compiled_circuit&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">shots&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">1024&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">job&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">counts&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">result&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_counts&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="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">Resultados da medição (cadeia de bits: vezes observadas):&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="k">for&lt;/span> &lt;span class="n">bitstring&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">count&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">counts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">items&lt;/span>&lt;span class="p">():&lt;/span>
&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; &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">bitstring&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">count&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> vezes&amp;#34;&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"># Pós-processamento clássico: identificação do período r através da expansão em frações contínuas&lt;/span>
&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="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">--- Cálculo do período e fatoração em primos ---&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="n">phases&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">output&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">counts&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Converter cadeia de bits para decimal&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">decimal&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">output&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Fase = valor medido / 2^n_count&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">phase&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">decimal&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="o">**&lt;/span>&lt;span class="n">n_count&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">phases&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">phase&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"># Obter a fração aproximada por meio de frações contínuas. O denominador máximo é N=15&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">frac&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Fraction&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">phase&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">limit_denominator&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">15&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">r&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">frac&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">denominator&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;Valor observado: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">decimal&lt;/span>&lt;span class="si">:&lt;/span>&lt;span class="s2">3d&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> | Fase: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">phase&lt;/span>&lt;span class="si">:&lt;/span>&lt;span class="s2">.4f&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> | Fração contínua: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">frac&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> | Período estimado r = &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">r&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>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Verificar se o período r é par e gera resultados válidos&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">r&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">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">guess1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">math&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="o">**&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">r&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">guess2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">math&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="o">**&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">r&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">guess1&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="ow">or&lt;/span> &lt;span class="n">guess2&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">]:&lt;/span>
&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; =&amp;gt; Sucesso! Os fatores primos de &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">N&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> são &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">guess1&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> e &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">guess2&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="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&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; =&amp;gt; Apenas fatores triviais. Tente novamente.&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="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&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; =&amp;gt; Falha, pois o período é ímpar.&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="análise-do-código-e-resultados-da-execução">Análise do Código e Resultados da Execução
&lt;/h2>&lt;p>Quando executamos o código acima, obtemos picos específicos (valores observados) com alta probabilidade como resultado da medição do registrador de controle. Com &lt;code>n_count=8&lt;/code> ($Q=256$), em um computador quântico ideal (ou simulador), valores observados como &lt;code>0&lt;/code>, &lt;code>64&lt;/code>, &lt;code>128&lt;/code>, &lt;code>192&lt;/code> aparecerão com probabilidades esmagadoras.&lt;/p>
&lt;p>Se dividirmos esses por $Q=256$, a fase $y/Q$ será $0.0$, $0.25$, $0.5$ e $0.75$, respectivamente.
Expandindo essas fases em frações contínuas, obtemos:&lt;/p>
&lt;ul>
&lt;li>$0.25 \to 1/4$ (Período estimado $r=4$)&lt;/li>
&lt;li>$0.50 \to 1/2$ (Período estimado $r=2$)&lt;/li>
&lt;li>$0.75 \to 3/4$ (Período estimado $r=4$)&lt;/li>
&lt;/ul>
&lt;p>Usando o período obtido de $r=4$, calculamos os fatores primos.
Como $a=7$ e $r=4$:
$p = \gcd(7^2 - 1, 15) = \gcd(48, 15) = 3$
$q = \gcd(7^2 + 1, 15) = \gcd(50, 15) = 5$&lt;/p>
&lt;p>E assim, conseguimos fatorar magistralmente o número $15 = 3 \times 5$.&lt;/p>
&lt;blockquote>
&lt;p>[!TIP]
Se o valor de medição $y=128$ (fase $0.5$) for obtido, o denominador será $2$, e em vez do período real $r=4$, obteremos um divisor dele. Em casos como este, você pode encontrar o período real executando o algoritmo várias vezes ou verificando múltiplos do $r$ obtido.&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="6-desafios-para-aplicação-prática-e-os-limites-da-era-nisq">6. Desafios para Aplicação Prática e os Limites da Era NISQ
&lt;/h1>&lt;p>Embora tenha sido fácil fatorar $N=15$ em um simulador, fatorar o RSA-2048 (um número de 617 dígitos decimais) usado no mundo real ainda esbarra em várias barreiras para os computadores quânticos atuais.&lt;/p>
&lt;p>A época em que vivemos hoje é chamada de &lt;strong>Era NISQ (Noisy Intermediate-Scale Quantum: computadores quânticos de escala intermediária com ruído)&lt;/strong>. Os qubits são extremamente vulneráveis a ruídos ambientais externos e frequentemente sofrem &amp;ldquo;descoerência&amp;rdquo; (decoherence) no meio dos cálculos, quebrando o estado quântico.&lt;/p>
&lt;p>Para executar circuitos profundos (com um grande número de portas) de maneira precisa, como o algoritmo de Shor, é essencial a &lt;strong>Correção de Erros Quânticos (Quantum Error Correction)&lt;/strong>, que corrige esses ruídos. Para criar um &amp;ldquo;qubit lógico&amp;rdquo; livre de ruído, é necessário codificar milhares de &amp;ldquo;qubits físicos&amp;rdquo; usando métodos como o Código de Superfície (Surface Code).&lt;/p>
&lt;p>Para quebrar a criptografia RSA de 2048 bits, estima-se que sejam necessários milhares de qubits lógicos perfeitos, e para alcançá-los, seriam necessários computadores quânticos tolerantes a falhas (Fault-Tolerant Quantum Computers) equipados com &lt;strong>milhões a dezenas de milhões de qubits físicos&lt;/strong>. Como até os processadores quânticos mais avançados atualmente possuem apenas algumas centenas a milhares de qubits físicos, a criptografia do mundo não será imediatamente quebrada.&lt;/p>
&lt;blockquote>
&lt;p>[!WARNING]
No entanto, existe um modelo de ameaça conhecido como &amp;ldquo;Store Now, Decrypt Later (Guarde Agora, Descriptografe Depois)&amp;rdquo;. Os invasores podem armazenar em massa comunicações confidenciais criptografadas atuais e planejar a estratégia de decifrá-las todas de uma vez daqui a 10 a 20 anos, quando computadores quânticos poderosos estiverem concluídos.&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="7-transição-para-criptografia-pós-quântica-pqc">7. Transição para Criptografia Pós-Quântica (PQC)
&lt;/h1>&lt;p>Em preparação para a chegada desse &amp;ldquo;Q-Day (O dia em que os computadores quânticos quebrarão a criptografia)&amp;rdquo;, os pesquisadores de criptografia do mundo todo, liderados pelo Instituto Nacional de Padrões e Tecnologia dos EUA (NIST), estão avançando no desenvolvimento da &lt;strong>Criptografia Pós-Quântica (Post-Quantum Cryptography, PQC)&lt;/strong>.&lt;/p>
&lt;p>A PQC se baseia em novos problemas matemáticos (como problemas de reticulados, polinômios multivariados, funções hash, etc.) que são matematicamente considerados como ineficientes de se resolver, mesmo utilizando o algoritmo de Shor (ou o algoritmo de Grover). Já foram escolhidos algoritmos como &amp;ldquo;CRYSTALS-Kyber&amp;rdquo; e &amp;ldquo;CRYSTALS-Dilithium&amp;rdquo; como normas padrão, e sua introdução gradual começou em serviços como o iMessage da Apple e em protocolos de comunicação de vários navegadores da web.&lt;/p>
&lt;p>Para os engenheiros que gerenciam a infraestrutura de TI, incorporar a &amp;ldquo;Cripto-Agilidade (Crypto-Agility: a capacidade de alterar o esquema de criptografia rapidamente)&amp;rdquo; em seus sistemas para fazer a transição da criptografia RSA e de curvas elípticas existente para a PQC será uma grande missão nos próximos anos.&lt;/p>
&lt;hr>
&lt;h1 id="8-conclusão">8. Conclusão
&lt;/h1>&lt;p>Neste artigo, fornecemos uma explicação minuciosa e abrangente — com cerca de 10.000 caracteres —, desde a base teórica e matemática do algoritmo de Shor, passando pelo mecanismo de extração de período usando a transformada quântica de Fourier, até chegarmos ao código específico de simulação em Python e Qiskit.&lt;/p>
&lt;p>O fato de as leis físicas microscópicas da mecânica quântica virarem de cabeça para baixo a teoria da complexidade computacional e a teoria da criptografia, fundamentais para a ciência da informação em escala macro, é uma das mudanças de paradigma mais emocionantes da história da ciência. Vale a pena continuar acompanhando a evolução das tecnologias de computação quântica e a disputa contra as novas técnicas de criptografia que se desenvolvem para combatê-las.&lt;/p>
&lt;p>Recomendo muito que você execute o código Python introduzido aqui em seu próprio ambiente e experimente a &amp;ldquo;magia da computação&amp;rdquo; gerada pela sobreposição e interferência dos estados quânticos.&lt;/p>
&lt;hr>
&lt;p>&lt;strong>Referências&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Shor, P. W. (1994). &amp;ldquo;Algorithms for quantum computation: discrete logarithms and factoring&amp;rdquo;. Proceedings 35th Annual Symposium on Foundations of Computer Science.&lt;/li>
&lt;li>Nielsen, M. A., &amp;amp; Chuang, I. L. (2010). &amp;ldquo;Quantum Computation and Quantum Information&amp;rdquo;. Cambridge University Press.&lt;/li>
&lt;li>Qiskit Documentation: &lt;a class="link" href="https://qiskit.org/documentation/" target="_blank" rel="noopener"
>https://qiskit.org/documentation/&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>【Ilustrado PQC】Comparação dos principais algoritmos de criptografia pós-quântica</title><link>http://kenji.blog/pt/p/post-quantum-cryptography-algorithms-comparison/</link><pubDate>Fri, 11 Sep 2026 07:00:00 +0900</pubDate><guid>http://kenji.blog/pt/p/post-quantum-cryptography-algorithms-comparison/</guid><description>&lt;img src="http://kenji.blog/p/post-quantum-cryptography-algorithms-comparison/img/eyecatch.jpg" alt="Featured image of post 【Ilustrado PQC】Comparação dos principais algoritmos de criptografia pós-quântica" />&lt;h2 id="1-introdução-a-crise-da-criptografia-trazida-pelos-computadores-quânticos">1. Introdução: A &amp;ldquo;crise da criptografia&amp;rdquo; trazida pelos computadores quânticos
&lt;/h2>&lt;p>Na sociedade da internet moderna, a tecnologia de criptografia de chave pública é infraestrutura indispensável para proteger a confidencialidade das comunicações e a integridade dos dados. A criptografia RSA e a criptografia de curva elíptica (ECC), amplamente utilizadas hoje, dependem de barreiras matemáticas, respectivamente a &amp;ldquo;dificuldade de fatoração de números compostos gigantescos&amp;rdquo; e a &amp;ldquo;dificuldade do problema do logaritmo discreto em curvas elípticas&amp;rdquo;, para garantir a segurança. Em computadores clássicos (os computadores que usamos hoje, incluindo supercomputadores), está provado que resolver esses problemas matemáticos levaria mais tempo do que a idade do universo, o que tem sido a base de sua segurança.&lt;/p>
&lt;p>No entanto, essa premissa robusta está prestes a ser fundamentalmente derrubada pelo progresso na teoria e aplicação prática dos &lt;strong>computadores quânticos&lt;/strong>. O &amp;ldquo;&lt;strong>Algoritmo de Shor&lt;/strong>&amp;rdquo;, publicado em 1994 pelo criptógrafo Peter Shor, provou teoricamente que problemas de fatoração de primos e logaritmos discretos podem ser resolvidos em &amp;ldquo;tempo polinomial&amp;rdquo; executando-os em um computador quântico universal tolerante a falhas (CRQC: Cryptographically Relevant Quantum Computer) com desempenho suficiente. Isso significa que toda a criptografia de chave pública atualmente em uso será neutralizada.&lt;/p>
&lt;div class="mermaid">graph TD
A["Computador quântico de grande escala (CRQC)"] -->|Execução| B["Algoritmo de Shor"]
B -->|Decodificação em tempo polinomial| C["Problema de fatoração (RSA)"]
B -->|Decodificação em tempo polinomial| D["Problema de logaritmo discreto (ECC / ECDSA)"]
C --> E["Interceptação, alteração de dados e falsificação de comunicação criptografada"]
D --> E
F["Store Now, Decrypt Later (SNDL)"] --> E&lt;/div>
&lt;p>É muito perigoso pensar que &amp;ldquo;não há problema porque a conclusão em grande escala dos computadores quânticos ainda está a décadas de distância&amp;rdquo;. Isso ocorre porque o método de ataque chamado &lt;strong>Store Now, Decrypt Later (SNDL: Armazene agora, descriptografe depois)&lt;/strong> já se tornou uma ameaça real. Trata-se de um ataque em que nações maliciosas ou organizações de hackers armazenam grandes quantidades de dados de comunicação atualmente criptografados (como o tráfego TLS) e os descriptografam todos no momento em que computadores quânticos poderosos se tornarem disponíveis no futuro. Segredos de estado, informações de infraestrutura e dados médicos que devem ser protegidos a longo prazo já estão expostos a essa ameaça.&lt;/p>
&lt;p>Além disso, para criptografia de chave simétrica (como AES) e funções de hash (como SHA-256), existe o &lt;strong>Algoritmo de Grover&lt;/strong>, descoberto em 1996. Isso reduz a complexidade computacional dos ataques de força bruta (brute force) à sua raiz quadrada. Em outras palavras, o nível de segurança do AES-128 é efetivamente reduzido pela metade, para 2 à potência de 64, portanto, na era quântica, recomenda-se usar chaves mais longas e comprimentos de hash como AES-256 e SHA-384.&lt;/p>
&lt;p>A &lt;strong>Criptografia Pós-Quântica (PQC)&lt;/strong>, baseada em novos problemas matemáticos difíceis de decifrar, mesmo usando computadores quânticos, nasceu para combater essa crise criptográfica sem precedentes. Neste artigo, com base nos resultados do processo de padronização PQC liderado pelo Instituto Nacional de Padrões e Tecnologia dos EUA (NIST), explicaremos os principais algoritmos PQC em detalhes extremos, desde sua base matemática até seus mecanismos e comparação de arquitetura.&lt;/p>
&lt;hr>
&lt;h2 id="2-todo-o-escopo-e-história-do-projeto-de-padronização-pqc-do-nist">2. Todo o escopo e história do projeto de padronização PQC do NIST
&lt;/h2>&lt;p>A transição da tecnologia de criptografia leva anos ou até décadas, incluindo o redesenho de protocolos, atualizações de sistema, substituição de hardware, etc. Por esse motivo, criptógrafos de todo o mundo vêm avançando na pesquisa PQC desde cedo. O NIST dos EUA desempenhou um papel central nisso. O NIST abriu o processo de padronização PQC ao público em 2016 e aceitou propostas de algoritmos de criptografia completamente novos da comunidade criptográfica global.&lt;/p>
&lt;p>As duas categorias principais para padronização foram as seguintes:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Criptografia de chave pública / Mecanismo de encapsulamento de chaves (KEM: Key Encapsulation Mechanism)&lt;/strong>: Um mecanismo para compartilhar de forma segura uma chave simétrica para criptografar o caminho de comunicação, como em conexões TLS.&lt;/li>
&lt;li>&lt;strong>Assinaturas digitais (Digital Signatures)&lt;/strong>: Um mecanismo para provar que os dados não foram alterados e que não há falsificação pelo remetente (autenticidade) em atualizações de software e certificados digitais.&lt;/li>
&lt;/ol>
&lt;p>Após quase 6 anos de feroz avaliação, análise e competição criptoanalítica (Rodada 1 à Rodada 3), alguns algoritmos também foram submetidos a uma avaliação adicional na Rodada 4. Como resultado, em 2024, os seguintes algoritmos foram oficialmente emitidos como Padrões Federais de Processamento de Informação (FIPS) e foram estabelecidos como padrões globais futuros.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>FIPS 203 (ML-KEM)&lt;/strong>: KEM baseado em CRYSTALS-Kyber&lt;/li>
&lt;li>&lt;strong>FIPS 204 (ML-DSA)&lt;/strong>: Assinatura digital baseada em CRYSTALS-Dilithium&lt;/li>
&lt;li>&lt;strong>FIPS 205 (SLH-DSA)&lt;/strong>: Assinatura baseada em hash sem estado baseada em SPHINCS+&lt;/li>
&lt;li>&lt;strong>(Planejado para formulação futura) FN-DSA&lt;/strong>: Assinatura digital baseada em FALCON&lt;/li>
&lt;/ul>
&lt;p>Cada um desses algoritmos selecionados se baseia em diferentes &amp;ldquo;problemas de dificuldade&amp;rdquo; matemáticos, garantindo diversidade (Crypto Agility) de modo que, mesmo se uma vulnerabilidade fatal for descoberta em um algoritmo no futuro, o sistema inteiro não entrará em colapso. No processo de padronização, a criptografia baseada em reticulados (Lattice-based cryptography) assumiu o papel principal principalmente do ponto de vista do desempenho, mas a criptografia baseada em hash e a criptografia baseada em código foram adotadas como backups fortes.&lt;/p>
&lt;hr>
&lt;h2 id="3-classificação-das-principais-abordagens-matemáticas-para-pqc">3. Classificação das principais abordagens matemáticas para PQC
&lt;/h2>&lt;p>Os algoritmos PQC são categorizados principalmente nas 5 áreas a seguir com base nos problemas matemáticos em que baseiam sua segurança. Neste artigo, nos aprofundaremos principalmente nas três primeiras.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Criptografia baseada em reticulados (Lattice-based Cryptography)&lt;/strong>:
Baseia-se no Problema do Vetor Mais Curto (SVP) e no Problema do Vetor Mais Próximo (CVP) em espaços de reticulados multidimensionais, e no problema LWE derivado deles. É o centro da padronização do NIST, incluindo Kyber, Dilithium e FALCON. Possui o melhor equilíbrio entre velocidade de processamento, tamanho da chave pública e tamanho do texto cifrado, sendo adequado para uso geral.&lt;/li>
&lt;li>&lt;strong>Criptografia baseada em hash (Hash-based Cryptography)&lt;/strong>:
Baseia sua segurança unicamente na &amp;ldquo;resistência à colisão&amp;rdquo; e &amp;ldquo;unidirecionalidade&amp;rdquo; das funções de hash criptográficas (como SHA-2 e SHAKE). É aplicável apenas a assinaturas digitais (SPHINCS+, etc.), mas tem a prova matemática mais forte de segurança e é caracterizada por uma resistência extremamente alta a ataques matemáticos desconhecidos.&lt;/li>
&lt;li>&lt;strong>Criptografia baseada em código (Code-based Cryptography)&lt;/strong>:
Baseado na teoria de códigos de correção de erros, depende da dificuldade do Problema de Decodificação de Síndrome (Syndrome Decoding Problem). O Classic McEliece, proposto na década de 1970, é representativo e, embora tenha uma longa história e segurança comprovada, o tamanho da chave pública é extremamente grande, chegando a megabytes.&lt;/li>
&lt;li>&lt;strong>Criptografia polinomial multivariada (Multivariate Polynomial Cryptography)&lt;/strong>:
Baseia-se na dificuldade de encontrar soluções para um sistema de equações quadráticas simultâneas multivariadas sobre um corpo finito (problema MQ). Foi proposto principalmente para assinaturas digitais (como Rainbow), mas durante a rodada final do NIST, descobriu-se um método de ataque poderoso que o decifrou em alguns dias em um único PC, levando muitos algoritmos a serem retirados da padronização.&lt;/li>
&lt;li>&lt;strong>Criptografia baseada em isogenia (Isogeny-based Cryptography)&lt;/strong>:
Baseado no problema de encontrar caminhos em grafos de isogenia (Isogeny) de curvas elípticas. Com um tamanho de chave muito pequeno, era esperado que fosse o sucessor legítimo da ECC, mas seu candidato final, &amp;ldquo;SIKE&amp;rdquo;, foi completamente decifrado em poucas horas num PC normal usando matemática clássica (como o ataque de Castryck-Decru) em 2022, resultando num final dramático que simboliza a dificuldade e o terror do design de PQC.&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="4-o-abismo-da-criptografia-baseada-em-reticulados-a-base-matemática-do-problema-lwe-e-do-module-lwe">4. O abismo da criptografia baseada em reticulados: A base matemática do problema LWE e do Module-LWE
&lt;/h2>&lt;p>Atualmente considerada a mais promissora e o centro da padronização, a &lt;strong>criptografia baseada em reticulados&lt;/strong>. Na raiz de sua segurança está o &lt;strong>Problema LWE (Learning with Errors: Aprendizado com Erros)&lt;/strong>. Proposto por Oded Regev em 2005, essa conquista inovadora lhe rendeu o Prêmio Gödel. A compreensão moderna da PQC é impossível sem entender o problema LWE.&lt;/p>
&lt;h3 id="41-o-que-é-o-problema-lwe-learning-with-errors">4.1. O que é o problema LWE (Learning with Errors)?
&lt;/h3>&lt;p>Primeiro, vamos considerar um sistema simples de equações lineares. Suponha que, sob um certo módulo $q$ (módulo $q$), temos uma matriz aleatória conhecida $A$, um vetor secreto desconhecido $\vec{s}$, e seu produto $\vec{b}$ é dado.&lt;/p>
$$ \vec{b} = A\vec{s} \pmod q $$
&lt;p>Neste caso, é fácil encontrar o desconhecido $\vec{s}$ a partir das informações públicas $A$ e $\vec{b}$. Usando o clássico &amp;ldquo;método de eliminação de Gauss&amp;rdquo;, $\vec{s}$ pode ser facilmente calculado em tempo polinomial.&lt;/p>
&lt;p>No entanto, adicionar um &amp;ldquo;pequeno erro (ruído) intencional&amp;rdquo; a esta equação aumenta drasticamente a dificuldade do problema. Este é o &lt;strong>problema LWE&lt;/strong>.&lt;/p>
&lt;p>Preparamos um vetor secreto desconhecido $\vec{s} \in \mathbb{Z}_q^n$ e uma matriz escolhida aleatoriamente $A \in \mathbb{Z}_q^{m \times n}$. Além disso, preparamos um vetor de erro $\vec{e} \in \mathbb{Z}_q^m$, escolhido de acordo com uma distribuição normal ou binomial, cujos &amp;ldquo;valores dos elementos são suficientemente pequenos&amp;rdquo;, e calculamos $\vec{b}$ da seguinte forma:&lt;/p>
$$ \vec{b} = A\vec{s} + \vec{e} \pmod q $$
&lt;p>O &lt;strong>Problema LWE de Busca (Search LWE)&lt;/strong> é o problema de &amp;ldquo;encontrar a informação secreta $\vec{s}$ a partir da informação pública $(A, \vec{b})$&amp;rdquo;. Devido à existência deste erro $\vec{e}$, se você tentar métodos algébricos como a eliminação de Gauss, o erro $\vec{e}$ será amplificado como uma bola de neve durante a adição e subtração das equações, tornando-se indistinguível de valores aleatórios e, em última análise, colapsando.&lt;/p>
&lt;p>A maravilha do problema LWE é que existe uma prova teórica forte (redução) de que, a menos que haja um algoritmo quântico que possa resolver os problemas de complexidade do pior caso (Worst-case hardness) no reticulado, como o GapSVP (Problema de Decisão do Vetor Mais Curto) ou SIVP (Problema de Vetores Independentes Mais Curtos), o problema LWE também não pode ser resolvido no caso médio (Average-case). Em outras palavras, mesmo chaves criptográficas geradas aleatoriamente têm garantia de forte segurança apoiada por limites teóricos.&lt;/p>
&lt;h3 id="42-aumento-drástico-na-eficiência-através-do-ring-lwe-e-module-lwe">4.2. Aumento drástico na eficiência através do Ring-LWE e Module-LWE
&lt;/h3>&lt;p>O problema LWE normal (Standard LWE) tem uma base de segurança muito clara, mas o tamanho da matriz $A$ se torna muito grande, resultando em chaves na ordem de megabytes, tornando-o impraticável. A abordagem proposta para resolver isso foi usar anéis polinomiais (Polynomial Rings) para introduzir estrutura algébrica.&lt;/p>
&lt;p>No &lt;strong>problema Ring-LWE&lt;/strong>, em vez de simples vetores e matrizes, usamos os elementos (polinômios) de um anel polinomial $R_q$. O anel polinomial ciclotômico a seguir é comumente usado nos padrões do NIST:&lt;/p>
$$ R_q = \mathbb{Z}_q[X]/(X^n + 1) $$
&lt;p>Aqui, $n$ é uma potência de 2 (por exemplo: 256) e $q$ é um número primo apropriado. Neste anel, calculamos $b = a \cdot s + e \pmod q$ usando elementos $a, s, e \in R_q$. Como um único polinômio $a$ tem $n$ coeficientes, os dados podem ser consideravelmente compactados, e usando a &lt;strong>NTT (Transformada Teórica dos Números: Number Theoretic Transform)&lt;/strong>, que é uma versão de corpo finito da Transformada Rápida de Fourier (FFT), a multiplicação de polinômios torna-se ultrarrápida com complexidade $O(n \log n)$.&lt;/p>
&lt;p>No entanto, o Ring-LWE tinha a preocupação de que &amp;ldquo;vulnerabilidades desconhecidas poderiam existir devido à estrutura algébrica especial do anel&amp;rdquo;. Além disso, para alterar o nível de segurança (por exemplo, equivalente a AES-128, 192, 256), o próprio grau do polinômio $n$ precisava ser alterado, e com isso, toda a implementação, como o algoritmo NTT, tinha que ser reescrita, apresentando um desafio de engenharia.&lt;/p>
&lt;p>Portanto, o &lt;strong>problema Module-LWE (M-LWE)&lt;/strong> foi adotado pelos algoritmos padronizados Kyber e Dilithium. Module-LWE é um compromisso, situando-se exatamente entre o Standard LWE, sem estrutura, e o Ring-LWE, excessivamente estruturado. Ele usa uma matriz $k \times k$ (módulo) cujos elementos são componentes do anel polinomial $R_q$.&lt;/p>
$$ \vec{b} = A\vec{s} + \vec{e} \pmod{R_q} \quad (A \in R_q^{k \times k}, \vec{s}, \vec{e} \in R_q^k) $$
&lt;p>A maior vantagem do Module-LWE é que, mantendo o grau do polinômio $n$ constante ($n=256$ no padrão NIST), o nível de segurança pode ser facilmente escalado simplesmente mudando a dimensão da matriz $k$.
Por exemplo, no caso do Kyber, a dimensão $k$ é ajustada da seguinte forma:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Kyber512 (Nível 1)&lt;/strong>: $k = 2$ (equivalente a AES-128)&lt;/li>
&lt;li>&lt;strong>Kyber768 (Nível 3)&lt;/strong>: $k = 3$ (equivalente a AES-192)&lt;/li>
&lt;li>&lt;strong>Kyber1024 (Nível 5)&lt;/strong>: $k = 4$ (equivalente a AES-256)&lt;/li>
&lt;/ul>
&lt;p>Isso tornou possível reutilizar 100% do código NTT subjacente e circuitos de hardware de operações polinomiais em todos os níveis de segurança, melhorando drasticamente a segurança e a eficiência da implementação.&lt;/p>
&lt;hr>
&lt;h2 id="5-crystals-kyber-ml-kem-o-mecanismo-de-encapsulamento-de-chaves-de-próxima-geração">5. CRYSTALS-Kyber (ML-KEM): O Mecanismo de Encapsulamento de Chaves de Próxima Geração
&lt;/h2>&lt;p>O CRYSTALS-Kyber, oficialmente padronizado como &lt;strong>FIPS 203 (ML-KEM)&lt;/strong>, é um mecanismo de encapsulamento de chaves (KEM) baseado no problema Module-LWE descrito acima. No futuro, se tornará o padrão global de fato para compartilhar chaves de sessão com segurança em TLS 1.3, SSH, etc.&lt;/p>
&lt;h3 id="51-arquitetura-do-kem-key-encapsulation-mechanism">5.1. Arquitetura do KEM (Key Encapsulation Mechanism)
&lt;/h3>&lt;p>Na era da PQC, a abordagem de encapsulamento de KEM torna-se padrão, em vez da abordagem direta como no RSA, onde &amp;ldquo;o cliente cria uma chave simétrica e a criptografa com a chave pública do servidor e a envia&amp;rdquo;.&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant Client as "Cliente (Alice)"
participant Server as "Servidor (Bob)"
Note over Client: "ML-KEM KeyGen()"
Client->>Client: "Gera a chave secreta (sk) e a chave pública (pk)"
Client->>Server: "Envia a chave pública (pk)"
Note over Server: "ML-KEM Encaps()"
Server->>Server: "Gera uma chave simétrica aleatória (K)"
Server->>Server: "Encapsula K com pk para criar o texto cifrado (c)"
Server->>Client: "Envia o texto cifrado (c)"
Note over Client: "ML-KEM Decaps()"
Client->>Client: "Descriptografa o texto cifrado (c) usando a chave secreta (sk)"
Client->>Client: "Desencapsula para extrair a chave simétrica (K)"
Note over Client, Server: "Inicia a comunicação criptografada usando a chave simétrica compartilhada (K) via AES, etc."&lt;/div>
&lt;h3 id="52-o-mecanismo-algorítmico-interno-do-kyber-e-a-transformada-de-fujisaki-okamoto">5.2. O mecanismo algorítmico interno do Kyber e a Transformada de Fujisaki-Okamoto
&lt;/h3>&lt;p>O design do Kyber é extremamente refinado. Primeiro, constrói-se um esquema de criptografia de chave pública (Kyber.CPAPKE) seguro apenas contra CPA (Ataque de Texto Simples Escolhido). Em seguida, aplicando um método criptográfico muito poderoso chamado &lt;strong>Transformada de Fujisaki-Okamoto (Fujisaki-Okamoto Transform)&lt;/strong>, ele é atualizado para um KEM completo, seguro até mesmo contra CCA (Ataque de Texto Cifrado Escolhido Adaptativo).&lt;/p>
&lt;p>Os mecanismos principais de criptografia e descriptografia do CPAPKE são os seguintes:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>Geração de Chave (Key Generation)&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>A partir de um valor semente aleatório, gera uma matriz $A \in R_q^{k \times k}$ no domínio NTT. O módulo $q$ usado é $3329$.&lt;/li>
&lt;li>Um vetor secreto $\vec{s}$ e um vetor de erro $\vec{e}$ com coeficientes pequenos são amostrados de uma distribuição binomial centralizada (CBD).&lt;/li>
&lt;li>Calcula $\vec{t} = A\vec{s} + \vec{e}$. A chave pública é $(A, \vec{t})$ e a chave secreta é $\vec{s}$. (Na prática, $A$ é revelado como um valor de semente para economizar largura de banda).&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Criptografia (Encryption)&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>Uma mensagem de 32 bytes a ser compartilhada (o material para a chave simétrica) $m$ é codificada em um polinômio.&lt;/li>
&lt;li>Um novo vetor aleatório $\vec{r}$ e pequenos erros $\vec{e_1}, e_2$ são gerados.&lt;/li>
&lt;li>$\vec{u} = A^T\vec{r} + \vec{e_1}$&lt;/li>
&lt;li>$v = \vec{t}^T\vec{r} + e_2 + \lfloor q/2 \rceil \cdot m$&lt;/li>
&lt;li>O texto cifrado é $(\vec{u}, v)$.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Descriptografia (Decryption)&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>O receptor calcula $v - \vec{s}^T\vec{u}$.&lt;/li>
&lt;li>Expandindo esta fórmula, obtemos o seguinte:
$v - \vec{s}^T\vec{u} = (\vec{t}^T\vec{r} + e_2 + \lfloor q/2 \rceil \cdot m) - \vec{s}^T(A^T\vec{r} + \vec{e_1})$&lt;/li>
&lt;li>Substituindo $\vec{t} = A\vec{s} + \vec{e}$ aqui, o termo principal $\vec{s}^TA^T\vec{r}$ se cancela.&lt;/li>
&lt;li>O que resta é $\lfloor q/2 \rceil \cdot m + (\vec{e}^T\vec{r} + e_2 - \vec{s}^T\vec{e_1})$.&lt;/li>
&lt;li>O termo entre parênteses é &amp;ldquo;o produto ou soma de pequenos erros&amp;rdquo;, então permanece um valor pequeno (ruído) como um todo. Portanto, julgando pelos limites se cada coeficiente está perto de $0$ ou de $q/2$, os bits (0 ou 1) da mensagem original $m$ podem ser perfeitamente restaurados sem erros.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;p>A maior força do Kyber é sua impressionante &lt;strong>velocidade de processamento&lt;/strong> e &lt;strong>tamanho de chave moderado&lt;/strong>. Para o Kyber768, o tamanho da chave pública é de 1.184 bytes e o tamanho do texto cifrado é de 1.088 bytes. Embora sejam maiores em comparação com o RSA-3072 (tamanho da chave em torno de 384 bytes), eles podem caber dentro do MTU (Maximum Transmission Unit) das comunicações modernas da internet sem fragmentação de pacotes, tendo um efeito adverso quase nulo na latência da rede.&lt;/p>
&lt;hr>
&lt;h2 id="6-crystals-dilithium-ml-dsa-assinatura-digital-de-uso-geral-baseada-em-reticulado">6. CRYSTALS-Dilithium (ML-DSA): Assinatura digital de uso geral baseada em reticulado
&lt;/h2>&lt;p>Na padronização de assinaturas digitais, algoritmos com diferentes filosofias de design competiram mesmo na mesma abordagem de criptografia baseada em reticulado. Dentre eles, &lt;strong>CRYSTALS-Dilithium&lt;/strong> foi selecionado como &lt;strong>FIPS 204 (ML-DSA)&lt;/strong> para ser a assinatura digital de uso geral.&lt;/p>
&lt;h3 id="61-paradigma-fiat-shamir-com-abortos">6.1. Paradigma Fiat-Shamir com Abortos
&lt;/h3>&lt;p>Como o Kyber, Dilithium é um esquema de assinatura digital baseado no problema Module-LWE (e no problema Module-SIS). O design é baseado no paradigma extremamente importante chamado &amp;ldquo;&lt;strong>Fiat-Shamir with Aborts (Transformada de Fiat-Shamir com Interrupções)&lt;/strong>&amp;rdquo;.&lt;/p>
&lt;p>A transformada Fiat-Shamir em si é um método padrão para converter um protocolo de prova de conhecimento zero interativo em uma assinatura digital não interativa. O provador (assinante) gera um compromisso $y$, calcula $w = Ay$, passa-o por uma função de hash para obter um desafio aleatório $c$ e calcula a resposta $z = y + cs$.&lt;/p>
&lt;p>No entanto, quando isso é aplicado de forma simples à criptografia baseada em reticulado, a distribuição da resposta $z$ torna-se enviesada dependendo do valor da chave secreta $s$, levando a um problema fatal (vazamento matemático do tipo canal lateral) em que as informações da chave secreta $s$ vazam gradualmente para um invasor que observa um grande número de assinaturas.&lt;/p>
&lt;p>A equipe de design do Dilithium (Lyubashevsky et al.) introduziu um método chamado &amp;ldquo;&lt;strong>Rejection Sampling (Amostragem de Rejeição)&lt;/strong>&amp;rdquo;: se os coeficientes do resultado do cálculo da assinatura $z$ não se enquadrarem em um intervalo de limite de segurança predefinido, todo o processo de assinatura é abortado, e os cálculos são reiniciados desde o início usando um novo número aleatório $y$.&lt;/p>
&lt;p>Como resultado, a assinatura final $z$ tem uma distribuição perfeitamente uniforme, completamente independente da chave secreta, evitando totalmente qualquer vazamento matemático de informações.&lt;/p>
&lt;h3 id="62-vantagens-e-facilidade-de-implementação-do-dilithium">6.2. Vantagens e facilidade de implementação do Dilithium
&lt;/h3>&lt;p>Uma grande vantagem de design do Dilithium é que ele &lt;strong>não usa de forma alguma&lt;/strong> &amp;ldquo;amostragem de distribuição gaussiana&amp;rdquo; ou &amp;ldquo;operações de ponto flutuante&amp;rdquo; complexas no processo de geração de assinatura. Como pode ser implementado apenas com amostragem de distribuição uniforme, aritmética modular de inteiros simples, NTT e funções de hash (SHAKE), é fácil de implementar de forma segura e com tempo constante (Constant-time) em uma ampla variedade de ambientes, de microcontroladores embarcados a servidores em nuvem. Isso lhe dá uma forte resistência contra ataques físicos de canal lateral, como ataques de tempo.&lt;/p>
&lt;hr>
&lt;h2 id="7-falcon-fn-dsa-assinatura-de-reticulado-extremamente-compacta">7. FALCON (FN-DSA): Assinatura de reticulado extremamente compacta
&lt;/h2>&lt;p>O NIST selecionou &lt;strong>FALCON (Fast-Fourier Lattice-based Compact Signatures over NTRU)&lt;/strong>, outra assinatura baseada em reticulado com características diferentes do Dilithium, como um candidato de padronização (atualmente em elaboração como FN-DSA).&lt;/p>
&lt;h3 id="71-reticulado-ntru-e-amostragem-gaussiana">7.1. Reticulado NTRU e Amostragem Gaussiana
&lt;/h3>&lt;p>A maior característica do FALCON é que ele usa &lt;strong>reticulados NTRU (N-th degree Truncated polynomial Ring Units)&lt;/strong>, com uma longa história que remonta a 1996, em vez do problema LWE. Além disso, adota o paradigma &amp;ldquo;&lt;strong>Hash-and-Sign (Fazer hash e assinar)&lt;/strong>&amp;rdquo; baseado na estrutura GPV (Gentry-Peikert-Vaikuntanathan).&lt;/p>
&lt;p>No Hash-and-Sign, o valor do hash da mensagem é o ponto alvo no espaço, e o ponto no reticulado mais próximo desse ponto (a solução aproximada para o Problema do Vetor Mais Próximo) torna-se a assinatura. Isso requer a amostragem de pontos de acordo com uma distribuição gaussiana discreta, usando uma &amp;ldquo;base curta e de boa qualidade&amp;rdquo; que é a chave secreta.&lt;/p>
&lt;p>O FALCON acelerou drasticamente esse cálculo pesado usando uma técnica chamada &amp;ldquo;&lt;strong>Ortogonalização Rápida de Fourier (Fast Fourier Orthogonalization: FFO)&lt;/strong>&amp;rdquo;.&lt;/p>
&lt;h3 id="72-vantagens-e-desvantagens-do-falcon">7.2. Vantagens e Desvantagens do FALCON
&lt;/h3>&lt;p>A vantagem esmagadora do FALCON é que &lt;strong>o tamanho da assinatura e da chave pública são extremamente pequenos (compactos)&lt;/strong>. Enquanto o tamanho da assinatura do Dilithium3 é de cerca de 3.309 bytes, o tamanho da assinatura do FALCON-512 é de apenas cerca de 666 bytes. A chave pública também é bem pequena, 897 bytes, tornando-se uma salvação em ambientes com limitações severas de largura de banda, dispositivos IoT e determinados protocolos de rede.&lt;/p>
&lt;p>No entanto, há uma desvantagem significativa. Como a amostragem gaussiana discreta, que requer cálculos complexos de &lt;strong>ponto flutuante (64 bits IEEE 754)&lt;/strong>, é obrigatória na geração de assinaturas, é extremamente difícil conseguir uma implementação em tempo constante para evitar o vazamento de tempo, e o código se torna massivo. Devido a isso, o FALCON é posicionado como um algoritmo altamente especializado para aplicações específicas, ao invés de uso geral (como o Dilithium).&lt;/p>
&lt;div class="mermaid">graph LR
A["Requisitos de assinatura digital"] --> B{"Qual é a restrição prioritária?"}
B -->|"Simplicidade de implementação, uso geral, facilidade de tempo constante"| C["Dilithium (ML-DSA)"]
B -->|"Minimizar largura de banda, compactação do tamanho de dados"| D["FALCON (FN-DSA)"]
C --> E["Certificados TLS de uso geral, assinatura digital de software"]
D --> F["Protocolos com limitações rigorosas de tamanho de pacote, ambientes especiais"]&lt;/div>
&lt;hr>
&lt;h2 id="8-sphincs-slh-dsa-assinatura-baseada-em-hash-que-ostenta-a-maior-segurança">8. SPHINCS+ (SLH-DSA): Assinatura baseada em hash que ostenta a maior segurança
&lt;/h2>&lt;p>Em preparação para o pior cenário, onde a segurança da criptografia baseada em reticulados seja no futuro quebrada por avanços de matemáticos geniais, o NIST estabeleceu o &lt;strong>FIPS 205 (SLH-DSA)&lt;/strong>, ou seja, &lt;strong>SPHINCS+&lt;/strong>, como padrão, possuindo uma abordagem completamente diferente da criptografia de reticulado.&lt;/p>
&lt;p>O SPHINCS+ é classificado como uma &lt;strong>assinatura baseada em hash&lt;/strong>. O fundamento para sua segurança depende de um único ponto: &amp;ldquo;a função hash criptográfica usada (como SHA-2 ou SHAKE256) tem resistência a colisões e unidirecionalidade&amp;rdquo;. Como não depende de problemas matemáticos com uma estrutura algébrica específica, como LWE ou fatoração, ele possui uma segurança extremamente robusta (a segurança mais conservadora): não importa quão poderosos os algoritmos quânticos se tornem no futuro, isso pode ser contra-atacado simplesmente estendendo o comprimento da saída da função hash.&lt;/p>
&lt;h3 id="81-arquitetura-stateless-com-wots-e-fors">8.1. Arquitetura Stateless com WOTS+ e FORS
&lt;/h3>&lt;p>O histórico das assinaturas baseadas em hash é antigo, remontando à Assinatura Lamport e à Assinatura de Uso Único de Winternitz (WOTS) da década de 1970. Eram chaves descartáveis que &amp;ldquo;podiam ser usadas para assinar com segurança apenas uma vez&amp;rdquo;. Para permitir o uso múltiplo, algoritmos como XMSS (eXtended Merkle Signature Scheme) e LMS foram desenvolvidos, combinando a Árvore de Merkle para gerenciar um número infinito de chaves descartáveis com um único hash raiz.&lt;/p>
&lt;p>No entanto, XMSS e LMS tinham uma falha grave: eram &amp;ldquo;&lt;strong>Stateful (com retenção de estado)&lt;/strong>&amp;rdquo;. Exigia-se gravar o estado do índice de &amp;ldquo;qual chave descartável foi usada&amp;rdquo; na memória não-volátil rigorosamente a cada assinatura. Se, por exemplo, ao restaurar um snapshot de uma máquina virtual, o estado retrocedesse e a mesma chave fosse usada duas vezes, a chave secreta vazaria instantaneamente e o sistema entraria em colapso.&lt;/p>
&lt;p>O SPHINCS+ é uma assinatura baseada em hash &amp;ldquo;&lt;strong>Stateless (sem retenção de estado)&lt;/strong>&amp;rdquo; que resolve essa complexidade do gerenciamento de estado.
A tecnologia principal é a seguinte combinação:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>WOTS+ (Winternitz One-Time Signature Plus)&lt;/strong>: Uma assinatura básica de uso único.&lt;/li>
&lt;li>&lt;strong>FORS (Forest of Random Subsets)&lt;/strong>: Tecnologia de Assinatura de Poucas Vezes (Few-Time Signature). A segurança é mantida mesmo se a mesma chave for reutilizada algumas vezes.&lt;/li>
&lt;li>&lt;strong>Hyper-Tree (Estrutura de árvore gigante)&lt;/strong>: Uma estrutura massiva com Árvores de Merkle sobrepostas em múltiplas camadas.&lt;/li>
&lt;/ol>
&lt;p>Na execução da assinatura, em vez de gerenciar o estado, o SPHINCS+ seleciona aleatoriamente usando números pseudoaleatórios uma das enormes quantidades de chaves FORS na base da Hyper-Tree e assina com ela. Como o número de folhas da árvore é astronomicamente grande, a probabilidade de escolher a mesma chave duas vezes por acaso (colisão) é baixa o suficiente para ser ignorada, realizando assim a propriedade stateless.&lt;/p>
&lt;p>A única e maior fraqueza do SPHINCS+ é o &lt;strong>tamanho gigantesco de suas assinaturas&lt;/strong>. Dependendo dos parâmetros, o tamanho pode variar de 17 kilobytes a 49 kilobytes, e a velocidade de geração de assinatura é esmagadoramente mais lenta em comparação com a criptografia de reticulado. Assim, o SPHINCS+ se destina a usos onde as assinaturas não são muito frequentes e a segurança absoluta de longo prazo é fortemente exigida, como assinatura para atualizações de software ou certificados de Autoridade de Certificação (CA) Raiz, ao invés da navegação web do dia-a-dia.&lt;/p>
&lt;hr>
&lt;h2 id="9-criptografia-baseada-em-código-o-bom-e-velho-gigante-classic-mceliece">9. Criptografia baseada em código: O bom e velho gigante Classic McEliece
&lt;/h2>&lt;p>Uma abordagem importante que ainda está sendo avaliada como candidato final da Rodada 4 no processo de padronização do NIST é o &lt;strong>Classic McEliece&lt;/strong>, uma &lt;strong>criptografia baseada em código&lt;/strong>.&lt;/p>
&lt;p>Proposto em 1978 por Robert McEliece, este algoritmo, juntamente com o RSA, é um dos mais antigos na história da criptografia de chave pública. Utiliza &amp;ldquo;Códigos de Goppa&amp;rdquo;, um código geométrico algébrico. Baseia-se no &amp;ldquo;&lt;strong>Problema de Decodificação de Síndrome (Syndrome Decoding Problem)&lt;/strong>&amp;rdquo;, em que a mensagem é criptografada adicionando um erro intencional (vetor de ruído), e apenas aquele com a matriz de verificação de paridade do código de Goppa como chave secreta pode usar recursos poderosos de correção de erros para remover o ruído e recuperar a mensagem original.&lt;/p>
$$ \vec{c} = \vec{m} G + \vec{e} $$
&lt;p>
(Onde $G$ é a matriz geradora codificada (scrambled) atuando como chave pública, e $\vec{e}$ é o vetor de erro com peso $t$)&lt;/p>
&lt;p>O que é mais incrível no Classic McEliece é o seu retrospecto avassalador: &lt;strong>apesar de mais de 40 anos desde a sua proposta, e sujeito a intensas pesquisas de criptoanálise em todo o mundo, nenhuma vulnerabilidade fundamental foi descoberta&lt;/strong>. Ele tem a &amp;ldquo;segurança robusta mais bem comprovada pelo tempo&amp;rdquo; na PQC.&lt;/p>
&lt;p>Além disso, tem a vantagem de um tamanho de texto cifrado extremamente pequeno (apenas cerca de 100 a 200 bytes). No entanto, há a desvantagem fatal de que &lt;strong>o tamanho da chave pública chega à ordem de megabytes (MB)&lt;/strong>. Mesmo no nível de segurança mais baixo (equivalente ao AES-128), a chave pública é de cerca de 250 KB e excede 1 MB nos níveis mais altos.&lt;/p>
&lt;p>Portanto, não é aplicável em cenários onde a chave pública é transmitida pela rede em toda comunicação, como no handshake TLS. No entanto, em casos de uso especiais onde a chave pública pode ser pré-implantada no sistema (hardcoded), como na troca de chaves pré-compartilhadas em VPNs, chaves públicas no firmware ou comunicações por satélite, continua a ser investigada como uma escolha extremamente promissora devido à sua sólida segurança.&lt;/p>
&lt;hr>
&lt;h2 id="10-comparação-de-desempenho-de-cada-algoritmo-pqc-e-trade-offs">10. Comparação de desempenho de cada algoritmo PQC e trade-offs
&lt;/h2>&lt;p>Aqui está um resumo das características de desempenho nos níveis comuns de segurança (níveis 2 a 3 do NIST, equivalentes ao AES-128 a 192) para os principais algoritmos explicados até agora.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Algoritmo (Nome padrão)&lt;/th>
&lt;th style="text-align:left">Categoria&lt;/th>
&lt;th style="text-align:left">Base Matemática&lt;/th>
&lt;th style="text-align:left">Tamanho da chave pública&lt;/th>
&lt;th style="text-align:left">Tamanho da chave secreta&lt;/th>
&lt;th style="text-align:left">Tamanho texto cifrado/assin.&lt;/th>
&lt;th style="text-align:left">Tendência da vel. de processamento&lt;/th>
&lt;th style="text-align:left">Principais características e usos&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Kyber768&lt;/strong>&lt;br>(ML-KEM)&lt;/td>
&lt;td style="text-align:left">KEM&lt;/td>
&lt;td style="text-align:left">Module-LWE&lt;/td>
&lt;td style="text-align:left">1.184 Bytes&lt;/td>
&lt;td style="text-align:left">2.400 Bytes&lt;/td>
&lt;td style="text-align:left">1.088 Bytes&lt;/td>
&lt;td style="text-align:left">Muito rápida&lt;/td>
&lt;td style="text-align:left">Melhor equilíbrio de tamanho e velocidade. Padrão genérico de KEM para TLS 1.3, etc.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Dilithium3&lt;/strong>&lt;br>(ML-DSA)&lt;/td>
&lt;td style="text-align:left">Assinatura&lt;/td>
&lt;td style="text-align:left">Module-LWE&lt;/td>
&lt;td style="text-align:left">1.952 Bytes&lt;/td>
&lt;td style="text-align:left">4.032 Bytes&lt;/td>
&lt;td style="text-align:left">3.309 Bytes&lt;/td>
&lt;td style="text-align:left">Geração e verificação rápidas&lt;/td>
&lt;td style="text-align:left">Implementação simples. Padrão genérico de assinatura digital.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>FALCON-512&lt;/strong>&lt;br>(FN-DSA)&lt;/td>
&lt;td style="text-align:left">Assinatura&lt;/td>
&lt;td style="text-align:left">Reticulado NTRU&lt;/td>
&lt;td style="text-align:left">897 Bytes&lt;/td>
&lt;td style="text-align:left">1.281 Bytes&lt;/td>
&lt;td style="text-align:left">666 Bytes&lt;/td>
&lt;td style="text-align:left">Geração de assin. um pouco lenta, verificação ultrarrápida&lt;/td>
&lt;td style="text-align:left">Tamanho de assinatura mínimo. Porém, exige ponto flutuante. Focado em sistemas embarcados/IoT.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>SPHINCS+&lt;/strong>&lt;br>(SLH-DSA)&lt;/td>
&lt;td style="text-align:left">Assinatura&lt;/td>
&lt;td style="text-align:left">Função Hash&lt;/td>
&lt;td style="text-align:left">32 Bytes&lt;/td>
&lt;td style="text-align:left">64 Bytes&lt;/td>
&lt;td style="text-align:left">Aprox. 17.000 Bytes&lt;/td>
&lt;td style="text-align:left">Geração muito lenta&lt;/td>
&lt;td style="text-align:left">Risco quase nulo de colapso matemático. Uso para alta segurança como certificados raiz.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Classic McEliece&lt;/strong>&lt;/td>
&lt;td style="text-align:left">KEM&lt;/td>
&lt;td style="text-align:left">Código Goppa&lt;/td>
&lt;td style="text-align:left">&lt;strong>Aprox. 1,04 MB&lt;/strong>&lt;/td>
&lt;td style="text-align:left">13.568 Bytes&lt;/td>
&lt;td style="text-align:left">&lt;strong>188 Bytes&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Encapsulamento rápido&lt;/td>
&lt;td style="text-align:left">40 anos de histórico de segurança. Chave pública imensa. Para ambientes com hardcode.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="compreendendo-os-trade-offs">Compreendendo os trade-offs
&lt;/h3>&lt;p>No mundo PQC, não existe um único algoritmo mágico que seja &amp;ldquo;pequeno em tamanho, rápido em velocidade e com garantia matemática perfeita&amp;rdquo;.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Padrões da Internet (Kyber / Dilithium)&lt;/strong>: Possuem o melhor equilíbrio de desempenho, e são os mais adequados para um substituto direto (drop-in replacement) dos atuais RSA/ECC.&lt;/li>
&lt;li>&lt;strong>Conservadorismo Final (SPHINCS+)&lt;/strong>: Selecionado quando você deseja uma garantia absoluta (seguro) contra avanços matemáticos futuros, mesmo com o sacrifício do tamanho dos dados e da velocidade de processamento.&lt;/li>
&lt;li>&lt;strong>Para ambientes especiais (FALCON / Classic McEliece)&lt;/strong>: Armas de especialização escolhidas com base nas restrições do ambiente, como quando a largura de banda de comunicação é extremamente restrita ou quando a pré-distribuição é possível.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="11-desafios-de-implementação-prática-e-a-solução-realística-da-criptografia-híbrida">11. Desafios de implementação prática e a solução realística da &amp;ldquo;Criptografia Híbrida&amp;rdquo;
&lt;/h2>&lt;p>Com a conclusão da padronização pelo NIST e a emissão oficial do FIPS, a transição PQC das infraestruturas de TI mundiais (&lt;strong>migração PQC&lt;/strong>) começou a sério. O navegador Chrome do Google, o iMessage da Apple (Protocolo PQ3), provedores de rede como Cloudflare, entre outros, já integraram o suporte PQC em seus protocolos e iniciaram operações reais.&lt;/p>
&lt;p>Porém, existe um risco muito elevado em realizar uma transição completa e imediata para novos algoritmos de criptografia. Se, por exemplo, um matemático genial descobrir uma falha fatal de ataque (uma vulnerabilidade matemática decifrável até mesmo em um computador clássico) na criptografia de reticulado como o Kyber nos próximos anos, todo o sistema que depende dele será exposto instantaneamente.&lt;/p>
&lt;p>Uma abordagem realística e recomendada para mitigar este risco de incerteza é a &amp;ldquo;&lt;strong>Criptografia Híbrida (Hybrid Cryptography)&lt;/strong>&amp;rdquo;.&lt;/p>
&lt;p>Na criptografia híbrida, você usa simultaneamente a criptografia clássica com longo histórico de confiabilidade (por exemplo: criptografia de curva elíptica como X25519) e o novo PQC (por exemplo: Kyber768) para realizar a troca de chaves. Os componentes de chaves comuns são gerados de forma independente por cada algoritmo e, finalmente, as duas partes são combinadas por meio de uma Função de Derivação de Chave (KDF) segura para gerar o segredo mestre final.&lt;/p>
&lt;div class="mermaid">graph TD
A["Cliente"] -->|① Envia chave pública X25519 + chave pública Kyber| B["Servidor"]
B -->|② Retorna chave compartilhada X25519 + texto cifrado encapsulado Kyber| A
A --> C{"Derivação do Segredo Mestre (KDF)"}
B --> C
C -->|Entrada: (chave comum X25519) || (chave comum Kyber)| D["Chave de comunicação segura (AES-256 / ChaCha20)"]
D -->|"Resistente às ameaças quânticas e às vulnerabilidades clássicas"| E["Comunicação segura por criptografia híbrida (TLS 1.3)"]&lt;/div>
&lt;p>Isso realiza uma postura de segurança robusta de dois níveis: &amp;ldquo;Mesmo que um computador quântico seja construído e a ECC seja quebrada, o Kyber protegerá a comunicação&amp;rdquo;, e inversamente, &amp;ldquo;Mesmo que uma falha matemática desconhecida seja descoberta no Kyber, a ECC protegerá a comunicação&amp;rdquo;. Como exemplo representativo, existe o rascunho &lt;strong>X25519MLKEM768 (antigo X25519Kyber768)&lt;/strong> sendo padronizado na IETF, e a comunicação entre os navegadores Web atuais e servidores de ponta já é realizada usando exatamente esse método híbrido.&lt;/p>
&lt;p>Além disso, na concepção do sistema, o conceito de &amp;ldquo;&lt;strong>Crypto Agility (Agilidade Criptográfica)&lt;/strong>&amp;rdquo; – a arquitetura que permite não depender excessivamente de um algoritmo de criptografia específico e de poder mudar rapidamente para outro algoritmo (por exemplo, de Kyber para McEliece, de Dilithium para SPHINCS+) se um algoritmo for quebrado – se tornará um requisito indispensável para o desenvolvimento de sistemas no futuro.&lt;/p>
&lt;hr>
&lt;h2 id="12-conclusão-uma-nova-fronteira-tecnológica-criptográfica">12. Conclusão: Uma Nova Fronteira Tecnológica Criptográfica
&lt;/h2>&lt;p>Ironia do destino, o computador quântico, uma tecnologia dos sonhos da humanidade, tornou-se a maior ameaça a romper as paredes defensivas matemáticas, a &amp;ldquo;fatoração&amp;rdquo; e o &amp;ldquo;problema do logaritmo discreto&amp;rdquo;, nas quais confiamos por muitos anos. No entanto, criptógrafos de todo o mundo, sem se renderem, abriram domínios matemáticos multidimensionais muito mais profundos e complexos baseados em teorias de reticulados, árvores de funções hash e códigos de correção de erros, construindo novas muralhas defensivas conhecidas como Criptografia Pós-Quântica (PQC).&lt;/p>
&lt;p>O término da padronização de FIPS 203 (ML-KEM), FIPS 204 (ML-DSA) e FIPS 205 (SLH-DSA) pelo NIST não é a linha de chegada. É apenas o primeiro passo na épica jornada de migração para PQC que durará décadas. Para engenheiros de software e arquitetos de sistemas, o grande desafio tecnológico será como adaptar de forma otimizada os protocolos de rede e os sistemas para o &amp;ldquo;aumento no tamanho da chave&amp;rdquo; e &amp;ldquo;mudanças nos custos de computação&amp;rdquo; que esses novos algoritmos trazem.&lt;/p>
&lt;p>O conflito entre os computadores quânticos e a criptografia é a área emocionante onde a exploração matemática e a evolução da tecnologia da humanidade se cruzam da forma mais intensa. Esperamos que através deste artigo, você tenha conseguido compreender profundamente as belas teorias matemáticas por trás da PQC e os mecanismos surpreendentes de cada algoritmo que moldará o futuro da cibersegurança.&lt;/p>
&lt;hr>
&lt;p>&lt;em>Referências:&lt;/em>&lt;/p>
&lt;ul>
&lt;li>&lt;em>Programa de Padronização de Criptografia Pós-Quântica do NIST&lt;/em>&lt;/li>
&lt;li>&lt;em>FIPS 203: Padrão para Mecanismo de Encapsulamento de Chaves Baseado em Módulo de Reticulado&lt;/em>&lt;/li>
&lt;li>&lt;em>FIPS 204: Padrão para Assinaturas Digitais Baseado em Módulo de Reticulado&lt;/em>&lt;/li>
&lt;li>&lt;em>FIPS 205: Padrão para Assinaturas Digitais Stateless Baseadas em Hash&lt;/em>&lt;/li>
&lt;/ul></description></item></channel></rss>