<?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/zh-tw/categories/quantum-computing/</link><description>Recent content in Quantum Computing on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>zh-tw</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 20:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/zh-tw/categories/quantum-computing/index.xml" rel="self" type="application/rss+xml"/><item><title>使用 Qiskit 的量子程式設計超入門</title><link>http://kenji.blog/zh-tw/p/qiskit-quantum-programming-intro/</link><pubDate>Fri, 11 Sep 2026 20:00:00 +0900</pubDate><guid>http://kenji.blog/zh-tw/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 使用 Qiskit 的量子程式設計超入門" />&lt;h2 id="1-簡介">1. 簡介
&lt;/h2>&lt;p>現代的電腦（古典電腦）戲劇性地改變了我們的生活，並以高度的運算能力支撐著社會的各個層面。然而，對於某些特定的問題（例如：巨大數字的質因數分解、複雜分子結構的模擬、最佳化問題等），已知即使是目前最先進的超級電腦，也需要比宇宙年齡更長的時間才能解決。&lt;/p>
&lt;p>有望突破這種「古典電腦的極限」的就是&lt;strong>量子電腦（Quantum Computer）&lt;/strong>。藉由將量子力學的奇妙特性（疊加與量子糾纏）作為運算資源來運用，被認為能夠將特定問題的處理速度戲劇性地加快。&lt;/p>
&lt;p>在本文中，我們將使用 IBM 開源提供的量子運算框架 &lt;strong>Qiskit&lt;/strong>，邁出進入量子程式設計世界的第一步。這是一份非常詳細的入門指南，從物理與數學的基礎開始仔細解說，涵蓋了實際使用 Python 撰寫程式碼，直到在模擬器上運行量子線路的整個過程。&lt;/p>
&lt;hr>
&lt;h2 id="2-支撐量子運算的物理與數學基礎">2. 支撐量子運算的物理與數學基礎
&lt;/h2>&lt;p>為了理解量子程式設計，首先必須了解量子力學的基本概念。在此，我們將解說量子位元、疊加與量子糾纏這三個重要的支柱。&lt;/p>
&lt;h3 id="21-古典位元與量子位元qubit">2.1 古典位元與量子位元（Qubit）
&lt;/h3>&lt;p>古典電腦的資訊單位是「位元（Bit）」。位元總是處於 &lt;code>0&lt;/code> 或 &lt;code>1&lt;/code> 其中一種狀態。&lt;/p>
&lt;p>另一方面，量子電腦資訊的最小單位被稱為&lt;strong>量子位元（Qubit: Quantum bit）&lt;/strong>。量子位元不僅能處於 &lt;code>0&lt;/code> 和 &lt;code>1&lt;/code> 的狀態，還能&lt;strong>同時保持這兩種狀態&lt;/strong>。&lt;/p>
&lt;p>在數學上，量子位元的狀態 $|\psi\rangle$ 表示為基底狀態 $|0\rangle$ 和 $|1\rangle$ 的線性組合（疊加）。&lt;/p>
$$
|\psi\rangle = \alpha|0\rangle + \beta|1\rangle
$$
&lt;p>這裡的 $\alpha$ 和 $\beta$ 是複數，分別代表觀測到狀態 $|0\rangle$ 和 $|1\rangle$ 的機率幅。根據量子力學的基本原理，機率的總和必須為 1，因此滿足以下歸一化條件：&lt;/p>
$$
|\alpha|^2 + |\beta|^2 = 1
$$
&lt;p>也就是說，當對這個量子位元進行「測量（觀測）」時，得到 $|0\rangle$ 的機率為 $|\alpha|^2$，得到 $|1\rangle$ 的機率為 $|\beta|^2$。在測量前，狀態只能以機率來決定，這是與古典位元決定性的不同之處。&lt;/p>
&lt;div class="mermaid">graph LR
A["古典位元 (Classical Bit)"] --> B["確定的狀態：0 或 1"]
C["量子位元 (Qubit)"] --> D["疊加：同時為 0 與 1"]
D --> E["測量後以機率決定狀態"]&lt;/div>
&lt;h3 id="22-疊加superposition">2.2 疊加（Superposition）
&lt;/h3>&lt;p>如前所述，$|0\rangle$ 和 $|1\rangle$ 的狀態混合在一起的狀態稱為&lt;strong>疊加（Superposition）&lt;/strong>。&lt;/p>
&lt;p>例如，當一個量子位元處於完全均等的疊加狀態時，$\alpha = \frac{1}{\sqrt{2}}$，$\beta = \frac{1}{\sqrt{2}}$。&lt;/p>
$$
|\psi\rangle = \frac{1}{\sqrt{2}}|0\rangle + \frac{1}{\sqrt{2}}|1\rangle
$$
&lt;p>測量這個狀態時，會分別以 50% 的機率觀測到 $|0\rangle$ 和 $|1\rangle$。
如果有 2 個量子位元，就可以製造出 $|00\rangle, |01\rangle, |10\rangle, |11\rangle$ 這 4 種狀態的疊加。如果有 $n$ 個量子位元，就能同時表示 $2^n$ 個狀態，這正是量子電腦平行處理能力的一個泉源。&lt;/p>
&lt;h3 id="23-量子糾纏entanglement">2.3 量子糾纏（Entanglement）
&lt;/h3>&lt;p>量子運算中最強大且奇妙的特性就是&lt;strong>量子糾纏（Entanglement）&lt;/strong>。愛因斯坦稱這個現象為「鬼魅般的超距作用」，其性質是兩個以上的量子位元彼此強烈連結，當其中一個量子位元的狀態被決定時，無論物理距離有多遠，另一個量子位元的狀態也會瞬間被決定。&lt;/p>
&lt;p>最著名的量子糾纏態「貝爾態（Bell State）」之一，$\Phi^+$ 狀態表示如下：&lt;/p>
$$
|\Phi^+\rangle = \frac{|00\rangle + |11\rangle}{\sqrt{2}}
$$
&lt;p>在這個狀態下，不存在 $|01\rangle$ 或 $|10\rangle$ 的狀態。因此，如果測量第一個量子位元得到 $|0\rangle$，不用測量第二個量子位元，也能確定它必定是 $|0\rangle$。反之，如果第一個是 $|1\rangle$，第二個也必定是 $|1\rangle$。&lt;/p>
&lt;hr>
&lt;h2 id="3-量子邏輯閘quantum-logic-gates">3. 量子邏輯閘（Quantum Logic Gates）
&lt;/h2>&lt;p>就像古典電腦使用 AND、OR、NOT 等邏輯閘進行運算一樣，量子電腦也使用&lt;strong>量子閘&lt;/strong>來操作量子位元的狀態。由於量子狀態是向量，因此量子閘表示為作用於該向量的「酉矩陣（Unitary matrix）」。&lt;/p>
&lt;h3 id="31-包立閘pauli-x-y-z">3.1 包立閘（Pauli-X, Y, Z）
&lt;/h3>&lt;p>包立閘是對 1 個量子位元的基本操作。&lt;/p>
&lt;p>&lt;strong>・Pauli-X 閘 (NOT閘)&lt;/strong>
相當於古典的 NOT 閘。將 $|0\rangle$ 反轉為 $|1\rangle$，將 $|1\rangle$ 反轉為 $|0\rangle$。（在布洛赫球面上繞 X 軸旋轉 180 度）&lt;/p>
$$
X = \begin{pmatrix} 0 &amp; 1 \\ 1 &amp; 0 \end{pmatrix}
$$
&lt;p>&lt;strong>・Pauli-Y 閘&lt;/strong>
繞 Y 軸旋轉 180 度。具有同時反轉相位與位元的效果。&lt;/p>
$$
Y = \begin{pmatrix} 0 &amp; -i \\ i &amp; 0 \end{pmatrix}
$$
&lt;p>&lt;strong>・Pauli-Z 閘 (相位反轉閘)&lt;/strong>
保持 $|0\rangle$ 的狀態不變，將 $|1\rangle$ 狀態的相位反轉（乘以 $-1$）。（繞 Z 軸旋轉 180 度）&lt;/p>
$$
Z = \begin{pmatrix} 1 &amp; 0 \\ 0 &amp; -1 \end{pmatrix}
$$
&lt;h3 id="32-hadamard-閘hadamard-gate">3.2 Hadamard 閘（Hadamard Gate）
&lt;/h3>&lt;p>Hadamard 閘（H 閘）是將確定的狀態（$|0\rangle$ 或 $|1\rangle$）轉換為疊加狀態的非常重要的邏輯閘。&lt;/p>
$$
H = \frac{1}{\sqrt{2}}
\begin{pmatrix}
1 &amp; 1 \\
1 &amp; -1
\end{pmatrix}
$$
&lt;p>對 $|0\rangle$ 應用 H 閘，會得到均等的疊加狀態 $|+\rangle$。&lt;/p>
$$
H|0\rangle = \frac{1}{\sqrt{2}}|0\rangle + \frac{1}{\sqrt{2}}|1\rangle = |+\rangle
$$
&lt;h3 id="33-相位閘phase-gates">3.3 相位閘（Phase Gates）
&lt;/h3>&lt;p>相位閘是 Z 閘的推廣，將 $|1\rangle$ 狀態的相位旋轉指定的角度 $\theta$。&lt;/p>
$$
P(\theta) = \begin{pmatrix} 1 &amp; 0 \\ 0 &amp; e^{i\theta} \end{pmatrix}
$$
&lt;p>代表性的有 S 閘（$\theta = \pi/2$）與 T 閘（$\theta = \pi/4$）。&lt;/p>
&lt;h3 id="34-cnot-閘controlled-not-gate">3.4 CNOT 閘（Controlled-NOT Gate）
&lt;/h3>&lt;p>CNOT 閘（CX 閘）是在兩個量子位元之間進行操作的邏輯閘，是生成量子糾纏所不可或缺的。由「控制（Control）位元」與「目標（Target）位元」組成。&lt;/p>
&lt;p>只有當控制位元為 $|1\rangle$ 時，才會對目標位元應用 X 閘（NOT 操作）；當控制位元為 $|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-qiskit-的基礎與環境建置">4. Qiskit 的基礎與環境建置
&lt;/h2>&lt;p>接下來，我們將實際使用 Python 和 Qiskit 來撰寫量子程式。&lt;/p>
&lt;h3 id="41-什麼是-qiskit">4.1 什麼是 Qiskit？
&lt;/h3>&lt;p>&lt;strong>Qiskit&lt;/strong> 是由 IBM Quantum 開發的開源量子運算軟體開發套件（SDK）。使用 Python 就能直覺地建構量子線路，並在本地的模擬器，或透過雲端在實際的 IBM 量子電腦硬體上執行。&lt;/p>
&lt;h3 id="42-安裝方法">4.2 安裝方法
&lt;/h3>&lt;p>要使用 Qiskit，需要有 Python 環境。請使用以下指令安裝 Qiskit 與相關套件（模擬器與繪圖用的函式庫）。&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-程式設計的基本流程">4.3 程式設計的基本流程
&lt;/h3>&lt;p>使用 Qiskit 的量子程式設計，主要依循以下步驟進行：&lt;/p>
&lt;div class="mermaid">graph TD
A["1. 建構線路 (Build)"] --> B["2. 編譯/轉譯 (Compile)"]
B --> C["3. 執行 (Execute)"]
C --> D["4. 分析與視覺化結果 (Analyze)"]&lt;/div>
&lt;ol>
&lt;li>&lt;strong>建構線路&lt;/strong>: 建立 &lt;code>QuantumCircuit&lt;/code> 物件，並加入邏輯閘。&lt;/li>
&lt;li>&lt;strong>編譯&lt;/strong>: 配合要執行的後端（實機或模擬器）對線路進行最佳化。&lt;/li>
&lt;li>&lt;strong>執行&lt;/strong>: 將任務發送至後端，並取得結果。&lt;/li>
&lt;li>&lt;strong>分析&lt;/strong>: 繪製測量結果的直方圖等。&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="5-實踐建構產生貝爾態量子糾纏的線路">5. 實踐：建構產生貝爾態（量子糾纏）的線路
&lt;/h2>&lt;p>讓我們實際用 Qiskit 來建立理論中學過的「量子糾纏（貝爾態）」。目標狀態是 $|\Phi^+\rangle = \frac{|00\rangle + |11\rangle}{\sqrt{2}}$。&lt;/p>
&lt;h3 id="51-線路設計">5.1 線路設計
&lt;/h3>&lt;p>要製造貝爾態，需遵循以下步驟：&lt;/p>
&lt;ol>
&lt;li>準備 2 個量子位元（初始狀態皆為 $|0\rangle$）。&lt;/li>
&lt;li>對第 1 個量子位元應用 Hadamard 閘（H），使其進入疊加狀態。&lt;/li>
&lt;li>將第 1 個量子位元作為「控制位元」，第 2 個量子位元作為「目標位元」，應用 CNOT 閘。&lt;/li>
&lt;li>為了讀取結果，進行測量（Measure）。&lt;/li>
&lt;/ol>
&lt;h3 id="52-pythonqiskit-程式碼實作">5.2 Python/Qiskit 程式碼實作
&lt;/h3>&lt;p>那麼，我們來看看實際的程式碼。&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. 初始化線路&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 建立擁有 2 個量子位元與 2 個古典位元的量子線路&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. 應用 H 閘&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 對量子位元 0 (q0) 應用 Hadamard 閘&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. 應用 CNOT 閘&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 將 q0 作為控制位元、q1 作為目標位元，應用 CNOT&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. 測量&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 測量量子位元 0 與 1，並分別寫入古典位元 0 與 1&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"># 繪製線路圖（使用 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>執行這段程式碼後，主控台上會顯示如下由 ASCII 藝術構成的量子線路圖。&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> 代表 Hadamard 閘，&lt;code>■&lt;/code> 和 &lt;code>X&lt;/code> 的組合代表 CNOT 閘，&lt;code>M&lt;/code> 則代表測量。&lt;/p>
&lt;h3 id="53-在模擬器上執行與解釋結果">5.3 在模擬器上執行與解釋結果
&lt;/h3>&lt;p>接下來，我們將這個線路放在 IBM 的高效能模擬器 &lt;code>Aer&lt;/code> 上執行，並確認結果。&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"># 取得 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"># 為模擬器進行線路轉譯（最佳化）&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"># 執行線路（這裡執行 1000 次 shots）&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"># 取得結果&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"># 取得狀態的觀測次數（計數）&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">測量結果:&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"># 繪製直方圖&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>解釋結果&lt;/strong>&lt;/p>
&lt;p>主控台的輸出應該會如下所示。
&lt;code>測量結果: {'00': 495, '11': 505}&lt;/code>
（※由於機率是隨機的，每次執行的數值會有些微變動）&lt;/p>
&lt;p>在理想的模擬環境中，測量結果觀測到 &lt;code>00&lt;/code> 和 &lt;code>11&lt;/code> 的比例大約各佔 50%，且完全不會觀測到 &lt;code>01&lt;/code> 或 &lt;code>10&lt;/code>。
這恰好與我們建立的貝爾態 $|\Phi^+\rangle = \frac{|00\rangle + |11\rangle}{\sqrt{2}}$ 的理論預測完全一致。第一個量子位元如果是 0，第二個也必定是 0；如果是 1，則必定是 1。這種「量子糾纏」已被準確地模擬出來了。&lt;/p>
&lt;p>此外，如果在實際的量子電腦硬體（IBM Quantum Hardware）上執行，受到雜訊（量子去相干或邏輯閘錯誤）的影響，可能偶爾會觀測到 &lt;code>01&lt;/code> 或 &lt;code>10&lt;/code>。如何減少這種雜訊（量子錯誤更正），是目前量子電腦開發中最大的課題之一。&lt;/p>
&lt;hr>
&lt;h2 id="6-擴展至更高階的演算法">6. 擴展至更高階的演算法
&lt;/h2>&lt;p>建立貝爾態可以說是量子程式設計的「Hello World」。從這裡進一步發展，就能建構出超越古典電腦的強大演算法。&lt;/p>
&lt;h3 id="61-deutsch-jozsa-演算法deutsch-jozsa-algorithm">6.1 Deutsch-Jozsa 演算法（Deutsch-Jozsa Algorithm）
&lt;/h3>&lt;p>這是判定給定的函數 $f(x)$ 是「常數函數（無論輸入為何，總是輸出 0 或總是輸出 1）」還是「平衡函數（對一半的輸入輸出 0，另一半輸出 1）」的問題。
在古典電腦上，最壞的情況下需要對函數進行 $2^{n-1} + 1$ 次評估；但若使用 Deutsch-Jozsa 演算法，利用量子的平行性，&lt;strong>僅需 1 次評估&lt;/strong>即可判定。這展示了輸入疊加狀態，並利用干涉（Interference）抵消不需要的狀態，放大所需答案的量子演算法基本模式。&lt;/p>
&lt;h3 id="62-grover-演算法grovers-algorithm">6.2 Grover 演算法（Grover&amp;rsquo;s Algorithm）
&lt;/h3>&lt;p>在未排序的 $N$ 個資料庫中找出特定資料的搜尋問題中，古典演算法平均需要進行 $N/2$ 次運算，而 Grover 演算法僅需 $\sqrt{N}$ 次即可找出目標資料。
該演算法使用稱為「預言機（Oracle）」的黑盒子將目標解的相位反轉，接著再進行「振幅放大（Amplitude Amplification）」，從而大幅提高觀測到目標解的機率。&lt;/p>
&lt;div class="mermaid">graph TD
A["初始化 (所有狀態的疊加)"] --> B["預言機 (反轉正確答案的相位)"]
B --> C["擴散運算子 (對平均值進行反轉來放大振幅)"]
C --> D{"是否達到足夠的機率？"}
D -- "No" --> B
D -- "Yes" --> E["測量"]&lt;/div>
&lt;hr>
&lt;h2 id="7-總結與未來的學習">7. 總結與未來的學習
&lt;/h2>&lt;p>在本文中，我們從量子運算的根本概念（如疊加與量子糾纏）開始，詳細解說了使用 Qiskit 操作量子邏輯閘，並實際建構、模擬貝爾態以及解釋結果。&lt;/p>
&lt;p>Qiskit 可以使用 Python 這種容易親近的語言來撰寫，這是一項能幫助我們跨越數學與物理的障礙，專注於建構演算法的強大工具。目前量子電腦正處於帶雜訊的中等規模量子裝置（NISQ: Noisy Intermediate-Scale Quantum）時代，但在量子機器學習（Quantum Machine Learning）、量子化學模擬（Quantum Chemistry）、密碼破解等眾多領域的應用研究，正於世界各地飛速進展。&lt;/p>
&lt;p>請務必把握這個機會，使用 Qiskit 自製各種量子線路，並在實際的 IBM Quantum 處理器上運行看看。你一定能親手體驗到未來的運算典範。&lt;/p>
&lt;h3 id="參考資料">參考資料
&lt;/h3>&lt;ul>
&lt;li>&lt;a class="link" href="https://qiskit.org/documentation/" target="_blank" rel="noopener"
>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> - 推薦給想更深入學習數學背景與演算法的官方教材&lt;/li>
&lt;li>IBM Quantum Learning&lt;/li>
&lt;/ul>
&lt;p>歡迎來到量子的世界！&lt;/p></description></item><item><title>什麼是量子霸權？Google與IBM的最新動向</title><link>http://kenji.blog/zh-tw/p/what-is-quantum-supremacy-google-ibm/</link><pubDate>Fri, 11 Sep 2026 18:00:00 +0900</pubDate><guid>http://kenji.blog/zh-tw/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 什麼是量子霸權？Google與IBM的最新動向" />&lt;h2 id="1-前言量子計算的黎明與量子超越性">1. 前言：量子計算的黎明與「量子超越性」
&lt;/h2>&lt;p>量子計算透過將物理學的基本原理——量子力學應用於資訊處理，具備了解決古典電腦（我們現在日常使用的個人電腦或超級電腦）在現實時間內無法解開的複雜問題的潛力。這個領域長久以來以理論研究為主，但近年來，隨著硬體的快速進步，邁向實用化的競爭正日益激烈。&lt;/p>
&lt;p>其中最受矚目的關鍵字之一就是「量子超越性（Quantum Supremacy，或稱量子霸權）」。這指的是在特定的計算任務中，量子電腦展現出壓倒古典電腦計算能力的瞬間。本文將從量子超越性的嚴格定義開始，詳細解說Google在2019年宣布全球首次達成此里程碑的「Sycamore」處理器的實驗細節、IBM對此的反駁與獨特策略，以及邁向真正實用化最大障礙的「量子錯誤更正（Quantum Error Correction: QEC）」與「容錯量子計算（Fault-Tolerant Quantum Computing: FTQC）」的最新發展藍圖，並進行技術與數學上的深入探討。&lt;/p>
&lt;hr>
&lt;h2 id="2-理論背景量子計算的基礎與複雜度類別">2. 理論背景：量子計算的基礎與複雜度類別
&lt;/h2>&lt;p>為了理解量子超越性，首先必須了解量子計算的數學基礎，以及其在計算複雜度理論中的定位。&lt;/p>
&lt;h3 id="量子位元與疊加態-superposition">量子位元與疊加態 (Superposition)
&lt;/h3>&lt;p>古典電腦中資訊的最小單位是位元（0或1），但在量子電腦中則使用量子位元（Qubit）。一個量子位元的狀態 $|\psi\rangle$ ，可由基底狀態 $|0\rangle$ 與 $|1\rangle$ 的複數線性組合來表示：&lt;/p>
$$
|\psi\rangle = \alpha|0\rangle + \beta|1\rangle
$$
&lt;p>這裡 $\alpha, \beta \in \mathbb{C}$，且滿足歸一化條件 $|\alpha|^2 + |\beta|^2 = 1$。這種性質被稱為「疊加（Superposition）」。&lt;/p>
&lt;h3 id="量子糾纏entanglement與張量積">量子糾纏（Entanglement）與張量積
&lt;/h3>&lt;p>當存在多個量子位元時，整個系統的狀態可以由個別量子位元狀態空間的張量積來表示。$n$ 個量子位元的系統，會成為 $2^n$ 維希爾伯特空間 $\mathcal{H}^{\otimes n}$ 上的向量。&lt;/p>
$$
|\Psi\rangle = \sum_{x \in \{0, 1\}^n} c_x |x\rangle
$$
&lt;p>這裡 $\sum |c_x|^2 = 1$。量子位元之間並非獨立，其中一方的狀態依賴於另一方狀態的現象稱為「量子糾纏（Quantum Entanglement）」。藉由這種特性，量子電腦擁有了同時處理呈指數級擴張的龐大狀態空間的潛力。&lt;/p>
&lt;h3 id="量子超越性在計算複雜度理論上的定義">量子超越性在計算複雜度理論上的定義
&lt;/h3>&lt;p>在計算複雜度理論中，古典電腦能夠有效率地（在多項式時間內）解決的問題類別稱為 &lt;strong>BPP&lt;/strong> (Bounded-error Probabilistic Polynomial time)。另一方面，量子電腦能夠有效率地解決的問題類別則是 &lt;strong>BQP&lt;/strong> (Bounded-error Quantum Polynomial time)。&lt;/p>
&lt;p>實證量子超越性，意味著「在實際的量子硬體上，執行屬於BQP但不屬於BPP（或可能性極高）的特定任務，並在時間與資源上超越古典超級電腦的模擬」。這可以說是透過物理實驗來反證延伸的邱奇－圖靈論題（「所有物理上可實現的計算模型，皆可由機率圖靈機在多項式時間內模擬」）的一項歷史性嘗試。&lt;/p>
&lt;hr>
&lt;h2 id="3-2019年google實證量子超越性">3. 2019年：Google實證量子超越性
&lt;/h2>&lt;p>2019年10月，Google Quantum AI團隊在科學期刊《Nature》上宣布，他們使用53個量子位元的超導處理器「Sycamore」，成功達成了量子超越性。&lt;/p>
&lt;h3 id="sycamore處理器的架構">Sycamore處理器的架構
&lt;/h3>&lt;p>Sycamore處理器由排列成二維網格狀的54個Transmon型超導量子位元組成（實驗中因有1個運作不良，故使用了53個）。相鄰的量子位元之間配置了可調耦合器（Tunable Coupler），實現了高速且高精度的雙量子位元閘（iSWAP閘與控制Z閘的混合）。&lt;/p>
&lt;div class="mermaid">graph TD
A["輸入量子演算法"] --> B["Sycamore處理器（53個量子位元）"]
B --> C["應用隨機量子閘"]
C --> D["測量量子狀態（位元串）"]
D --> E["交叉熵基準測試（XEB）"]
E --> F["驗證量子超越性"]&lt;/div>
&lt;h3 id="隨機量子電路取樣random-circuit-sampling-rcs">隨機量子電路取樣（Random Circuit Sampling: RCS）
&lt;/h3>&lt;p>Google選擇的任務是「隨機量子電路取樣」。這是在多個週期（深度 $m$）內，應用隨機選擇的單量子位元閘與雙量子位元閘，並測量最終狀態，從所得的位元串機率分布中進行取樣的過程。&lt;/p>
&lt;p>從理想的（無雜訊）隨機量子電路輸出的位元串 $x$ 的機率並非均勻分布，而是呈現被稱為波特-湯瑪斯分布（Porter-Thomas distribution）的干涉條紋般模式。為了用古典電腦從這個分布中取樣，必須對整個狀態向量進行模擬，其計算量會相對於量子位元數 $n$ 與電路深度 $m$ 呈指數級增加。&lt;/p>
&lt;h3 id="忠誠度fidelity評估線性交叉熵基準測試xeb">忠誠度（Fidelity）評估：線性交叉熵基準測試（XEB）
&lt;/h3>&lt;p>為了證明實驗結果並非單純的雜訊，而是確實進行了量子計算的結果，Google使用了線性交叉熵基準測試（Linear Cross-Entropy Benchmarking: XEB）。使用古典電腦計算出針對實驗中獲得的位元串 $x_i$ 其電路的理想機率 $P(x_i)$，並透過以下公式求得忠誠度 $\mathcal{F}_{\text{XEB}}$。&lt;/p>
$$
\mathcal{F}_{\text{XEB}} = 2^n \langle P(x_i) \rangle_{i} - 1
$$
&lt;p>$\mathcal{F}_{\text{XEB}}$ 若為0代表完全是雜訊，為1則代表無雜訊的理想量子處理器。Sycamore處理器在深度為20的電路中，達成了 $\mathcal{F}_{\text{XEB}} \approx 0.002$ (0.2%)。乍看之下很低，但這是在統計上具顯著意義的大於零的值，是成功控制了高達 $2^{53} \approx 9 \times 10^{15}$ 狀態空間的驚人成果。&lt;/p>
&lt;p>整體的錯誤率被近似模型化為各個閘錯誤、測量錯誤等的乘積。&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>（※ $e_g$ 為閘錯誤，$e_{RO}$ 為測量錯誤）&lt;/p>
&lt;p>Google主張，若要使用古典超級電腦（Summit）來模擬這個電路，大約需要花費1萬年的時間。相對地，Sycamore僅花了200秒就完成了取樣。&lt;/p>
&lt;hr>
&lt;h2 id="4-ibm的反駁從超越性到實用性utility">4. IBM的反駁：從「超越性」到「實用性（Utility）」
&lt;/h2>&lt;p>Google的發表震撼了全世界，但開發出全球最大超級電腦「Summit」且同樣引領著量子電腦開發的IBM，立刻發表了反駁此一主張的論文。&lt;/p>
&lt;h3 id="透過張量網路收縮改善古典模擬">透過張量網路收縮改善古典模擬
&lt;/h3>&lt;p>IBM反駁的核心在於「古典電腦端的演算法與資源最佳化不足」。Google是在假設直接計算薛丁格方程式時間演進的狀態向量模擬器的前提下，估算出需要1萬年，但IBM指出，只要使用被稱為「張量網路（Tensor Network）」的方法，就能夠大幅縮短模擬時間。&lt;/p>
&lt;p>在張量網路中，量子電路的閘操作被表示為多維陣列（張量）的運算，並將網路「收縮（Contraction）」的順序最佳化。他們主張，如果能充分活用Summit所擁有的250 PB龐大儲存空間（硬碟與記憶體的階層化），就能在保留整個狀態向量的情況下，僅用「2天半」的時間完成更高精度的模擬。&lt;/p>
&lt;h3 id="量子優勢quantum-advantage與量子實用性quantum-utility">量子優勢（Quantum Advantage）與量子實用性（Quantum Utility）
&lt;/h3>&lt;p>以這場爭論為契機，整個業界的趨勢，開始從單純執著於「執行古典電腦無法做到的人為任務（超越性）」轉移到「在現實社會的實用問題上，展現出比古典方法更具實質的優勢（量子優勢）」，甚至是「讓量子電腦發揮作為科學發現新工具的功能（量子實用性）」的階段。&lt;/p>
&lt;p>IBM本身避開了「超越性」一詞，提倡以「量子體積（Quantum Volume）」與「CLOPS (Circuit Layer Operations Per Second)」作為量子處理器的綜合性能指標，並推動著重於硬體規模與品質平衡的開發。&lt;/p>
&lt;div class="mermaid">timeline
title "量子里程碑的演進"
2019 : "Google Sycamore (53Q)" : "發表量子超越性"
2019 : "IBM反駁" : "超級電腦Summit能在2.5天內完成模擬"
2021 : "IBM Eagle (127Q)" : "突破100個量子位元的障礙"
2022 : "IBM Osprey (433Q)" : "推進處理器規模"
2023 : "Google表面碼" : "擴展錯誤更正（d=3 到 d=5）"
2023 : "IBM量子實用性" : "在127Q上模擬複雜的自旋模型"
2024 : "未來展望" : "邏輯量子位元與錯誤緩解時代"&lt;/div>
&lt;hr>
&lt;h2 id="5-下一個前沿錯誤緩解error-mitigation與量子錯誤更正qec">5. 下一個前沿：錯誤緩解（Error Mitigation）與量子錯誤更正（QEC）
&lt;/h2>&lt;p>目前的量子電腦被稱為「NISQ（Noisy Intermediate-Scale Quantum）」，容易受到雜訊（與外部環境的互動或控制不完美所造成的錯誤）的影響，進行長時間計算時，結果就會被雜訊淹沒。為了解決這個問題，主要分為「錯誤緩解（Error Mitigation）」與「量子錯誤更正（Quantum Error Correction）」兩種策略。&lt;/p>
&lt;h3 id="錯誤緩解error-mitigation">錯誤緩解（Error Mitigation）
&lt;/h3>&lt;p>錯誤緩解是一種不需要改變量子硬體，僅透過古典的後處理，從計算結果的期望值中去除雜訊影響的手法。IBM在2023年，將127個量子位元的「Eagle」處理器與「零雜訊外推（Zero-Noise Extrapolation: ZNE）」等錯誤緩解技術結合，在複雜的易辛模型（Ising model）時間演進模擬中，達成了超越最先進的近似張量網路法的精度，實證了「量子實用性（Quantum Utility）」。&lt;/p>
&lt;h3 id="量子錯誤更正qec與邏輯量子位元">量子錯誤更正（QEC）與邏輯量子位元
&lt;/h3>&lt;p>然而，為了最終能夠執行任意複雜的演算法（例如Shor的質因數分解演算法或複雜的量子化學計算），單靠錯誤緩解是不夠的，動態偵測並修正錯誤的「量子錯誤更正（QEC）」是不可或缺的。&lt;/p>
&lt;p>QEC的主流方法是「表面碼（Surface Code）」。這是一種將多個物理量子位元（資料量子位元）排列成二維網格狀，並在其中配置測量用的量子位元（輔助量子位元），連續進行被稱為「穩定子（Stabilizer）」的同位元檢查的手法。&lt;/p>
&lt;div class="mermaid">graph LR
Q1["資料量子位元（資料）"] --- M1["測量X穩定子（輔助）"]
Q2["資料量子位元（資料）"] --- M1
Q3["資料量子位元（資料）"] --- M2["測量Z穩定子（輔助）"]
Q4["資料量子位元（資料）"] --- M2
M1 --> EC["錯誤症候群解碼（古典）"]
M2 --> EC
EC --> LQ["邏輯量子位元狀態更新"]&lt;/div>
&lt;h4 id="閾值定理threshold-theorem與距離-d">閾值定理（Threshold Theorem）與距離 $d$
&lt;/h4>&lt;p>量子錯誤更正中存在著「閾值定理」。當物理量子位元的錯誤率 $p$ 低於特定的閾值 $p_{th}$（表面碼的情況約在 1% 左右）時，透過增加碼距離（Distance）$d$（將更多的物理量子位元分配給一個邏輯量子位元），就能夠呈指數級地降低邏輯錯誤率 $p_L$。&lt;/p>
&lt;p>邏輯錯誤率的近似公式如下所示：&lt;/p>
$$
p_L \approx \Lambda \left( \frac{p}{p_{th}} \right)^{\frac{d+1}{2}}
$$
&lt;p>這裡 $\Lambda$ 為常數。只要 $p &lt; p_{th}$，$d$ 越大 $p_L$ 就會越小。然而，若 $p > p_{th}$，增加物理量子位元反而會導致雜訊累積，使邏輯錯誤率惡化。&lt;/p>
&lt;h4 id="google在2023年的里程碑實證透過擴展距離降低錯誤">Google在2023年的里程碑：實證透過擴展距離降低錯誤
&lt;/h4>&lt;p>2023年2月，Google在《Nature》上發表了一篇具有紀念意義的論文。他們使用第三代的Sycamore處理器，全球首次實證了當表面碼的距離從 $d=3$（使用17個物理量子位元）擴展到 $d=5$（使用49個物理量子位元）時，邏輯錯誤率從 3.028% 微微下降到了 2.914%。&lt;/p>
&lt;p>這意味著已經踏入了 $p &lt; p_{th}$ 的領域，證明了只要增加物理量子位元效能就會提升，這象徵著邁向FTQC最重要的一項概念驗證（Proof of Concept）已經完成。&lt;/p>
&lt;hr>
&lt;h2 id="6-邁向ftqc容錯量子計算的發展藍圖與展望">6. 邁向FTQC（容錯量子計算）的發展藍圖與展望
&lt;/h2>&lt;p>Google與IBM雖然各自採用了不同的架構與策略，但都在為了最終目標FTQC（Fault-Tolerant Quantum Computing，容錯量子計算）展開著激烈的開發競爭。&lt;/p>
&lt;h3 id="ibm的策略模組化與重六角heavy-hex網格">IBM的策略：模組化與重六角（Heavy-Hex）網格
&lt;/h3>&lt;p>IBM在徹底降低錯誤率的同時，也致力於處理器的規模擴充。在挑戰「Eagle(127Q)」、「Osprey(433Q)」、「Condor(1121Q)」等單一晶片極限的同時，也發表了名為「Quantum System Two」的模組化架構。此外，在量子位元的耦合拓撲結構上，採用了能減少不必要的串擾（crosstalk）並提高穩定性的「重六角（Heavy-Hex）網格」。IBM的策略是一種混合式方法，短期內透過高度的錯誤緩解追求實用性，並階段性地導入QEC。&lt;/p>
&lt;h3 id="google的策略提升邏輯量子位元品質">Google的策略：提升邏輯量子位元品質
&lt;/h3>&lt;p>Google的策略比起急遽增加物理量子位元的數量，更著重於將單個邏輯量子位元的錯誤率降低到極限（例如降至 $10^{-6}$）。在此基礎上，建立在模組之間傳輸量子狀態的技術（Quantum Interconnects），目標是打造能讓數千至數萬個物理量子位元平行運作的大規模系統。&lt;/p>
&lt;p>為了以容錯方式執行如魔法態蒸餾（Magic State Distillation）等非克里福閘（Non-Clifford gates）的協定實作，也將是未來的重大技術障礙。據說若要執行實用的Shor演算法來破解2048位元的RSA密碼，大約需要數千個錯誤率在 $10^{-8}$ 以下的邏輯量子位元，換算成物理量子位元則需要數百萬至數千萬個，前方的道路依然漫長。&lt;/p>
&lt;hr>
&lt;h2 id="7-結語">7. 結語
&lt;/h2>&lt;p>「量子超越性」是量子電腦歷史上，在物理層面證明計算機理論潛力的重要里程碑。Google在2019年的實證與IBM建設性的反駁，將整個業界從單純的理論證明，推動到了追求實際實用性（Utility），以及邁向最終容錯量子計算（FTQC）的正式工程時代。&lt;/p>
&lt;p>現在，我們正處於從充滿雜訊的NISQ裝置，過渡到具備錯誤更正功能之邏輯量子位元裝置的過渡期。在未來的數年到十年內，隨著這些量子硬體的進化，新材料科學的發現、新藥開發過程的革命，以及最佳化問題的突破，都將成為現實。&lt;/p>
&lt;p>塑造未來計算機科學的Google與IBM，以及全世界研究者們的動向，未來也將持續令人矚目。&lt;/p></description></item><item><title>後量子時代的區塊鏈與虛擬貨幣將會如何改變？</title><link>http://kenji.blog/zh-tw/p/post-quantum-blockchain-and-crypto/</link><pubDate>Fri, 11 Sep 2026 17:00:00 +0900</pubDate><guid>http://kenji.blog/zh-tw/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 後量子時代的區塊鏈與虛擬貨幣將會如何改變？" />&lt;h2 id="1-簡介後量子時代的腳步聲與區塊鏈的危機">1. 簡介：後量子時代的腳步聲與區塊鏈的危機
&lt;/h2>&lt;p>自2009年中本聰（Satoshi Nakamoto）創造比特幣（Bitcoin）以來，區塊鏈技術作為「去中心化且不可篡改的帳本」，已發展成為全球金融系統與應用程式的基礎。支撐這種強大安全性的，正是**公開金鑰密碼學（Public Key Cryptography）&lt;strong>與&lt;/strong>密碼雜湊函數（Cryptographic Hash Functions）**等現代密碼技術。&lt;/p>
&lt;p>這些密碼技術的安全性，建立在數學上的「計算困難度」之上，即使是傳統電腦（我們目前使用的個人電腦或超級電腦）花費等同宇宙壽命的時間，也無法破解。&lt;/p>
&lt;p>然而，這個前提正因為物理學與資訊科學的前沿——**量子電腦（Quantum Computers）**的快速發展與實用化，而面臨根本性的顛覆。利用量子力學特有的「疊加（Superposition）」與「量子糾纏（Entanglement）」特性的量子電腦，在特定數學問題上展現出壓倒傳統電腦的運算能力，也就是所謂的「量子霸權（Quantum Supremacy）」。&lt;/p>
&lt;p>在本文中，我們將從技術與數學的角度，徹底深入探討區塊鏈技術具體面臨了量子電腦的哪些威脅，以及作為解決方案的**後量子密碼學（PQC：Post-Quantum Cryptography）**最新動態和加密資產網路的過渡方案。&lt;/p>
&lt;hr>
&lt;h2 id="2-量子電腦的基礎與對區塊鏈的兩大威脅">2. 量子電腦的基礎與對區塊鏈的兩大威脅
&lt;/h2>&lt;p>目前的區塊鏈系統主要由以下兩種密碼元素構成，而它們各自面臨著不同量子演算法的威脅。&lt;/p>
&lt;div class="mermaid">graph TD
A["量子電腦驚人的運算能力"] --> B["Shor演算法 (Shor's Algorithm)"]
A --> C["Grover演算法 (Grover's Algorithm)"]
B --> D["公開金鑰密碼學 (ECDSA/RSA/DSA) 的崩潰"]
C --> E["對密碼雜湊函數 (SHA-256) 的影響"]
D --> F["破解他人私鑰、偽造交易"]
E --> G["PoW挖礦的優勢、對部分地址的攻擊"]
F --> H["區塊鏈中致命且直接的威脅"]
G --> I["可透過調整演算法 (如擴展金鑰長度) 應對的威脅"]
style H fill:#ff9999,stroke:#cc0000,stroke-width:2px;
style I fill:#ffff99,stroke:#cccc00,stroke-width:2px;&lt;/div>
&lt;h3 id="21-橢圓曲線密碼學ecdsa的基礎與計算困難度">2.1. 橢圓曲線密碼學（ECDSA）的基礎與計算困難度
&lt;/h3>&lt;p>包括比特幣和以太坊（Ethereum）在內的許多區塊鏈，都採用**橢圓曲線數位簽章演算法（ECDSA：Elliptic Curve Digital Signature Algorithm）**作為數位簽章演算法。具體來說，比特幣使用的是名為 &lt;code>secp256k1&lt;/code> 參數的橢圓曲線。&lt;/p>
&lt;p>橢圓曲線密碼學的安全性依賴於**橢圓曲線離散對數問題（ECDLP：Elliptic Curve Discrete Logarithm Problem）**的計算困難度。
橢圓曲線由以下Weierstrass標準式的方程式定義：&lt;/p>
$$
y^2 \equiv x^3 + ax + b \pmod{p}
$$
&lt;p>在比特幣的 &lt;code>secp256k1&lt;/code> 中，$a = 0, b = 7$，且 $p$ 是一個非常大的質數。
假設曲線上的一個基點（基準點）為 $G$，隨機選擇一個256位元的巨大整數作為私鑰 $k$。此時，公鑰 $K$ 可透過將基點進行 $k$ 次加法（純量乘法）來求得。&lt;/p>
$$
K = k \times G = \underbrace{G + G + \dots + G}_{k \text{ times}}
$$
&lt;p>使用傳統電腦從公開的公鑰 $K$ 和基點 $G$ 反推私鑰 $k$（求解離散對數），即使使用Pollard&amp;rsquo;s rho質因數分解法等最佳傳統演算法，也需要 $\mathcal{O}(\sqrt{p})$ 的指數級運算時間。對於256位元的金鑰，大約需要 $2^{128}$ 次運算，這即使讓目前的超級電腦運行幾十億年也無法破解。&lt;/p>
&lt;h3 id="22-shor演算法shors-algorithm導致的崩潰">2.2. Shor演算法（Shor&amp;rsquo;s Algorithm）導致的崩潰
&lt;/h3>&lt;p>然而，Peter Shor在1994年發表的&lt;strong>Shor演算法&lt;/strong>徹底破壞了這個前提。Shor演算法最初是為了解決質因數分解問題（RSA密碼學的基礎）而在多項式時間內被提出，但它同樣適用於離散對數問題與橢圓曲線離散對數問題。&lt;/p>
&lt;p>Shor演算法的核心在於，利用**量子傅立葉變換（QFT：Quantum Fourier Transform）**高速找出函數的「週期（Period）」。&lt;/p>
$$
\text{傳統運算複雜度} = \mathcal{O}(2^{n/2}) \quad (n\text{為位元長度})
$$
$$
\text{量子演算法運算複雜度} = \mathcal{O}(n^3)
$$
&lt;p>就這樣，Shor演算法將指數級的時間大幅縮短至&lt;strong>多項式時間（Polynomial Time）&lt;/strong>。只要擁有足夠邏輯量子位元的量子電腦完成開發，就能在數分鐘或數秒內，從網路上公開的公鑰 $K$ 找出私鑰 $k$。這將使攻擊者能夠輕易取得他人錢包的私鑰，並完全掌控其資金。&lt;/p>
&lt;h4 id="221-透過shor演算法破解ecdlp的逐步解析">2.2.1 透過Shor演算法破解ECDLP的逐步解析
&lt;/h4>&lt;p>讓我們循序漸進地了解，量子電腦是如何解決橢圓曲線離散對數問題（ECDLP）的內部過程。&lt;/p>
&lt;p>問題設定：在 $K = k \times G$ 中，已知 $G$ 和 $K$，欲求未知的整數 $k$（私鑰）。設橢圓曲線的階為 $N$。&lt;/p>
&lt;p>&lt;strong>Step 1: 建立疊加態&lt;/strong>
首先，準備兩個量子暫存器，並分別套用Hadamard閘（Hadamard Gate），建立所有可能整數組合的疊加態。
&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>Step 2: 套用量子神諭（函數評估）&lt;/strong>
接著，利用執行橢圓曲線點加法的量子電路（神諭），在第三個暫存器中計算函數 $f(x, y) = x \times G + y \times K$。
&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>
這裡的關鍵在於，由於 $K = k \times G$，可以將其改寫為 $f(x, y) = (x + y \cdot k) \times G$。&lt;/p>
&lt;p>&lt;strong>Step 3: 測量第三暫存器&lt;/strong>
當測量第三暫存器時，它會坍縮到橢圓曲線上的某一點 $R$。如此一來，第一、第二暫存器將坍縮為滿足 $x + y \cdot k \equiv c \pmod{N}$（$c$ 為常數）的 $(x, y)$ 組合的疊加態。
&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>Step 4: 套用量子傅立葉變換（QFT）&lt;/strong>
這個狀態擁有與週期 $k$ 相關的週期性。透過套用反量子傅立葉變換（Inverse QFT），可以引發相位干涉，並將週期資訊轉換為振幅。&lt;/p>
&lt;p>&lt;strong>Step 5: 測量與傳統後處理&lt;/strong>
測量第一和第二暫存器後，有很高的機率會得到包含 $k$ 相關資訊的值。對測量得到的值套用連分數展開（Continued Fractions）等傳統數論演算法，即可完全推導出未知的私鑰 $k$。&lt;/p>
&lt;p>整個過程所需的量子閘數量為 $\mathcal{O}(\log^3 N)$，能以傳統電腦 $\mathcal{O}(\sqrt{N})$ 搜尋無法比擬的超高速揭露私鑰。&lt;/p>
&lt;h3 id="23-grover演算法grovers-algorithm與對雜湊函數的影響">2.3. Grover演算法（Grover&amp;rsquo;s Algorithm）與對雜湊函數的影響
&lt;/h3>&lt;p>另一個威脅是Lov Grover在1996年提出的&lt;strong>Grover演算法&lt;/strong>。這對雜湊函數（如：SHA-256）產生了巨大影響。&lt;/p>
&lt;p>在區塊鏈中，雜湊函數被用來確保資料完整性、產生地址，以及作為比特幣中&lt;strong>PoW（工作量證明）挖礦&lt;/strong>的基礎。雜湊函數的反推（原像計算）可以被視為在未結構化的資料庫中搜尋，也就是針對特定輸出值 $y$，尋找能使 $H(x) = y$ 的輸入值 $x$。&lt;/p>
&lt;p>在傳統電腦中，為了從 $N$ 個可能性中找到正確答案，平均需要 $\frac{N}{2}$ 次嘗試，最壞的情況下需要 $N$ 次嘗試。換言之，運算複雜度為 $\mathcal{O}(N)$。
然而，Grover演算法使用了稱為「振幅放大（Amplitude Amplification）」的量子技術。透過在疊加態的所有可能性中，反覆放大正確狀態的機率振幅，可將搜尋時間縮短至平方根。&lt;/p>
$$
\text{Grover演算法的運算複雜度} = \mathcal{O}(\sqrt{N})
$$
&lt;p>在SHA-256的情況下，$N = 2^{256}$，因此傳統的暴力搜尋大約需要 $2^{256}$ 次嘗試。然而，如果使用Grover演算法，只需 $\sqrt{2^{256}} = 2^{128}$ 次嘗試即可。這意味著256位元的雜湊函數在面對量子電腦時，&lt;strong>其安全強度實質上減半為128位元&lt;/strong>。&lt;/p>
&lt;h4 id="231-sha-256能倖存嗎quantum-supremacy-in-hashing">2.3.1. SHA-256能倖存嗎？（Quantum Supremacy in Hashing）
&lt;/h4>&lt;p>儘管安全性減半，但「128位元的安全性」依然極其堅固。從目前的技術水平來看，$2^{128}$ 次運算是一個天文數字，需要耗費等同宇宙壽命的時間。
因此，普遍認為**「SHA-256即使在面對量子電腦時，仍能維持實用等級的安全性」**。未來若需要提高安全邊際，只需單純將雜湊輸出長度加倍（例如從SHA-256過渡到SHA-512），即可在量子世界中維持傳統的256位元安全性。&lt;/p>
&lt;p>總結來說，針對雜湊函數的量子威脅是「輕微且可應對的」，而對公開金鑰密碼學（ECDSA）的威脅則是「致命的」。&lt;/p>
&lt;hr>
&lt;h2 id="3-對現有加密資產bitcoin-ethereum具體影響的分析">3. 對現有加密資產（Bitcoin, Ethereum）具體影響的分析
&lt;/h2>&lt;p>在一個量子電腦能夠破解ECDSA的世界中，加密資產網路究竟會面臨什麼樣的漏洞？在這裡，我們以比特幣的運作機制為例，從**「公鑰暴露的時機」**這一觀點進行詳細分析。&lt;/p>
&lt;h3 id="31-地址的產生與公鑰的非公開性">3.1. 地址的產生與公鑰的「非公開性」
&lt;/h3>&lt;p>比特幣的地址（如P2PKH: Pay-to-Public-Key-Hash 或 P2WPKH: Pay-to-Witness-Public-Key-Hash）並非使用公鑰本身，而是將公鑰進行多次雜湊後生成。&lt;/p>
$$
\text{Bitcoin Address} = \text{Base58Check}(\text{RIPEMD160}(\text{SHA256}(\text{Public Key})))
$$
&lt;p>如前所述，由於雜湊函數對量子攻擊（Grover演算法）具有抵抗力，即使是量子電腦也無法從身為雜湊值的「地址」反推回原始的「公鑰」。
也就是說，對於**「未使用（從未發送過資金）的地址」**，其公鑰完全沒有在區塊鏈上暴露過，只有雜湊值被記錄。因此，只要公鑰未知，就不存在執行Shor演算法的目標，也無法推導出私鑰。這種狀態的錢包在量子層面上可以說是安全的（Quantum-safe）。&lt;/p>
&lt;h3 id="32-發送交易時的致命漏洞搶先交易攻擊">3.2. 發送交易時的致命漏洞（搶先交易攻擊）
&lt;/h3>&lt;p>問題發生在用戶匯出資金的時機。
當交易廣播（發送）到網路時，為了進行驗證，用戶必須將數位簽章連同&lt;strong>自己的公鑰包含在交易資料內，並向整個網路公開&lt;/strong>。&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant User as "用戶 (Alice)"
participant Mempool as "Mempool (未確認交易池)"
participant QuantumAttacker as "量子攻擊者"
participant Miner as "礦工 (產生區塊)"
User->>Mempool: 發送交易 (包含公鑰與簽章)
Mempool-->>QuantumAttacker: 攔截網路上的公鑰
note right of QuantumAttacker: 在數分鐘內執行Shor演算法&lt;br/>(從公鑰計算出私鑰)
QuantumAttacker->>QuantumAttacker: 使用Alice的私鑰產生新簽章
QuantumAttacker->>Mempool: 以更高的礦工手續費廣播惡意轉帳
Miner->>Miner: 優先將手續費(Gas)高的惡意交易納入區塊
Miner-->>User: 記錄於區塊鏈 (Alice損失資金)&lt;/div>
&lt;p>一旦公鑰發送到Mempool（未確認交易的等待區），這些資料就會與全球的節點共享。如果攻擊者擁有超高速的量子電腦，就可以透過以下流程竊取資金。&lt;/p>
&lt;ol>
&lt;li>從Mempool中攔截合法用戶（Alice）的交易，並&lt;strong>提取公鑰&lt;/strong>。&lt;/li>
&lt;li>執行Shor演算法，在&lt;strong>數分鐘內（區塊確認前）從公鑰計算出私鑰&lt;/strong>。&lt;/li>
&lt;li>利用取得的私鑰，&lt;strong>建立偽造交易&lt;/strong>，將Alice的資金轉入攻擊者的地址。&lt;/li>
&lt;li>為這筆偽造交易&lt;strong>設定遠高於Alice原始交易的礦工手續費（Fee）&lt;/strong>，並將其發送到網路。&lt;/li>
&lt;/ol>
&lt;p>礦工受到經濟誘因驅使，會優先將手續費較高的交易納入區塊中。結果，攻擊者的非法轉帳將率先被確認（Confirm），而Alice的合法轉帳則會被當作「餘額不足（Double Spend）」遭到捨棄。
這一連串過程被稱為&lt;strong>搶先交易攻擊（Front-running Attack）&lt;/strong>。在量子電腦實用化的世界裡，只要有人按下轉帳按鈕的瞬間，資金就會被駭客奪走，這將是極其可怕的情況。&lt;/p>
&lt;h3 id="33-重複使用地址與舊地址p2pk的危機">3.3. 重複使用地址與舊地址（P2PK）的危機
&lt;/h3>&lt;p>更嚴重的問題在於，過去只要曾經發送過一次資金的地址（例如被當作找零地址重複使用的情況），其公鑰就已經永久記錄在區塊鏈上。這些地址不需要等待發送交易，隨時都暴露在被計算出私鑰並盜取餘額的危險之中。&lt;/p>
&lt;p>此外，包含中本聰初期挖礦獎勵（約超過100萬枚BTC）在內，在2009年至2010年期間主流的**P2PK（Pay-to-Public-Key）**格式中，地址並非雜湊值，而是直接將公鑰本身記錄在區塊鏈上。這些大量休眠的比特幣，將成為量子電腦最容易下手的目標。一旦它們被集體盜取並在市場上傾銷，可能會引發價格的崩盤。&lt;/p>
&lt;hr>
&lt;h2 id="4-邁向後量子密碼學pqc-post-quantum-cryptography的過渡方案">4. 邁向後量子密碼學（PQC: Post-Quantum Cryptography）的過渡方案
&lt;/h2>&lt;p>為了避免這種「Q-Day（量子電腦攻破密碼學之日）」的災難發生，密碼學界與區塊鏈社群正在計畫過渡至即使是量子演算法也難以破解的&lt;strong>後量子密碼學（PQC）&lt;/strong>。
美國國家標準暨技術研究院（NIST）多年來一直推動PQC的標準化流程，經過多輪嚴格評估後，幾個具潛力的密碼演算法已被選定為最終標準。&lt;/p>
&lt;p>以下我們將連同其數學機制，詳細解說備受矚目、可作為區塊鏈數位簽章替代方案的主要PQC演算法。&lt;/p>
&lt;h3 id="41-雜湊簽章hash-based-signatures">4.1. 雜湊簽章（Hash-Based Signatures）
&lt;/h3>&lt;p>雜湊簽章是一種安全性僅依賴於「雜湊函數的抗碰撞性」這個非常簡單且堅固基礎的密碼系統。由於雜湊函數對抗量子電腦的安全性已獲得證明（如前所述，128位元的安全邊際已十分充足），因此是一種非常可靠的方法。
代表性的有&lt;strong>Lamport簽章（Lamport Signatures）&lt;/strong>、其延伸的WOTS（Winternitz One-Time Signature），以及NIST標準化候選的&lt;strong>SPHINCS+&lt;/strong>（現在作為FIPS 205被稱為SLH-DSA）。&lt;/p>
&lt;h4 id="411-lamport簽章的數學細節one-time-signature">4.1.1. Lamport簽章的數學細節（One-Time Signature）
&lt;/h4>&lt;p>讓我們在數學上更詳細地探討Lamport簽章的機制。
假設雜湊函數為 $H: \{0, 1\}^* \to \{0, 1\}^{256}$。&lt;/p>
&lt;p>&lt;strong>【金鑰生成】&lt;/strong>
Alice（發送者）使用真亂數產生器（TRNG）產生256對私鑰。
&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>
如此一來，私鑰 $\text{sk}$ 總共由512個256位元字串組成（大小：$512 \times 32 = 16,384$ 位元組）。&lt;/p>
&lt;p>接著，計算公鑰 $\text{pk}$。將每個私鑰元件分別進行雜湊化。
&lt;/p>
$$
\text{pk}_{i,0} = H(\text{sk}_{i,0}), \quad \text{pk}_{i,1} = H(\text{sk}_{i,1})
$$
&lt;p>
公鑰的大小同樣是 $16,384$ 位元組。並將此公鑰發布到區塊鏈網路。&lt;/p>
&lt;p>&lt;strong>【簽章生成】&lt;/strong>
為了對交易資料 $M$ 進行簽章，Alice首先計算其雜湊值。
&lt;/p>
$$
h = H(M) \in \{0, 1\}^{256}
$$
&lt;p>
令雜湊值 $h$ 的第 $i$ 個位元為 $h_i \in \{0, 1\}$。
Alice的簽章 $\sigma$ 便是對應每個位元 $h_i$ 的私鑰元件集合。
&lt;/p>
$$
\sigma = (\text{sk}_{1, h_1}, \text{sk}_{2, h_2}, \dots, \text{sk}_{256, h_{256}})
$$
&lt;p>
也就是說，如果訊息雜湊的位元為 &lt;code>0&lt;/code>，就公開 $\text{sk}_{i,0}$；如果為 &lt;code>1&lt;/code>，就公開 $\text{sk}_{i,1}$。簽章大小為 $256 \times 32 = 8,192$ 位元組。&lt;/p>
&lt;p>&lt;strong>【簽章驗證】&lt;/strong>
礦工（驗證者）使用收到的交易 $M$、簽章 $\sigma = (s_1, s_2, \dots, s_{256})$，以及公鑰 $\text{pk}$ 進行驗證。
重新計算交易的雜湊值 $h = H(M)$，並確認每個 $s_i$ 的雜湊值是否與公鑰中對應的元素 $\text{pk}_{i, h_i}$ 一致。
&lt;/p>
$$
H(s_i) \overset{?}{=} \text{pk}_{i, h_i} \quad (\text{對於所有 } 1 \le i \le 256)
$$
&lt;p>這個過程在數學上極其簡單，只要量子電腦無法對 $H$ 進行反推，就不可能偽造簽章。然而，一旦進行簽章，一半的私鑰就會暴露在網路上。如果用同一對金鑰對另一則訊息進行簽章，暴露的私鑰組合起來就會給攻擊者提供偽造空間。這產生了強烈的「一次性（One-Time）」限制。
為了使其能實際應用，人們開發了使用Merkle Tree將大量一次性金鑰綁定到單一根公鑰的&lt;strong>XMSS&lt;/strong>，以及無狀態的**SPHINCS+**等技術，但它們都有簽章大小達到數十KB的缺點。&lt;/p>
&lt;h3 id="42-晶格密碼學lattice-based-cryptography">4.2. 晶格密碼學（Lattice-Based Cryptography）
&lt;/h3>&lt;p>目前作為PQC主流備受期待，並被NIST採納為主要標準規格（FIPS 204: ML-DSA / 前身為CRYSTALS-Dilithium，以及Falcon等）的，是&lt;strong>晶格密碼學&lt;/strong>。&lt;/p>
&lt;p>晶格密碼學的安全性依賴於「多維晶格中的最短向量問題（SVP: Shortest Vector Problem）」和「錯誤學習問題（LWE: Learning With Errors）」等經過數學證明的困難問題。即便使用量子電腦，目前也尚未發現能有效解決晶格問題的演算法。&lt;/p>
&lt;p>&lt;strong>LWE（Learning With Errors）的數學模型：&lt;/strong>
LWE問題的基本概念是，在聯立一次方程式中刻意加入「微小的雜訊（誤差）」，使問題變得極度困難。
令秘密向量為 $\mathbf{s} \in \mathbb{Z}_q^n$。
隨機選取一個巨大的公開矩陣 $\mathbf{A} \in \mathbb{Z}_q^{m \times n}$，以及刻意附加的微小雜訊向量 $\mathbf{e} \in \mathbb{Z}_q^m$。
公鑰 $\mathbf{b}$ 如下計算：&lt;/p>
$$
\mathbf{b} = \mathbf{A}\mathbf{s} + \mathbf{e} \pmod{q}
$$
&lt;p>即使矩陣 $\mathbf{A}$ 和向量 $\mathbf{b}$（公鑰）被公開，由於雜訊 $\mathbf{e}$ 的存在，要從中反推私鑰 $\mathbf{s}$ 變得非常困難。如果沒有雜訊，只需透過高斯消去法即可解出，但加入了雜訊後，所有維度的搜尋空間會發生爆炸性增長，從而對傳統與量子電腦都提供了堅固的安全性。
在區塊鏈等使用的實際演算法（如Dilithium）中，採用了在多項式環上展開的&lt;strong>Ring-LWE（或Module-LWE）&lt;/strong>，以縮減金鑰大小並提升運算速度。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>優點&lt;/strong>：與雜湊簽章相比，公鑰與簽章大小相對較小（約數KB），且簽章產生和驗證的運算速度非常快（與ECDSA相當甚至更快）。&lt;/li>
&lt;li>&lt;strong>缺點&lt;/strong>：數學結構複雜，且歷史驗證期較短，無法完全排除未來發現新破解演算法的風險。&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="5-區塊鏈轉向pqc的技術挑戰">5. 區塊鏈轉向PQC的技術挑戰
&lt;/h2>&lt;p>儘管存在PQC演算法（如Dilithium和SPHINCS+），這並不代表我們明天就能將其導入比特幣或以太坊。仍有許多分散式系統特有的沉重挑戰需要克服。&lt;/p>
&lt;h3 id="51-簽章大小膨脹與可擴展性的崩潰">5.1. 簽章大小膨脹與可擴展性的崩潰
&lt;/h3>&lt;p>導入PQC最大的障礙在於資料大小的大幅膨脹。
目前ECDSA的簽章大小約為70位元組，而晶格密碼學的Dilithium（ML-DSA）的簽章大小則高達約2,420到4,595位元組（視安全等級而定），公鑰大小也超過1,300位元組。至於基於雜湊的SPHINCS+，光是簽章就可能達到數萬位元組。&lt;/p>
&lt;p>如果比特幣在保持現有區塊大小上限（含SegWit約4MB的權重）的情況下導入PQC，單個區塊能容納的交易數量將大幅減少。網路吞吐量（TPS：Transactions Per Second）將遭受毀滅性打擊，網路壅塞將成為常態。
為了解決這個問題，必須大幅提高區塊大小。然而，這將增加全節點的儲存空間及網路頻寬需求，使個人運行節點變得困難，最終陷入導致&lt;strong>網路中心化&lt;/strong>的困境。&lt;/p>
&lt;div class="mermaid">pie title "區塊鏈中的簽章資料大小比較 (概念圖)"
"ECDSA (約70 Bytes)" : 2
"Dilithium ML-DSA (約2,500 Bytes)" : 58
"SPHINCS+ (約17,000 Bytes)" : 40&lt;/div>
&lt;p>&lt;em>(※ 導入PQC伴隨的交易資料膨脹，將成為可擴展性的致命瓶頸)&lt;/em>&lt;/p>
&lt;h3 id="52-對以太坊虛擬機evm的影響與預先編譯合約">5.2. 對以太坊虛擬機（EVM）的影響與預先編譯合約
&lt;/h3>&lt;p>在像以太坊這樣圖靈完備的智慧合約平台中，導入PQC需要對EVM（以太坊虛擬機）進行根本性的升級。
目前的EVM中，為了驗證ECDSA簽章，準備了名為 &lt;code>ecrecover&lt;/code>（地址: &lt;code>0x01&lt;/code>）的預先編譯合約（Precompiled Contract），經過最佳化後只需非常低的Gas費用（3000 Gas）即可進行簽章驗證。&lt;/p>
&lt;p>然而，像Dilithium或Falcon等新晶格密碼演算法的驗證過程，牽涉到複雜的多項式運算與矩陣運算。如果僅用現有的EVM操作碼（Opcode）來實作，單次簽章驗證就可能消耗數百萬到數千萬的Gas。這足以在單筆交易中耗盡目前的區塊Gas上限（約3000萬Gas）。&lt;/p>
&lt;p>為了避免這個情況，必須透過網路的硬分叉（Hard Fork），在EVM內部新增專門用於驗證PQC的Precompiled Contract（例如將 &lt;code>0x10&lt;/code> 分配給 DilithiumVerify）。這需要各個以太坊客戶端（Geth, Nethermind, Erigon等）的核心開發者協同合作，在C++、Go、Rust等語言層級上進行晶格密碼學驗證邏輯的最佳化實作，並執行安全審計，這將是一個漫長的過程。&lt;/p>
&lt;h3 id="53-硬分叉達成共識的困難度">5.3. 硬分叉達成共識的困難度
&lt;/h3>&lt;p>要更改基礎的簽章演算法，必須進行更新整個網路協定的&lt;strong>硬分叉（Hard Fork）&lt;/strong>。然而，在像比特幣這種重視「不改變規則、去中心化」的社群中，達成共識的過程在政治上也極為困難。關於過渡至PQC的BIP（比特幣改進提案）從提出到落實，可能需要長達數年的討論與測試。&lt;/p>
&lt;hr>
&lt;h2 id="6-q-day何時到來-過渡路線圖">6. 「Q-Day」何時到來？ 過渡路線圖
&lt;/h2>&lt;p>「量子電腦完全破解256位元橢圓曲線密碼學的那一天（Q-Day）」何時會到來？
研究人員之間的意見雖然存在分歧，但許多專家預測，擁有數千到數萬個穩定邏輯量子位元（具備抗雜訊與錯誤修正能力）的大型量子電腦，將在**「2030年代中期到2040年代間」**出現。不過，若硬體架構取得突破，或發現更有效率的量子演算法，這個時間點也有提早的可能（如2030年前後）。&lt;/p>
&lt;p>為了避免加密資產生態系錯失良機，應該採取的路線圖如下：&lt;/p>
&lt;h3 id="階段1混合簽章與帳戶抽象化現在2028年左右">階段1：混合簽章與帳戶抽象化（現在～2028年左右）
&lt;/h3>&lt;p>目前的區塊鏈領域，尤其是以太坊的開發陣營（如Vitalik Buterin等人），正在研究結合ECDSA與PQC（雜湊簽章或晶格密碼學）的**「混合簽章」**。這種方法在交易中同時附加現有安全的ECDSA簽章與PQC簽章，即使其中一方被破解，也能維持安全性。
此外，透過利用帳戶抽象化（Account Abstraction, ERC-4337），也正在推動無需等待協定層級硬分叉，就能在智慧合約錢包上以可選擇加入（Opt-in，僅限有意願的用戶）的方式支援PQC簽章。&lt;/p>
&lt;h3 id="階段2零知識證明zk-rollups的應用2025年">階段2：零知識證明（ZK-Rollups）的應用（2025年～）
&lt;/h3>&lt;p>被寄予厚望用來解決PQC最大弱點「簽章資料膨脹」的王牌，是應用Layer 2技術的&lt;strong>ZK-Rollups（零知識證明）&lt;/strong>。
不將龐大的PQC簽章資料直接寫入Layer 1（主鏈），而是在Layer 2上驗證並彙總大量PQC交易。然後，使用ZK-SNARKs或ZK-STARKs將它們壓縮成一個極小的「證明資料（Proof）」，再記錄到Layer 1。
需要注意的是，SNARKs的某些構造（如Groth16）本身具備量子脆弱性，因此採用僅依賴抗量子雜湊函數的&lt;strong>ZK-STARKs&lt;/strong>將成為關鍵。&lt;/p>
&lt;h3 id="階段3協定層級的硬分叉2030年左右">階段3：協定層級的硬分叉（2030年左右）
&lt;/h3>&lt;p>當NIST的PQC標準化完全確立，業界標準函式庫齊備並經過充分測試後，預期Bitcoin或Ethereum等主流公鏈將執行硬分叉，把預設簽章方式全面過渡到PQC。在這個過渡期，將會對用戶發出大規模公告，「呼籲用戶將資金從舊錢包轉移到支援PQC的新錢包」。&lt;/p>
&lt;h3 id="先驅專案案例">先驅專案案例
&lt;/h3>&lt;p>少數區塊鏈專案已經預見了這場量子威脅，從初期階段就主打抗量子特性進行開發。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>QRL (Quantum Resistant Ledger)&lt;/strong>: 是一個在協定層級原生實作XMSS（延伸Merkle簽章方案）這種基於雜湊的PQC的早期區塊鏈。&lt;/li>
&lt;li>&lt;strong>Algorand / Cellframe&lt;/strong>: 具備彈性密碼層的模組化架構，以應對未來的PQC升級，並正積極探索晶格密碼學的整合。&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="7-結論加密資產的未來與保護我們的資產">7. 結論：加密資產的未來與保護我們的資產
&lt;/h2>&lt;p>「後量子時代」的到來已不再只是科幻小說中的空想領域，而是作為針對現實密碼系統的具體技術挑戰，逼近我們的眼前。&lt;/p>
&lt;p>Shor演算法和Grover演算法這兩把量子電腦的利劍，分別威脅著目前區塊鏈基礎的公開金鑰密碼學與雜湊函數。特別是ECDSA的脆弱性最為致命。為了避免遭受搶先交易攻擊導致資金被盜的風險，過渡到後量子密碼學（PQC）是絕對無法避免的道路。&lt;/p>
&lt;p>然而，科技界與區塊鏈社群並非束手無策坐以待斃。包含晶格密碼學與雜湊簽章在內的PQC演算法選定及標準化正穩步推進。透過運用零知識證明（ZK-STARKs）與Layer 2擴容技術，克服導入PQC最大難關「資料大小膨脹」的道路也開始浮現。&lt;/p>
&lt;p>身為一般加密資產用戶或投資者的我們，現在不需要恐慌地拋售所有資產。但是，具備以下基本素養與自我保護意識非常重要。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>避免重複使用地址&lt;/strong>：不僅基於隱私考量，基於安全考量更應嚴格遵守，不要將資金長時間存放在「已使用的地址（只要發送過一次資金，公鑰就暴露在區塊鏈上的地址）」。&lt;/li>
&lt;li>&lt;strong>關注科技趨勢&lt;/strong>：留意比特幣BIP或以太坊EIP等主要網路關於PQC過渡的討論及硬分叉新聞，在必要的時機，妥善進行錢包轉移操作。&lt;/li>
&lt;/ul>
&lt;p>區塊鏈的歷史，一直都是一段面對新技術威脅不斷升級與展現韌性（回復力）的歷史。正如我們克服了可擴展性問題與環境問題（如PoW過渡到PoS），面對這場前所未見的量子威脅，整個生態系也將會探索出解決方案並加以適應。
我們期待，代表人類新智慧的量子電腦，與作為信任科技的去中心化分散式帳本，並不會在衝突中走向毀滅，而是能在更高層次上融合，昇華為一個更堅固的系統。&lt;/p>
&lt;hr>
&lt;p>&lt;em>參考文獻・相關連結:&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>深入淺出：量子退火與量子閘模型的差異</title><link>http://kenji.blog/zh-tw/p/quantum-annealing-vs-gate-model-explained/</link><pubDate>Fri, 11 Sep 2026 12:00:00 +0900</pubDate><guid>http://kenji.blog/zh-tw/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 深入淺出：量子退火與量子閘模型的差異" />&lt;h1 id="深入淺出量子退火與量子閘模型的差異">深入淺出：量子退火與量子閘模型的差異
&lt;/h1>&lt;p>量子運算是下一代的運算技術，利用量子力學原理（疊加與量子糾纏），能夠將現代古典電腦（包含傳統的超級電腦）需要耗費龐大時間才能解決的特定問題，以飛躍般的速度求解。&lt;/p>
&lt;p>目前，實現量子電腦的方法大致可分為兩大主流範式：&lt;strong>「量子退火（Quantum Annealing）」&lt;strong>與&lt;/strong>「量子閘模型（Quantum Gate Model）」&lt;/strong>。這兩種架構在基礎物理方法、擅長的運算任務以及硬體實作所面臨的挑戰上，都有著巨大的差異。&lt;/p>
&lt;p>本文將從物理原理、數學模型（Ising模型、QUBO、么正變換等）、當前的技術限制，一直到具體的使用案例，以非常詳細且具技術性的視角，對這兩種架構進行徹底的比較與解說。&lt;/p>
&lt;hr>
&lt;h2 id="1-量子運算的基礎與古典電腦的根本差異">1. 量子運算的基礎：與古典電腦的根本差異
&lt;/h2>&lt;p>古典電腦在處理資訊時，使用的是狀態為「0」或「1」的「位元（Bit）」。另一方面，量子電腦使用的是「量子位元（Qubit）」。藉由量子力學中的「疊加（Superposition）」原理，量子位元可以機率性地同時擁有 0 與 1 的狀態。&lt;/p>
&lt;p>此外，透過利用被稱為「量子糾纏（Entanglement）」的現象，多個量子位元的狀態會產生強烈的相互關聯，對單一量子位元的操作將會瞬間影響整個系統。這使得類似平行處理的運算（量子平行性）成為可能。&lt;/p>
&lt;p>然而，量子狀態對於外部雜訊（如熱能或電磁波等）非常脆弱，狀態一旦被破壞就會退化回古典狀態，這被稱為「退相干（Decoherence）」，是目前面臨的一大難題。對於解決這種雜訊問題的不同方法，也導致了退火與量子閘模型在設計理念上的巨大差異。&lt;/p>
&lt;hr>
&lt;h2 id="2-量子退火-quantum-annealing-詳細解說">2. 量子退火 (Quantum Annealing) 詳細解說
&lt;/h2>&lt;p>量子退火主要是一種專門用來求解**「組合最佳化問題」**的專用運算架構。它以 1998 年由東京工業大學的門脇萬平與西森秀稔所提出的理論為基礎，並因為加拿大 D-Wave Systems 公司在全球首次將其商業化而廣為人知。&lt;/p>
&lt;h3 id="21-物理機制橫向磁場-ising-模型與量子漲落">2.1. 物理機制：橫向磁場 Ising 模型與量子漲落
&lt;/h3>&lt;p>量子退火利用了自然界物理系統傾向於穩定在「能量最低狀態（基態）」的特性來進行運算。&lt;/p>
&lt;p>在古典的方法「模擬退火（Simulated Annealing）」中，是利用熱漲落來逃離局部最佳解（局部最小值）。另一方面，量子退火則是利用「量子漲落（Quantum Fluctuation）」，透過「量子穿隧效應（Quantum Tunneling）」來穿透能量障壁，從而更有效率地探索全域最佳解（全域最小值）。&lt;/p>
&lt;p>量子退火系統的時間演化可以由以下的哈密頓算符（代表系統總能量的運算子） $H(t)$ 來描述：&lt;/p>
$$ H(t) = A(t) H_0 + B(t) H_P $$
&lt;p>這裡，$t$ 是時間，$A(t)$ 是一個逐漸遞減的函數，而 $B(t)$ 是一個逐漸遞增的函數。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>$H_0$（初始哈密頓算符）&lt;/strong>: 代表橫向磁場（Transverse field），用來產生量子漲落。
$$ H_0 = - \sum_{i} \sigma_i^x $$
（$\sigma_i^x$ 是包立 X 矩陣，代表位元的反轉。）&lt;/li>
&lt;li>&lt;strong>$H_P$（問題哈密頓算符）&lt;/strong>: 用來表示想要求解的最佳化問題的 Ising 模型（Ising Model）。&lt;/li>
&lt;/ul>
&lt;p>在初始狀態 ($t=0$) 時，$A(0)$ 處於最大值，系統處於 $H_0$ 的基態（所有狀態均勻疊加的狀態）。接著隨著時間慢慢地減弱橫向磁場，同時增強問題哈密頓算符的交互作用。&lt;/p>
&lt;h3 id="22-絕熱量子運算-adiabatic-quantum-computation">2.2. 絕熱量子運算 (Adiabatic Quantum Computation)
&lt;/h3>&lt;p>在這個過程中非常重要的是**「絕熱定理（Adiabatic Theorem）」**。根據絕熱定理，如果系統的變化「夠慢（絕熱地）」，系統就會一直停留在每個瞬間的哈密頓算符的基態。&lt;/p>
&lt;p>也就是說，當最終 $A(t) \to 0$, $B(t) \to 1$ 時，系統會達到 $H_P$ 的基態，亦即得到了**「最佳化問題的精確解」**。&lt;/p>
&lt;div class="mermaid">graph TD
A["哈密頓算符 H_0 (初始狀態)"] -->|"絕熱變化 (足夠緩慢)"| B["始終維持基態"]
A -->|"非絕熱變化 (太快/熱雜訊)"| C["躍遷至激發態 (錯誤)"]
B --> D["哈密頓算符 H_P (全域最佳解)"]
C --> E["受困於局部最佳解"]
D --> F["讀取解答"]
E --> F&lt;/div>
&lt;h3 id="23-從-qubo-映射到-ising-模型">2.3. 從 QUBO 映射到 Ising 模型
&lt;/h3>&lt;p>要在量子退火機上求解現實世界的問題，必須將問題公式化為**QUBO（Quadratic Unconstrained Binary Optimization：無約束二次二元最佳化）**的形式。&lt;/p>
&lt;p>QUBO 的目標函數定義如下：
&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>
這裡，$x_i \in \{0, 1\}$ 是二元變數，$Q$ 是權重矩陣。&lt;/p>
&lt;p>由於硬體（例如 D-Wave）處理的是物理自旋（朝上/朝下），因此需要將變數轉換為使用 $\sigma_i \in \{-1, +1\}$ 的 Ising 模型。轉換公式如下：
&lt;/p>
$$ x_i = \frac{1 - \sigma_i}{2} \quad \text{或} \quad \sigma_i = 1 - 2x_i $$
&lt;p>將其代入 QUBO 的公式並進行整理後，就可以得到 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}$: 自旋間的交互作用（耦合係數）。物理量子位元間的耦合強度。&lt;/li>
&lt;li>$h_i$: 作用於各個自旋的局部磁場（偏置）。&lt;/li>
&lt;/ul>
&lt;h3 id="24-量子退火的硬體與挑戰以-d-wave-為例">2.4. 量子退火的硬體與挑戰（以 D-Wave 為例）
&lt;/h3>&lt;p>D-Wave 的量子處理器是利用超導量子干涉儀（SQUID）來實現的。物理量子位元之間的耦合取決於硬體的佈線，並非完全耦合（所有的位元都相互連接的狀態）。
從早期的「奇美拉圖（Chimera graph）」，演進到「飛馬圖（Pegasus）」以及「微風圖（Zephyr）」，雖然耦合度有所提升，但仍然存在限制。&lt;/p>
&lt;p>因此，需要一個名為**「子圖嵌入（Minor Embedding）」**的處理程序，將具有複雜圖形結構的問題映射到物理圖形上。這會導致用多個物理量子位元（鏈）來表示一個邏輯變數，從而減少可用的有效量子位元數量，並伴隨著運算精度下降的問題。&lt;/p>
&lt;hr>
&lt;h2 id="3-量子閘模型-quantum-gate-model-詳細解說">3. 量子閘模型 (Quantum Gate Model) 詳細解說
&lt;/h2>&lt;p>量子閘模型是將古典電腦的邏輯閘（AND, OR, NOT 等）擴展到量子力學領域的產物，是能夠實現**「通用量子運算（Universal Quantum Computation）」**的架構。包含 IBM、Google、Rigetti、IonQ 等許多公司都採用了這種架構。&lt;/p>
&lt;h3 id="31-么正變換與狀態向量">3.1. 么正變換與狀態向量
&lt;/h3>&lt;p>在量子閘模型中，整個量子位元系統的狀態被表示為一個「狀態向量（State Vector）」 $|\psi\rangle$。1 個量子位元的狀態可以表示為基態 $|0\rangle$ 與 $|1\rangle$ 的線性組合：
&lt;/p>
$$ |\psi\rangle = \alpha |0\rangle + \beta |1\rangle $$
&lt;p>
這裡，$\alpha$ 與 $\beta$ 是複數機率幅，並且滿足 $|\alpha|^2 + |\beta|^2 = 1$。在幾何學上，這個狀態可以視覺化為「布洛赫球面（Bloch Sphere）」上的一點。&lt;/p>
&lt;p>量子運算的步驟被描述為對狀態向量應用&lt;strong>么正算符（Unitary Operator） $U$&lt;/strong>。么正矩陣具有 $U^\dagger U = I$（與其埃爾米特共軛的乘積為單位矩陣）的特性，這對應於量子力學中薛丁格方程式的時間演化，是一個可逆的操作。
&lt;/p>
$$ |\psi_{t+1}\rangle = U_t |\psi_t\rangle $$
&lt;h3 id="32-基本的量子閘與線路模型">3.2. 基本的量子閘與線路模型
&lt;/h3>&lt;p>量子運算演算法被設計為一連串的量子閘序列（量子線路）。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>包立閘 (X, Y, Z)&lt;/strong>: 在布洛赫球面上沿著各個軸旋轉 180 度。X 閘相當於古典的 NOT 閘。&lt;/li>
&lt;li>&lt;strong>哈達瑪閘 (H)&lt;/strong>: 將 $|0\rangle$ 轉換為 $\frac{|0\rangle + |1\rangle}{\sqrt{2}}$，從而創造出疊加狀態。
$$ H = \frac{1}{\sqrt{2}} \begin{pmatrix} 1 &amp; 1 \\ 1 &amp; -1 \end{pmatrix} $$&lt;/li>
&lt;li>&lt;strong>CNOT 閘 (Controlled-NOT)&lt;/strong>: 2 個量子位元的閘。只有當控制位元為 $|1\rangle$ 時，才對目標位元施加 X 閘。這會產生量子糾纏（Entanglement）。&lt;/li>
&lt;/ul>
&lt;p>任何量子演算法都可以藉由少數的單量子位元閘與 CNOT 閘的組合來近似表示（通用閘集合）。&lt;/p>
&lt;div class="mermaid">graph LR
Q0["量子位元 0: |0>"] --> H1["哈達瑪閘 (H)"]
Q1["量子位元 1: |0>"] --> I1["恆等操作 (I)"]
H1 --> C1["控制位元 (Control)"]
I1 --> T1["目標位元 (Target)"]
C1 -. "糾纏" .- T1
C1 --> M0["測量 (Measurement)"]
T1 --> M1["測量 (Measurement)"]
M0 --> Result["古典結果 (0 或 1)"]
M1 --> Result&lt;/div>
&lt;h3 id="33-錯誤更正與從-nisq-到-ftqc-的道路">3.3. 錯誤更正與從 NISQ 到 FTQC 的道路
&lt;/h3>&lt;p>量子閘模型最大的挑戰在於量子狀態會被雜訊破壞的「退相干」現象。當運算步驟（閘深度）越深，錯誤就會累積得越多。&lt;/p>
&lt;p>為了進行理想的運算，**量子錯誤更正（Quantum Error Correction）**是不可或缺的。舉例來說，在「表面碼（Surface Code）」等方法中，會將多個物理量子位元綑綁在一起，構成一個無錯誤的「邏輯量子位元（Logical Qubit）」。然而，為了一個邏輯量子位元，需要數千到數萬個物理量子位元，這會產生龐大的額外開銷（Overhead）。&lt;/p>
&lt;p>我們目前所處的階段，是尚未具備錯誤更正能力，僅擁有數十到數百個量子位元的&lt;strong>NISQ（Noisy Intermediate-Scale Quantum，有雜訊的中等規模量子）&lt;strong>設備時代。要實現具備完整錯誤更正能力的&lt;/strong>FTQC（Fault-Tolerant Quantum Computing：容錯量子運算）&lt;/strong>，還需要許多技術上的突破。&lt;/p>
&lt;hr>
&lt;h2 id="4-技術與數學比較總結">4. 技術與數學比較總結
&lt;/h2>&lt;p>以下比較這兩種架構的根本差異：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">比較項目&lt;/th>
&lt;th style="text-align:left">量子退火 (Quantum Annealing)&lt;/th>
&lt;th style="text-align:left">量子閘模型 (Gate Model)&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>運算模型&lt;/strong>&lt;/td>
&lt;td style="text-align:left">絕熱量子運算（哈密頓算符的連續時間演化）&lt;/td>
&lt;td style="text-align:left">么正變換（離散量子閘操作的序列）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>適合的問題&lt;/strong>&lt;/td>
&lt;td style="text-align:left">組合最佳化問題 (QUBO, Ising 模型)&lt;/td>
&lt;td style="text-align:left">通用型（量子化學模擬、質因數分解、搜尋等）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>表達能力&lt;/strong>&lt;/td>
&lt;td style="text-align:left">啟發式最佳化（近似解）&lt;/td>
&lt;td style="text-align:left">等同於通用量子圖靈機（理論上可進行所有運算）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>實作範例&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 等&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>對雜訊的耐受度&lt;/strong>&lt;/td>
&lt;td style="text-align:left">相對較強（因為停留在基態附近，可容許一定程度的熱雜訊）&lt;/td>
&lt;td style="text-align:left">非常弱（輕微的雜訊就會導致相位偏移，破壞運算結果）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>擴展性 (Scalability)&lt;/strong>&lt;/td>
&lt;td style="text-align:left">數千至數萬量子位元規模（取決於物理結構，難以邏輯位元化）&lt;/td>
&lt;td style="text-align:left">數百量子位元規模（邁向 FTQC 需要數百萬規模）&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>量子退火適合作為「特定用途的輔助處理器（Coprocessor）」，以彌補古典電腦極限的方式來求解最佳化問題。另一方面，量子閘模型是「通用電腦」的量子版本，終極目標是追求超越古典電腦的運算能力（量子霸權），但硬體的建構極其困難。&lt;/p>
&lt;hr>
&lt;h2 id="5-當前的限制與挑戰">5. 當前的限制與挑戰
&lt;/h2>&lt;h3 id="量子退火的限制">量子退火的限制
&lt;/h3>&lt;ol>
&lt;li>&lt;strong>耦合度的限制（Connectivity）&lt;/strong>: 由於前面提到的子圖嵌入，當問題規模變大時，所需的物理量子位元數量會呈指數增長。&lt;/li>
&lt;li>&lt;strong>係數的精度（Precision）&lt;/strong>: 在硬體上設定 $J_{ij}$ 與 $h_i$ 等類比參數時所產生的物理誤差，會直接影響解的品質。&lt;/li>
&lt;li>&lt;strong>溫度與非絕熱躍遷&lt;/strong>: 由於系統溫度並非絕對零度，存在因熱激發而偏離最佳解的機率。&lt;/li>
&lt;/ol>
&lt;h3 id="量子閘模型的限制">量子閘模型的限制
&lt;/h3>&lt;ol>
&lt;li>&lt;strong>相干時間（Coherence Time）&lt;/strong>: 能夠維持量子狀態的時間僅有幾微秒到幾毫秒左右，這嚴格限制了在此期間能夠執行的量子閘數量（線路深度）。&lt;/li>
&lt;li>&lt;strong>閘保真度（Gate Fidelity）&lt;/strong>: 2 量子位元閘（如 CNOT 等）的操作錯誤率仍然不夠低（一般約為 99.x% 左右）。為了實現 FTQC，必須將其提升至 99.99% 以上。&lt;/li>
&lt;li>&lt;strong>量子體積（Quantum Volume）&lt;/strong>: 不僅僅是量子位元數，如何擴展考量了交互耦合與錯誤率的實質運算能力（量子體積），是當前最大的挑戰。&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="6-具體的使用案例與演算法">6. 具體的使用案例與演算法
&lt;/h2>&lt;p>接下來看看兩種架構各自擅長的具體應用領域。&lt;/p>
&lt;h3 id="61-量子退火的使用案例">6.1. 量子退火的使用案例
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>物流與路線規劃&lt;/strong>: 大量車輛的配送路線最佳化（旅行推銷員問題的變體）。考慮交通壅塞的即時路徑搜尋。&lt;/li>
&lt;li>&lt;strong>金融工程&lt;/strong>: 投資組合最佳化。尋找在最小化風險的同時最大化報酬的股票組合。&lt;/li>
&lt;li>&lt;strong>機器學習&lt;/strong>: 特徵選擇（Feature Selection）。從龐大的資料集中提取對預測最有貢獻的變數組合。&lt;/li>
&lt;li>&lt;strong>製造業&lt;/strong>: 工廠中的零工車間排程問題（Job-shop scheduling problem，決定哪個零件在哪台機器上以什麼順序加工最快）。&lt;/li>
&lt;/ul>
&lt;h3 id="62-量子閘模型的使用案例">6.2. 量子閘模型的使用案例
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>量子化學模擬&lt;/strong>: 高精度地模擬分子的能量狀態與化學反應。&lt;/li>
&lt;li>&lt;strong>質因數分解（Shor 演算法）&lt;/strong>: 能在多項式時間內對巨大的合成數進行質因數分解的演算法。一旦其實用化，將會破解當前如 RSA 等公開金鑰密碼基礎建設，因此轉向抗量子密碼學（PQC）已成為當務之急。&lt;/li>
&lt;li>&lt;strong>資料庫搜尋（Grover 演算法）&lt;/strong>: 從未排序的資料庫中搜尋目標資料時，古典電腦需要 $O(N)$ 的步驟，而 Grover 演算法則能在 $O(\sqrt{N})$ 的步驟內完成搜尋。&lt;/li>
&lt;/ul>
&lt;h3 id="63-nisq-時代的混合演算法vqe-與-qaoa">6.3. NISQ 時代的混合演算法：VQE 與 QAOA
&lt;/h3>&lt;p>為克服 NISQ 設備中淺層量子線路的限制，結合量子電腦與古典電腦優勢的「變分量子演算法（Variational Quantum Algorithms）」正受到矚目。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>VQE (Variational Quantum Eigensolver)&lt;/strong>: 求解分子基態能量的演算法。使用帶有參數的量子線路（Ansatz）來準備量子狀態，並測量能量期望值 $\langle \psi(\theta) | H | \psi(\theta) \rangle$。將此期望值作為目標函數，使用古典的最佳化演算法（如梯度下降法等）來更新參數 $\theta$。藉由反覆執行此過程直到收斂，以求得分子準確的能量狀態。&lt;/li>
&lt;li>&lt;strong>QAOA (Quantum Approximate Optimization Algorithm)&lt;/strong>: 使用量子閘模型來求解組合最佳化問題的演算法。它藉由「特羅特展開（Trotterization）」，將量子退火的絕熱時間演化近似為離散的量子閘操作，並交替作用哈密頓算符以獲得近似解。QAOA 被期待成為利用閘模型求解最佳化問題的有力手段。&lt;/li>
&lt;/ul>
&lt;div class="mermaid">graph TD
User["使用者問題"] --> Formulation{"問題的性質"}
Formulation -- "組合最佳化" --> QA_Path["量子退火 / Ising 機器"]
QA_Path --> QUBO["QUBO 公式化"]
QUBO --> DWave["D-Wave 執行"]
Formulation -- "化學計算・通用計算" --> Gate_Path["量子閘模型"]
Gate_Path --> Circuit["量子線路設計 (VQE / QAOA)"]
Circuit --> IBMGoogle["IBM / Google 量子硬體執行"]&lt;/div>
&lt;hr>
&lt;h2 id="7-總結">7. 總結
&lt;/h2>&lt;p>量子退火與量子閘模型，兩者在利用量子力學的奇妙性質作為運算資源這一點上是相同的，但其方法與達成的目標卻有著巨大的差異。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>量子退火&lt;/strong>是為了解決組合最佳化這類特定實際問題，以期及早產出實用成果的「特化型啟發式引擎」。目前已有許多企業正在推進各種概念驗證（PoC）。&lt;/li>
&lt;li>&lt;strong>量子閘模型&lt;/strong>則是從物理與化學的嚴密模擬，一直到密碼破解，蘊含著從根本顛覆計算機科學範式的「通用量子電腦」。然而，為了跨越錯誤更正這座巨大的高牆，需要長期的研究與開發。&lt;/li>
&lt;/ul>
&lt;p>在未來，預期將會建立起以古典超級電腦（HPC）為核心，遇到最佳化任務時呼叫退火機，進行量子化學計算時呼叫閘模型量子電腦的**「異質運算（Heterogeneous Computing）」**環境。&lt;/p>
&lt;p>量子電腦雖然仍是一項發展中的技術，但在硬體與演算法雙方面都正在日新月異地進化。理解 Ising 模型的數學原理以及量子線路的基礎，將成為迎接即將到來的量子原生時代的強大武器。&lt;/p>
&lt;hr>
&lt;p>&lt;em>本文全面解說了從量子運算的基礎概念到最新硬體動向的各個面向。請持續關注未來的最新研究動向。&lt;/em>&lt;/p></description></item><item><title>用Python模擬秀爾演算法</title><link>http://kenji.blog/zh-tw/p/shors-algorithm-simulation-python/</link><pubDate>Fri, 11 Sep 2026 08:00:00 +0900</pubDate><guid>http://kenji.blog/zh-tw/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 用Python模擬秀爾演算法" />&lt;h1 id="1-簡介量子電腦帶來的密碼危機">1. 簡介：量子電腦帶來的密碼危機
&lt;/h1>&lt;p>現代網際網路社會中的安全性，大部分依賴於&lt;strong>公鑰加密系統&lt;/strong>（尤其是RSA加密）。當我們在線上購物傳送信用卡資訊，或是傳遞高機密性資料時，這些通訊內容都受到RSA加密的強力保護。&lt;/p>
&lt;p>RSA加密的安全性基礎，仰賴於一個數學事實：「&lt;strong>將極大的整數進行質因數分解，對古典電腦（我們平時使用的PC或超級電腦）來說是極度困難的&lt;/strong>」。然而，彼得·秀爾（Peter Shor）在1994年發表的「&lt;strong>秀爾演算法（Shor&amp;rsquo;s Algorithm）&lt;/strong>」，卻從根本上推翻了這個前提。數學上已經證明，如果在大規模的量子電腦上執行秀爾演算法，原本古典電腦需要耗費超過宇宙年齡才能完成的質因數分解，只需短短幾分鐘到幾小時就能解開。&lt;/p>
&lt;p>本文將詳細解說秀爾演算法是如何高速進行質因數分解，從其數學原理，到使用Python與量子計算框架&lt;strong>Qiskit&lt;/strong>的具體模擬實作，進行徹底且深入的剖析。&lt;/p>
&lt;hr>
&lt;h1 id="2-計算複雜度的劇烈變化從指數函數到多項式時間">2. 計算複雜度的劇烈變化：從指數函數到多項式時間
&lt;/h1>&lt;p>為什麼質因數分解這麼困難？即使使用已知在古典電腦上最佳的質因數分解演算法「普通數域篩法（General Number Field Sieve, GNFS）」，其計算複雜度依然是次指數時間的。&lt;/p>
&lt;p>使用古典方法，對一個位數為 $N$ 的合成數進行質因數分解的時間複雜度如下：&lt;/p>
$$ O\left(\exp\left( c (\log N)^{1/3} (\log \log N)^{2/3} \right)\right) $$
&lt;p>正因如此，只要增加金鑰長度（例如增加到2048位元或4096位元），使用古典電腦破解就需要數千年、數萬年這種不切實際的時間。&lt;/p>
&lt;p>但是，如果在量子電腦上使用&lt;strong>秀爾演算法&lt;/strong>，相對於輸入的位元數 $\log N$，計算複雜度將會劇烈縮減至多項式時間。&lt;/p>
$$ O((\log N)^3) $$
&lt;p>這意味著，當位元數增加為2倍時，古典電腦的計算時間將呈天文數字般暴增，而量子電腦的計算時間頂多只會增加大約8倍。這種**將計算複雜度層級從指數時間縮減到多項式時間（包含於BQP複雜度類別）**的特性，正是秀爾演算法真正的厲害之處。&lt;/p>
&lt;div class="mermaid">graph TD
A["輸入大小(位元數) N的增加"] --> B{"演算法的選擇"}
B -->|古典: 普通數域篩法| C["次指數級增加 O(exp(...))"]
B -->|量子: 秀爾演算法| D["多項式時間 O((log N)^3)"]
C --> E["數千年〜數十億年 (無法破解)"]
D --> F["數分鐘〜數小時 (現實時間內可破解)"]&lt;/div>
&lt;hr>
&lt;h1 id="3-演算法全貌與數學背景">3. 演算法全貌與數學背景
&lt;/h1>&lt;p>其實秀爾演算法並非全部都在量子電腦上執行。它是透過古典電腦的預先處理與後續處理，加上量子電腦負責核心部分（週期尋找演算法）的相互配合所構成。&lt;/p>
&lt;p>演算法的整體流程如下：&lt;/p>
&lt;div class="mermaid">graph TD
A["輸入: 想要進行質因數分解的合成數 N"] --> B["選擇一個小於 N 的隨機數 a"]
B --> C{"gcd(a, N) > 1 ?"}
C -- "Yes" --> D["輸出明顯的因數 gcd(a, N) 並結束"]
C -- "No" --> E["用量子演算法尋找 f(x) = a^x mod N 的週期 r"]
E --> F{"r 為偶數 且 a^(r/2) ≢ -1 mod N ?"}
F -- "No" --> B
F -- "Yes" --> G["計算因數 p = gcd(a^(r/2) - 1, N), q = gcd(a^(r/2) + 1, N)"]
G --> H["輸出: p, q"]&lt;/div>
&lt;h2 id="從質因數分解化約為週期尋找問題">從質因數分解化約為週期尋找問題
&lt;/h2>&lt;p>秀爾天才般的靈感在於，他將「&lt;strong>質因數分解問題&lt;/strong>」轉換成了「&lt;strong>週期尋找問題（Order Finding Problem）&lt;/strong>」。&lt;/p>
&lt;p>假設有一個整數 $N$（想要質因數分解的數字），以及一個與其互質的整數 $a$（$1 &lt; a &lt; N$）。我們定義以下模指數函數：&lt;/p>
$$ f(x) = a^x \bmod N $$
&lt;p>這個函數具有某個週期 $r$。也就是說，對任意的 $x$ 皆滿足 $f(x+r) = f(x)$。特別是當 $x=0$ 時，&lt;/p>
$$ a^r \equiv 1 \pmod N $$
&lt;p>能滿足此條件的最小正整數 $r$，我們稱為「$a$ 模 $N$ 的階（Order）」。只要能找到這個週期 $r$，就可以透過以下方式導出質因數。&lt;/p>
&lt;p>將式子變形後得到：
&lt;/p>
$$ a^r - 1 \equiv 0 \pmod N $$
&lt;p>
如果 $r$ 是偶數，就可以利用平方差公式進行因式分解：
&lt;/p>
$$ (a^{r/2} - 1)(a^{r/2} + 1) \equiv 0 \pmod N $$
&lt;p>這意味著 $N$ 與 $(a^{r/2} - 1)$ 或是 $(a^{r/2} + 1)$ 其中之一擁有公因數（不過必須滿足 $a^{r/2} \not\equiv -1 \pmod N$ 這個條件）。因此，我們可以使用輾轉相除法計算：&lt;/p>
$$ p = \gcd(a^{r/2} - 1, N) $$
$$ q = \gcd(a^{r/2} + 1, N) $$
&lt;p>藉此就可以找到 $N$ 的非平凡質因數 $p, q$。這些計算（計算最大公因數與產生隨機數）在古典電腦上可以非常高速地完成。因此問題就集中在&lt;strong>如何高速地找到週期 $r$&lt;/strong>。在古典電腦上，單是尋找這個週期 $r$ 本身就需要耗費指數時間。這時候就是量子電腦發揮作用的時刻了。&lt;/p>
&lt;hr>
&lt;h1 id="4-量子演算法部分尋找週期的機制">4. 量子演算法部分：尋找週期的機制
&lt;/h1>&lt;p>使用量子電腦尋找週期 $r$ 的副程式，由以下4個步驟組成。&lt;/p>
&lt;div class="mermaid">graph LR
subgraph "量子狀態的轉移"
S1["|0⟩|0⟩ (初始化)"] --> S2["H閘: 疊加 Σ|x⟩|0⟩"]
S2 --> S3["神諭 U: Σ|x⟩|a^x mod N⟩"]
S3 --> S4["QFT: 透過干涉萃取週期"]
S4 --> S5["測量: 取得近似值 y"]
end&lt;/div>
&lt;h2 id="步驟1量子暫存器的初始化與疊加">步驟1：量子暫存器的初始化與疊加
&lt;/h2>&lt;p>首先準備兩個量子暫存器。第一個暫存器用來輸入狀態，第二個暫存器用來儲存函數的計算結果。
初始狀態全部為 $|0\rangle$。&lt;/p>
$$ |\psi_0\rangle = |0\rangle_1 |0\rangle_2 $$
&lt;p>對第一個暫存器的所有量子位元套用阿達馬閘（Hadamard Gate），產生所有可能輸入 $x$ （從 $0$ 到 $Q-1$，$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>如此一來，量子電腦就能在一次運算中同時保有對應 $Q$ 個所有輸入的狀態。這正是&lt;strong>量子平行性&lt;/strong>強大的來源。&lt;/p>
&lt;h2 id="步驟2套用神諭函數模指數運算">步驟2：套用神諭函數（模指數運算）
&lt;/h2>&lt;p>接下來，使用量子運算電路 $U_f$ 計算函數 $f(x) = a^x \bmod N$，並將結果儲存於第二個暫存器中。&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>此時，第一暫存器與第二暫存器處於**量子糾纏（Entanglement）**狀態。如果（假設）我們觀測第二暫存器並得到特定的值 $k = a^{x_0} \bmod N$，那麼第一暫存器的狀態就會塌縮為所有能給出該值 $k$ 的 $x$ 的疊加態。因為函數的週期為 $r$，所以留下來的狀態會是 $x_0, x_0+r, x_0+2r, \dots$ 這樣以 $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>但是，我們想知道的並不是 $x_0$，而是週期 $r$ 本身。從這個狀態直接觀測出 $r$ 是不可能的。於是，我們使用量子傅立葉轉換。&lt;/p>
&lt;h2 id="步驟3透過量子傅立葉轉換qft進行相位干涉">步驟3：透過量子傅立葉轉換（QFT）進行相位干涉
&lt;/h2>&lt;p>對第一個暫存器套用&lt;strong>量子傅立葉轉換（Quantum Fourier Transform, QFT）&lt;/strong>。QFT是古典離散傅立葉轉換的量子版，能夠轉換狀態向量的振幅。QFT對基底狀態 $|x\rangle$ 的作用定義如下：&lt;/p>
$$ QFT |x\rangle = \frac{1}{\sqrt{Q}} \sum_{y=0}^{Q-1} \omega^{xy} |y\rangle $$
&lt;p>這裡的 $\omega = e^{2\pi i / Q}$。&lt;/p>
&lt;p>套用QFT後，狀態的振幅會產生干涉。雖然省略了數學細節，但當對具有週期 $r$ 的狀態套用QFT時，只有在 $y$ 極為接近 $Q/r$ 的整數倍時，波才會產生&lt;strong>建設性干涉（Constructive Interference）&lt;/strong>。除此之外的其他狀態，會因為**破壞性干涉（Destructive Interference）**使機率振幅互相抵消並趨近於零。&lt;/p>
&lt;h2 id="步驟4測量與連分數展開">步驟4：測量與連分數展開
&lt;/h2>&lt;p>最後測量第一個暫存器。測量所得的值 $y$，有極高的機率會滿足以下條件：&lt;/p>
$$ y \approx c \frac{Q}{r} \implies \frac{y}{Q} \approx \frac{c}{r} $$
&lt;p>（$c$ 是一個滿足 $0 \le c &lt; r$ 的未知整數）&lt;/p>
&lt;p>對得到的有理數 $y/Q$ 套用古典演算法&lt;strong>連分數展開（Continued Fraction Expansion）&lt;/strong>，便可計算出近似分數 $c/r$，並從分母萃取出週期 $r$。&lt;/p>
&lt;hr>
&lt;h1 id="5-使用python與qiskit的模擬實作">5. 使用Python與Qiskit的模擬實作
&lt;/h1>&lt;p>只看理論很難有實際體會，所以讓我們實際使用Python與IBM的量子計算框架&lt;strong>Qiskit&lt;/strong>，來模擬看看秀爾演算法。&lt;/p>
&lt;p>在這裡，我們將實作最經典且著名的例子：&lt;strong>「使用 $a=7$ 將 $N=15$ 進行質因數分解」&lt;/strong>。&lt;/p>
&lt;h2 id="執行環境準備">執行環境準備
&lt;/h2>&lt;p>請事先安裝好Qiskit。&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="python實作程式碼全貌">Python實作程式碼全貌
&lt;/h2>&lt;p>以下程式碼是專門針對 $N=15, a=7$ 的秀爾演算法實作範例。由於建立通用的模指數運算電路對現在的模擬器來說計算成本太高，因此我們將針對 $a=7$ 情況下的閘道動作進行寫死（hardcoding）。&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. 建構反量子傅立葉轉換 (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;產生n個量子位元的反量子傅立葉轉換電路&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"># 用於反轉順序的SWAP閘&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"># 套用受控相位閘與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. 建構 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;針對特定的a與次方產生受控U閘(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"># a=7的情況下 7^x mod 15 的寫死邏輯&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. 主要的量子電路構成&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: 控制暫存器的位元數&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 目標暫存器為了表現 0〜15 因此使用 4位元&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"># 第一暫存器（控制暫存器）的初始化（產生疊加態）&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"># 將第二暫存器（目標暫存器）初始化為 |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"># 套用受控模指數運算（神諭）&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"># 套用 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"># 對第一暫存器套用反量子傅立葉轉換&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"># 測量第一暫存器&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"># --- 執行區塊 ---&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"># 控制暫存器使用8個量子位元 (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;探索設定: 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">, 控制量子位元數=&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"># 產生電路&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"># 在模擬器上執行&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"># 最新的Qiskit建議使用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&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">測量結果(位元字串: 觀測次數):&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">次&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"># 古典後處理: 透過連分數展開找出週期r&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">--- 週期的計算與質因數分解 ---&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"># 將位元字串轉換為十進位&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"># 相位 = 測量值 / 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"># 透過連分數展開取得近似分數。分母上限為 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;觀測值: &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"> | 相位: &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"> | 連分數: &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"> | 估計週期 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"># 確認週期 r 是否為偶數且能帶來有效結果&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; 成功！ &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"> 的質因數是 &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"> 與 &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; 只有平凡因數。請重試。&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; 週期為奇數因此失敗。&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="程式碼解說與執行結果解析">程式碼解說與執行結果解析
&lt;/h2>&lt;p>執行上述程式碼後，作為控制暫存器的測量結果，有極高機率會得到特定的峰值（觀測值）。在 &lt;code>n_count=8&lt;/code>（$Q=256$）的情況下，如果是理想的量子電腦（或模擬器），像 &lt;code>0&lt;/code>, &lt;code>64&lt;/code>, &lt;code>128&lt;/code>, &lt;code>192&lt;/code> 這類的數值會以壓倒性的機率作為觀測值出現。&lt;/p>
&lt;p>將這些數值除以 $Q=256$ 後，相位 $y/Q$ 分別為 $0.0$, $0.25$, $0.5$, $0.75$。
將這些相位進行連分數展開：&lt;/p>
&lt;ul>
&lt;li>$0.25 \to 1/4$ （估計週期 $r=4$）&lt;/li>
&lt;li>$0.50 \to 1/2$ （估計週期 $r=2$）&lt;/li>
&lt;li>$0.75 \to 3/4$ （估計週期 $r=4$）&lt;/li>
&lt;/ul>
&lt;p>利用這裡得到的週期 $r=4$ 來計算質因數。
因為 $a=7, 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>漂亮地成功將 $15$ 質因數分解為 $3 \times 5$。&lt;/p>
&lt;blockquote>
&lt;p>[!TIP]
如果得到的測量值為 $y=128$（相位 $0.5$），分母將會是 $2$，這樣會得到真正的週期 $r=4$ 的因數而非本身。在這種情況下，只要將演算法執行多次，或是檢查所得到 $r$ 的倍數，最終就能找出真正的週期。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="6-邁向實用化的挑戰與-nisq-時代的極限">6. 邁向實用化的挑戰與 NISQ 時代的極限
&lt;/h1>&lt;p>雖然在模擬器上將 $N=15$ 進行質因數分解非常簡單，但要在現實中的量子電腦上分解社會中實際使用的 RSA-2048（617位數的十進位數），目前還存在著許多難以跨越的障礙。&lt;/p>
&lt;p>我們現在所處的時代，被稱為 &lt;strong>NISQ（Noisy Intermediate-Scale Quantum：含雜訊中等規模量子）時代&lt;/strong>。量子位元對外部環境的雜訊極度敏感，計算途中容易發生「退相干（Decoherence）」導致狀態崩壞。&lt;/p>
&lt;p>為了能準確執行像秀爾演算法這種具有深度（閘數量多）的電路，能修正雜訊的**量子錯誤更正（Quantum Error Correction）**是不可或缺的。為了創造出一個沒有雜訊的「邏輯量子位元」，需要透過表面碼（Surface Code）等方式將數千個「實體量子位元」進行編碼。&lt;/p>
&lt;p>據估計，要破解2048位元的RSA加密，需要數千個完美的邏輯量子位元，這意味著必須要有搭載&lt;strong>數百萬至數千萬個實體量子位元&lt;/strong>的容錯（Fault-tolerant）量子電腦才能實現。而目前最先進的量子處理器也只有幾百到幾千個實體量子位元左右，因此全世界的密碼並不會立刻被破解。&lt;/p>
&lt;blockquote>
&lt;p>[!WARNING]
然而，存在著一種名為「Store Now, Decrypt Later（現在儲存，日後解密）」的威脅模型。攻擊者可能會將目前加密的機密通訊資料大量儲存起來，等到10至20年後強大的量子電腦問世時，再將其全部解密，這是一種非常可能的策略。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="7-轉移至後量子密碼學pqc">7. 轉移至後量子密碼學（PQC）
&lt;/h1>&lt;p>為了因應這種「Q-Day（量子電腦破解密碼之日）」的到來，以美國國家標準暨技術研究院（NIST）為首，全世界的密碼學家正在積極制定**後量子密碼學（Post-Quantum Cryptography, PQC）**標準。&lt;/p>
&lt;p>PQC 建立在被認為即使使用秀爾演算法（或葛羅佛演算法）也無法在數學上有效解開的全新數學問題（如晶格問題、多變數多項式問題、雜湊函數等）基礎上。目前像是「CRYSTALS-Kyber」與「CRYSTALS-Dilithium」等演算法已經被選為標準規格，並正逐漸導入 Apple 的 iMessage 或是各大網頁瀏覽器的通訊協定中。&lt;/p>
&lt;p>對管理IT基礎設施的工程師來說，在系統中導入從現有 RSA 或橢圓曲線密碼轉換到 PQC 的「密碼敏捷性（Crypto-Agility：能快速切換密碼系統的設計）」，將會是未來的一大任務。&lt;/p>
&lt;hr>
&lt;h1 id="8-結語">8. 結語
&lt;/h1>&lt;p>本文從秀爾演算法的理論數學背景開始，介紹了使用量子傅立葉轉換萃取週期的機制，並深入到使用Python與Qiskit的具體模擬程式碼，以約一萬字的篇幅進行了徹底的解說。&lt;/p>
&lt;p>量子力學這種微觀世界的物理法則，竟然能從根本推翻作為宏觀資訊科學基礎的計算複雜度理論與密碼理論，這是科學史上最令人興奮的典範轉移之一。未來我們也絕對不能將目光從持續發展的量子運算技術，以及與之抗衡的新型密碼技術的攻防戰中移開。&lt;/p>
&lt;p>請務必在您自己的環境中執行本次介紹的Python程式碼，親身體驗量子狀態的疊加與干涉所創造出來的「計算魔法」。&lt;/p>
&lt;hr>
&lt;p>&lt;strong>參考文獻&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>【圖解PQC】抗量子密碼學的主要演算法比較</title><link>http://kenji.blog/zh-tw/p/post-quantum-cryptography-algorithms-comparison/</link><pubDate>Fri, 11 Sep 2026 07:00:00 +0900</pubDate><guid>http://kenji.blog/zh-tw/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 【圖解PQC】抗量子密碼學的主要演算法比較" />&lt;h2 id="1-前言量子電腦帶來的密碼危機">1. 前言：量子電腦帶來的「密碼危機」
&lt;/h2>&lt;p>在現代的網際網路社會中，為了保護通訊的機密性與資料的完整性，公開金鑰密碼技術是不可或缺的基礎設施。目前廣泛使用的RSA密碼與橢圓曲線密碼（ECC），分別依賴於「大質數整數分解的困難度」與「橢圓曲線上的離散對數問題的困難度」等數學壁壘來確保安全性。在古典電腦（包含超級電腦在內，我們現在正在使用的電腦）上，要解開這些數學問題所需的時間被證明比宇宙的年齡還要長，這一直以來都是安全性的依據。&lt;/p>
&lt;p>然而，這個堅固的前提正因為&lt;strong>量子電腦&lt;/strong>的理論與實用化進展而面臨徹底被推翻的危機。1994年，密碼學家彼得·秀爾（Peter Shor）發表的「&lt;strong>Shor演算法（秀爾演算法）&lt;/strong>」在理論上證明，只要在具備足夠效能的容錯通用量子電腦（CRQC: Cryptographically Relevant Quantum Computer）上執行，就能在「多項式時間」內破解整數分解問題與離散對數問題。這意味著目前使用的公開金鑰密碼將全部失效。&lt;/p>
&lt;div class="mermaid">graph TD
A["大規模的量子電腦 (CRQC)"] -->|執行| B["Shor演算法"]
B -->|以多項式時間破解| C["整數分解問題 (RSA)"]
B -->|以多項式時間破解| D["離散對數問題 (ECC / ECDSA)"]
C --> E["密碼通訊的竊聽、資料竄改、身分冒用"]
D --> E
F["Store Now, Decrypt Later (SNDL)"] --> E&lt;/div>
&lt;p>認為「量子電腦真正完成還需要幾十年，所以現在沒問題」是非常危險的。因為被稱為&lt;strong>Store Now, Decrypt Later (SNDL：現在儲存，稍後解密)&lt;/strong> 的攻擊手法已經成為現實的威脅。這是指惡意的國家或駭客組織將目前加密的通訊資料（如TLS流量等）大量儲存起來，等到未來強大的量子電腦可用的瞬間，再將其全部解密的攻擊。國家機密、基礎設施資訊、需要長期保護的醫療資料等，已經暴露在這個威脅之下。&lt;/p>
&lt;p>此外，針對對稱金鑰密碼（如AES）與雜湊函數（如SHA-256），也存在1996年發現的&lt;strong>Grover演算法&lt;/strong>。這能將暴力破解攻擊（Brute-force）的運算量減少到平方根。也就是說，AES-128的安全級別實質上將減半至2的64次方，因此在量子時代，建議使用如AES-256或SHA-384等更長長度的金鑰與雜湊值。&lt;/p>
&lt;p>為對抗這場前所未有的密碼危機而誕生的，就是即使使用量子電腦也難以破解、基於全新數學問題的&lt;strong>抗量子密碼學（Post-Quantum Cryptography: PQC）&lt;/strong>。本文將根據美國國家標準暨技術研究院（NIST）主導的PQC標準化流程結果，針對主要的PQC演算法，從其數學背景、機制到架構比較進行極為詳細的解說。&lt;/p>
&lt;hr>
&lt;h2 id="2-nist的pqc標準化專案全貌與歷史">2. NIST的PQC標準化專案全貌與歷史
&lt;/h2>&lt;p>密碼技術的過渡（包含協定重新設計、系統更新、硬體更換等）需要花費數年到數十年的時間。因此，世界各地的密碼學家從很早以前就開始進行PQC的研究。其中扮演核心角色的是美國的NIST（國家標準暨技術研究院）。NIST在2016年公開徵求PQC標準化流程，接受來自全球密碼社群提出的全新密碼演算法。&lt;/p>
&lt;p>標準化的對象主要分為以下兩個類別：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>公開金鑰密碼 / 金鑰封裝機制 (KEM: Key Encapsulation Mechanism)&lt;/strong>：在TLS連線等情境中，為了加密通訊路徑，安全地共享（配送）共同金鑰的機制。&lt;/li>
&lt;li>&lt;strong>數位簽章 (Digital Signatures)&lt;/strong>：在軟體更新或電子憑證中，證明資料未被竄改以及發送者未被冒用（真實性）的機制。&lt;/li>
&lt;/ol>
&lt;p>經歷了約6年非常激烈的評估、分析與密碼破解競爭（Round 1～Round 3）後，更針對部分演算法進行了Round 4的追加評估。其結果是，在2024年，以下演算法正式成為聯邦資訊處理標準（FIPS），並確立為未來的世界標準。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>FIPS 203 (ML-KEM)&lt;/strong>：基於CRYSTALS-Kyber的KEM&lt;/li>
&lt;li>&lt;strong>FIPS 204 (ML-DSA)&lt;/strong>：基於CRYSTALS-Dilithium的數位簽章&lt;/li>
&lt;li>&lt;strong>FIPS 205 (SLH-DSA)&lt;/strong>：基於SPHINCS+的無狀態雜湊基數位簽章&lt;/li>
&lt;li>&lt;strong>（預計未來制定）FN-DSA&lt;/strong>：基於FALCON的數位簽章&lt;/li>
&lt;/ul>
&lt;p>這些被選定的演算法所依賴的數學「困難度問題」各不相同，這是為了確保即使某一個演算法在未來被發現有致命漏洞，整個系統也不會崩潰的「密碼敏捷性 (Crypto Agility)」。在標準化過程中，雖然晶格密碼 (Lattice-based cryptography) 因為效能優勢成為主角，但雜湊基密碼與編碼基密碼也被採用作為強大的後盾。&lt;/p>
&lt;hr>
&lt;h2 id="3-pqc主要數學方法的分類">3. PQC主要數學方法的分類
&lt;/h2>&lt;p>PQC演算法根據其安全性基礎的數學問題，主要可分為以下5大類。本文將特別針對前3類進行深入探討。&lt;/p>
&lt;ol>
&lt;li>&lt;strong>晶格密碼 (Lattice-based Cryptography)&lt;/strong>：
基於多維晶格空間中的最短向量問題（SVP）與最近向量問題（CVP），以及由此衍生出的LWE問題。這是NIST標準化的核心，Kyber、Dilithium、FALCON皆屬此類。其處理速度、公開金鑰大小與密文大小的平衡最為優異，適合通用。&lt;/li>
&lt;li>&lt;strong>雜湊基密碼 (Hash-based Cryptography)&lt;/strong>：
僅將安全性基礎建立在密碼學雜湊函數（如SHA-2或SHAKE等）的「抗碰撞性」與「單向性」上。雖然只能應用於數位簽章（如SPHINCS+等），但其安全性證明最為強固，對未知數學攻擊的抵抗力極高。&lt;/li>
&lt;li>&lt;strong>編碼基密碼 (Code-based Cryptography)&lt;/strong>：
基於錯誤更正碼理論，依賴於症狀解碼問題（Syndrome Decoding Problem）的困難度。1970年代提出的Classic McEliece是其代表，雖然擁有非常悠久的歷史與經過驗證的安全性，但公開金鑰的尺寸會極端龐大（達到MB等級）。&lt;/li>
&lt;li>&lt;strong>多變數多項式密碼 (Multivariate Polynomial Cryptography)&lt;/strong>：
基於在有限體上求解多變數聯立二次方程式（MQ問題）的困難度。主要被提案作為數位簽章（如Rainbow等），但在NIST最後一輪評估期間，被發現能用一台普通電腦在幾天內破解的強大攻擊手法，導致許多演算法退出了標準化。&lt;/li>
&lt;li>&lt;strong>同源密碼 (Isogeny-based Cryptography)&lt;/strong>：
基於橢圓曲線同源（Isogeny）圖上的路徑搜尋問題。金鑰尺寸非常小，曾被期待作為ECC的正統繼承者，但在2022年，最終候選者「SIKE」被利用古典數學（如Castryck-Decru攻擊）在一般PC上僅花幾小時就完全破解，以戲劇性的方式落幕，象徵了PQC設計的困難與可怕。&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="4-晶格密碼的深淵lwe問題與module-lwe的數學基礎">4. 晶格密碼的深淵：LWE問題與Module-LWE的數學基礎
&lt;/h2>&lt;p>目前最被看好且成為標準化核心的&lt;strong>晶格密碼&lt;/strong>，其安全性根基在於&lt;strong>LWE問題 (Learning with Errors: 帶誤差學習問題)&lt;/strong>。2005年由Oded Regev提出，他並憑藉這項劃時代的貢獻獲得了哥德爾獎（Gödel Prize）。若不了解LWE問題，就無法談論現代的PQC。&lt;/p>
&lt;h3 id="41-什麼是lwe問題-learning-with-errors">4.1. 什麼是LWE問題 (Learning with Errors)
&lt;/h3>&lt;p>首先，讓我們考慮一個簡單的聯立一次方程式。假設在某個模數 $q$ （modulo $q$）下，有一個已知的隨機矩陣 $A$ ，與一個未知的秘密向量 $\vec{s}$ ，並給定兩者的乘積 $\vec{b}$ 。&lt;/p>
$$ \vec{b} = A\vec{s} \pmod q $$
&lt;p>此時，從公開資訊 $A$ 與 $\vec{b}$ 中，要找出未知的 $\vec{s}$ 非常簡單。只要使用古典的演算法「高斯消去法」，就能在多項式時間內輕鬆計算出 $\vec{s}$ 。&lt;/p>
&lt;p>然而，如果在方程式中加入「微小的刻意誤差（雜訊）」，問題的難度就會劇烈攀升。這就是&lt;strong>LWE問題&lt;/strong>。&lt;/p>
&lt;p>準備一個未知的秘密向量 $\vec{s} \in \mathbb{Z}_q^n$ ，與一個隨機挑選的矩陣 $A \in \mathbb{Z}_q^{m \times n}$ 。接著，再準備一個依照常態分佈或二項分佈挑選、且「元素值足夠小」的誤差向量 $\vec{e} \in \mathbb{Z}_q^m$ ，然後以下列方式計算 $\vec{b}$ ：&lt;/p>
$$ \vec{b} = A\vec{s} + \vec{e} \pmod q $$
&lt;p>&lt;strong>Search LWE問題&lt;/strong>是指「從公開資訊 $(A, \vec{b})$ 中求出秘密資訊 $\vec{s}$ 」的問題。由於存在這個誤差 $\vec{e}$ ，當我們嘗試使用高斯消去法等代數解法時，在方程式加減的過程中，誤差 $\vec{e}$ 會像雪球一樣越滾越大，最終與隨機值無法區分而導致解法失敗。&lt;/p>
&lt;p>LWE問題的厲害之處在於，它具有強大的理論證明（歸約）：除非存在能夠解開晶格上「最壞情況複雜度問題 (Worst-case hardness)」如GapSVP（判定最短向量問題）或SIVP（最短獨立向量問題）的量子演算法，否則LWE問題在「平均情況 (Average-case)」下也無法被解開。也就是說，即使是隨機產生的加密金鑰，也能保證擁有由理論上限作為後盾的強固安全性。&lt;/p>
&lt;h3 id="42-透過ring-lwe與module-lwe帶來的劇烈效率提升">4.2. 透過Ring-LWE與Module-LWE帶來的劇烈效率提升
&lt;/h3>&lt;p>一般的LWE問題（Standard LWE）雖然安全性基礎非常明確，但矩陣 $A$ 的尺寸會變得非常大，導致金鑰尺寸達到MB等級，因此不具實用性。於是提出了利用多項式環（Polynomial Rings）來賦予代數結構的方法。&lt;/p>
&lt;p>在&lt;strong>Ring-LWE問題&lt;/strong>中，不再使用單純的向量或矩陣，而是使用某個多項式環 $R_q$ 的元素（多項式）。NIST標準中一般使用的是如下的分圓多項式環：&lt;/p>
$$ R_q = \mathbb{Z}_q[X]/(X^n + 1) $$
&lt;p>這裡，$n$ 是2的次方（例如：256），$q$ 是適當的質數。在這個環上，使用元素 $a, s, e \in R_q$ 來計算 $b = a \cdot s + e \pmod q$ 。因為一個多項式 $a$ 就有 $n$ 個係數，這能大幅壓縮資料，且透過稱為&lt;strong>NTT (Number Theoretic Transform: 數論轉換)&lt;/strong> 的有限體版本快速傅立葉轉換（FFT），能以 $O(n \log n)$ 的運算量超高速地進行多項式乘法。&lt;/p>
&lt;p>然而，Ring-LWE存在「可能因為環的特殊代數結構而存在未知漏洞」的隱憂。此外，當需要變更安全級別（例如相當於AES-128、192、256等）時，必須改變多項式的次數 $n$ 本身，這會伴隨著必須重寫NTT演算法等整個實作的工程問題。&lt;/p>
&lt;p>因此，被標準化演算法Kyber與Dilithium所採用的，就是&lt;strong>Module-LWE (M-LWE) 問題&lt;/strong>。Module-LWE是位於無結構的Standard LWE與過度結構化的Ring-LWE之間的一種折衷方案，它使用以多項式環 $R_q$ 的元素為成分的 $k \times k$ 矩陣（模組）。&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>Module-LWE最大的優點在於，可以保持多項式的次數 $n$ 固定（在NIST標準中 $n=256$），只需改變矩陣的維度 $k$ ，就能輕易地擴展安全級別。
例如在Kyber中，維度 $k$ 調整如下：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Kyber512 (Level 1)&lt;/strong>: $k = 2$ （相當於 AES-128）&lt;/li>
&lt;li>&lt;strong>Kyber768 (Level 3)&lt;/strong>: $k = 3$ （相當於 AES-192）&lt;/li>
&lt;li>&lt;strong>Kyber1024 (Level 5)&lt;/strong>: $k = 4$ （相當於 AES-256）&lt;/li>
&lt;/ul>
&lt;p>這使得底層的NTT程式碼或多項式運算的硬體電路可以在所有安全級別中達到100%的重複使用，讓實作的安全性與效率都獲得了劇烈提升。&lt;/p>
&lt;hr>
&lt;h2 id="5-crystals-kyber-ml-kem次世代的金鑰封裝機制">5. CRYSTALS-Kyber (ML-KEM)：次世代的金鑰封裝機制
&lt;/h2>&lt;p>正式被標準化為&lt;strong>FIPS 203 (ML-KEM)&lt;/strong> 的CRYSTALS-Kyber，是基於前述Module-LWE問題的金鑰封裝機制 (KEM)。未來，它將成為在TLS 1.3或SSH等協議中安全共享會話金鑰 (Session Key) 的實質世界標準。&lt;/p>
&lt;h3 id="51-kem-key-encapsulation-mechanism-的架構">5.1. KEM (Key Encapsulation Mechanism) 的架構
&lt;/h3>&lt;p>在PQC時代，標準將不再是像RSA那樣「由客戶端建立共同金鑰並用伺服器的公開金鑰加密傳送」的直接作法，而是採用KEM這種封裝框架。&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant Client as "客戶端 (Alice)"
participant Server as "伺服器 (Bob)"
Note over Client: "ML-KEM KeyGen()"
Client->>Client: "產生秘密金鑰 (sk) 與公開金鑰 (pk)"
Client->>Server: "傳送公開金鑰 (pk)"
Note over Server: "ML-KEM Encaps()"
Server->>Server: "產生隨機的共同金鑰 (K)"
Server->>Server: "用pk將K封裝，建立密文 (c)"
Server->>Client: "傳送密文 (c)"
Note over Client: "ML-KEM Decaps()"
Client->>Client: "使用秘密金鑰 (sk) 解密密文 (c)"
Client->>Client: "解除封裝，取出共同金鑰 (K)"
Note over Client, Server: "使用共享的共同金鑰 (K)，開始透過AES等進行加密通訊"&lt;/div>
&lt;h3 id="52-kyber的內部演算法機制與藤崎-岡本轉換">5.2. Kyber的內部演算法機制與藤崎-岡本轉換
&lt;/h3>&lt;p>Kyber的設計非常精練。首先，建構出只對CPA（選擇明文攻擊）安全的公開金鑰密碼系統（Kyber.CPAPKE），然後對其套用被稱為&lt;strong>藤崎-岡本轉換 (Fujisaki-Okamoto Transform)&lt;/strong> 的密碼學強大手法，將其升級為對CCA（適應性選擇密文攻擊）也安全的完整KEM設計。&lt;/p>
&lt;p>CPAPKE核心的加密與解密機制如下：&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>金鑰生成 (Key Generation)&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>從隨機的種子值，在NTT網域上產生矩陣 $A \in R_q^{k \times k}$ 。模數 $q$ 使用 $3329$ 。&lt;/li>
&lt;li>從中心二項分佈（CBD）中，取樣出具有微小係數的秘密向量 $\vec{s}$ 與誤差向量 $\vec{e}$ 。&lt;/li>
&lt;li>計算 $\vec{t} = A\vec{s} + \vec{e}$ 。公開金鑰為 $(A, \vec{t})$ ，秘密金鑰為 $\vec{s}$ 。（實際上 $A$ 是作為種子值公開，以節省頻寬）。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>加密 (Encryption)&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>將想要共享的32位元組訊息（共同金鑰材料） $m$ 編碼為多項式。&lt;/li>
&lt;li>產生新的隨機向量 $\vec{r}$ 與微小誤差 $\vec{e_1}, e_2$ 。&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>密文為 $(\vec{u}, v)$ 。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>解密 (Decryption)&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>接收者計算 $v - \vec{s}^T\vec{u}$ 。&lt;/li>
&lt;li>將這個算式展開如下：
$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>這裡將 $\vec{t} = A\vec{s} + \vec{e}$ 代入，主項 $\vec{s}^TA^T\vec{r}$ 就會互相抵銷。&lt;/li>
&lt;li>剩下的部分為 $\lfloor q/2 \rceil \cdot m + (\vec{e}^T\vec{r} + e_2 - \vec{s}^T\vec{e_1})$ 。&lt;/li>
&lt;li>括號內的項目是「微小誤差之間的乘積與和」，所以整體來說也只是一個夠小的值（雜訊）。因此，只要透過閾值判定各係數是接近 $0$ 還是接近 $q/2$ ，就能完美、毫無錯誤地還原出原始訊息 $m$ 的位元（0或1）。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;p>Kyber最大的優勢在於其壓倒性的&lt;strong>處理速度&lt;/strong>與&lt;strong>適中的金鑰尺寸&lt;/strong>。以Kyber768為例，公開金鑰尺寸為1,184位元組，密文尺寸為1,088位元組，雖然與RSA-3072（金鑰尺寸約384位元組）等相比來得大，但可以不用切割封包，直接容納在現代網際網路通訊的MTU（Maximum Transmission Unit）內，對網路的延遲幾乎沒有不良影響。&lt;/p>
&lt;hr>
&lt;h2 id="6-crystals-dilithium-ml-dsa基於晶格的通用數位簽章">6. CRYSTALS-Dilithium (ML-DSA)：基於晶格的通用數位簽章
&lt;/h2>&lt;p>在數位簽章的標準化過程中，即使在同樣的晶格密碼方法中，也有著不同設計理念的演算法互相競爭。其中被選為通用數位簽章&lt;strong>FIPS 204 (ML-DSA)&lt;/strong> 的，就是&lt;strong>CRYSTALS-Dilithium&lt;/strong>。&lt;/p>
&lt;h3 id="61-fiat-shamir-with-aborts-典範">6.1. Fiat-Shamir with Aborts 典範
&lt;/h3>&lt;p>Dilithium與Kyber同樣是基於Module-LWE（以及Module-SIS問題）的數位簽章機制。其設計基礎採用了名為「&lt;strong>Fiat-Shamir with Aborts (伴隨中斷的Fiat-Shamir轉換)&lt;/strong>」的極為重要之典範 (Paradigm)。&lt;/p>
&lt;p>Fiat-Shamir轉換本身是將互動式零知識證明協定轉換為非互動式數位簽章的標準手法。證明者（簽章者）產生承諾 (Commitment) $y$ ，計算 $w = Ay$ 並輸入雜湊函數，從而獲得隨機的挑戰 $c$ ，再計算回應 $z = y + cs$ 。&lt;/p>
&lt;p>然而，如果將其單純地應用在晶格密碼上，回應 $z$ 的分佈將會依賴於秘密金鑰 $s$ 的值而產生扭曲。這會導致觀察了大量簽章的攻擊者能一點一滴地取得秘密金鑰 $s$ 的資訊，這是一個致命的問題（側信道般的數學外洩）。&lt;/p>
&lt;p>Dilithium的設計團隊（Lyubashevsky等人）導入了一種名為「&lt;strong>拒絕取樣 (Rejection Sampling)&lt;/strong>」的手法：如果簽章的計算結果 $z$ 的係數沒有落在預先設定的安全閾值範圍內，就將整個簽章過程作廢（Abort），並使用新的亂數 $y$ 從頭開始計算。&lt;/p>
&lt;p>透過這種方式，最終輸出的簽章 $z$ 會呈現完全獨立於秘密金鑰的均勻分佈，在數學上完美地防止了資訊外洩。&lt;/p>
&lt;h3 id="62-dilithium的優點與實作的容易度">6.2. Dilithium的優點與實作的容易度
&lt;/h3>&lt;p>Dilithium在設計上的一大優勢是，在簽章生成過程中&lt;strong>完全不使用&lt;/strong>複雜的「高斯分佈取樣」或「浮點數運算」。因為只需透過均勻分佈取樣、單純的整數模數運算、NTT以及雜湊函數（SHAKE）就能實作，這讓它在從嵌入式微控制器到雲端伺服器等廣泛的環境中，都很容易進行安全且常數時間（Constant-time）的實作。這使得它對計時攻擊（Timing Attack）等物理側信道攻擊也擁有強大的抵抗力。&lt;/p>
&lt;hr>
&lt;h2 id="7-falcon-fn-dsa極致精巧的晶格簽章">7. FALCON (FN-DSA)：極致精巧的晶格簽章
&lt;/h2>&lt;p>NIST選擇了與Dilithium具備不同特性的另一個晶格基簽章——&lt;strong>FALCON (Fast-Fourier Lattice-based Compact Signatures over NTRU)&lt;/strong>，作為標準化候選者（目前正作為FN-DSA制定草案中）。&lt;/p>
&lt;h3 id="71-ntru晶格與高斯取樣">7.1. NTRU晶格與高斯取樣
&lt;/h3>&lt;p>FALCON最大的特徵在於，它使用的不是LWE問題，而是從1996年就存在、歷史悠久的&lt;strong>NTRU (N-th degree Truncated polynomial Ring Units) 晶格&lt;/strong>。此外，它採用了基於GPV (Gentry-Peikert-Vaikuntanathan) 框架的「&lt;strong>雜湊與簽章 (Hash-and-Sign)&lt;/strong>」典範。&lt;/p>
&lt;p>在Hash-and-Sign中，會將訊息的雜湊值作為空間內的目標點，並尋找晶格上最接近該點的點（最近向量問題的近似解）來作為簽章。為此，必須使用作為秘密金鑰的「高品質的短基底」，並依據離散高斯分佈進行點的取樣。&lt;/p>
&lt;p>FALCON利用被稱為「&lt;strong>快速傅立葉正交化 (Fast Fourier Orthogonalization: FFO)&lt;/strong>」的手法，將這種繁重的計算進行了劇烈的加速。&lt;/p>
&lt;h3 id="72-falcon的優缺點">7.2. FALCON的優缺點
&lt;/h3>&lt;p>FALCON壓倒性的優勢在於其&lt;strong>簽章尺寸與公開金鑰尺寸極為精巧（Compact）&lt;/strong>。相較於Dilithium3的簽章尺寸約為3,309位元組，FALCON-512的簽章尺寸僅有約666位元組。公開金鑰也非常小，只有897位元組，在通訊頻寬極度受限的環境、IoT裝置，或是特定的網路協定中，它將成為救星。&lt;/p>
&lt;p>然而，它存在一個重大的缺點。由於生成簽章時必須進行伴隨著複雜**浮點數運算（64-bit IEEE 754）**的離散高斯取樣，使得要防止計時外洩的常數時間實作（Constant-time implementation）變得極為困難，程式碼也會變得龐大。因此，FALCON相對於通用型（Dilithium），定位為專為特定用途設計的強大特化型演算法。&lt;/p>
&lt;div class="mermaid">graph LR
A["數位簽章的需求"] --> B{"最優先的限制條件是？"}
B -->|"實作的簡單性、通用性、常數時間實作的容易度"| C["Dilithium (ML-DSA)"]
B -->|"通訊頻寬的最小化、資料尺寸的精巧度"| D["FALCON (FN-DSA)"]
C --> E["通用的TLS憑證、軟體的電子簽章"]
D --> F["封包尺寸限制嚴格的協定、特殊環境"]&lt;/div>
&lt;hr>
&lt;h2 id="8-sphincs-slh-dsa擁有最強安全性的雜湊基簽章">8. SPHINCS+ (SLH-DSA)：擁有最強安全性的雜湊基簽章
&lt;/h2>&lt;p>為了防範未來晶格密碼的安全性被天才數學家的突破所瓦解的最壞情況（萬一發生），NIST制定了與晶格密碼方法完全不同的標準 &lt;strong>FIPS 205 (SLH-DSA)&lt;/strong>，也就是 &lt;strong>SPHINCS+&lt;/strong>。&lt;/p>
&lt;p>SPHINCS+被分類為&lt;strong>雜湊基簽章&lt;/strong>。其安全性基礎僅依賴於「所使用的密碼學雜湊函數（如SHA-2或SHAKE256等）具備抗碰撞性與單向性」這一點上。因為它不依賴如LWE或整數分解等具有特定代數結構的數學問題，所以未來無論出現多麼強大的量子演算法，只需單純增加雜湊函數的輸出長度就能對抗，擁有極度強固的安全性（最保守的安全等級）。&lt;/p>
&lt;h3 id="81-wots-與-fors-的無狀態架構">8.1. WOTS+ 與 FORS 的無狀態架構
&lt;/h3>&lt;p>雜湊基簽章的歷史悠久，可追溯至1970年代的Lamport簽章與Winternitz單次簽章（WOTS）。這些都是「只能安全簽章1次」的拋棄式金鑰。為了使其能使用多次，開發了結合默克爾樹（Merkle Tree），將無數的單次金鑰透過一個根雜湊來管理的XMSS（eXtended Merkle Signature Scheme）與LMS等演算法。&lt;/p>
&lt;p>然而，XMSS與LMS有一個致命的缺點，那就是它們是「&lt;strong>有狀態的 (Stateful)&lt;/strong>」。每次簽章時，都必須將「使用了第幾個單次金鑰」的索引狀態嚴格記錄在非揮發性記憶體中。如果因為虛擬機器的快照還原等原因導致狀態回溯，而不小心使用了同一個單次金鑰兩次，秘密金鑰就會立刻外洩，導致系統崩潰。&lt;/p>
&lt;p>SPHINCS+解決了這種狀態管理的麻煩，是一種「&lt;strong>無狀態 (Stateless)&lt;/strong>」的雜湊基簽章。
其核心技術是以下技術的組合：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>WOTS+ (Winternitz One-Time Signature Plus)&lt;/strong>：基本的單次簽章。&lt;/li>
&lt;li>&lt;strong>FORS (Forest of Random Subsets)&lt;/strong>：少次簽章（Few-Time Signature）技術。同一個金鑰重複使用幾次仍能保持安全。&lt;/li>
&lt;li>&lt;strong>Hyper-Tree (巨大樹狀結構)&lt;/strong>：將默克爾樹多層疊加的巨大結構。&lt;/li>
&lt;/ol>
&lt;p>在進行簽章時，SPHINCS+不進行狀態管理，而是從Hyper-Tree底層數量龐大的FORS金鑰中，利用偽亂數隨機挑選一個來進行簽章。由於樹葉的數量達到天文數字，不小心挑選到同一個金鑰的機率（碰撞）小到可以忽略，結果成功實現了無狀態設計。&lt;/p>
&lt;p>SPHINCS+唯一也是最大的弱點在於，&lt;strong>簽章尺寸非常巨大&lt;/strong>。依據參數不同，簽章尺寸會達到17KB～49KB，且簽章生成速度與晶格密碼相比也壓倒性地慢。因此，相較於日常的網頁瀏覽，它更適合用於軟體更新簽章或根憑證授權單位（CA）憑證等，不需頻繁簽章且強烈要求長期絕對安全性的用途。&lt;/p>
&lt;hr>
&lt;h2 id="9-編碼基密碼classic-mceliece這位美好的老巨人">9. 編碼基密碼：Classic McEliece這位美好的老巨人
&lt;/h2>&lt;p>在NIST的標準化流程中，目前作為Round 4最終候選者持續接受評估的重要方法，是&lt;strong>編碼基密碼&lt;/strong>的&lt;strong>Classic McEliece&lt;/strong>。&lt;/p>
&lt;p>這個由Robert McEliece於1978年提出的演算法，在公開金鑰密碼的歷史中與RSA並列為最古老的演算法之一。它利用了被稱為「Goppa碼（戈帕碼）」的代數幾何碼，刻意在訊息中加入錯誤（雜訊向量）進行加密，只有擁有Goppa碼同位檢查矩陣作為秘密金鑰的人，才能利用強大的錯誤更正能力去除錯誤，解密出原始訊息，這是基於「&lt;strong>症狀解碼問題 (Syndrome Decoding Problem)&lt;/strong>」。&lt;/p>
$$ \vec{c} = \vec{m} G + \vec{e} $$
&lt;p>
（$G$ 為公開金鑰，即打亂後的生成矩陣，$\vec{e}$ 為權重為 $t$ 的錯誤向量）&lt;/p>
&lt;p>Classic McEliece令人驚訝之處在於，&lt;strong>從提出至今已經超過40年，歷經全球密碼學家猛烈的破解研究，卻從未被發現有本質上的漏洞&lt;/strong>，擁有壓倒性的實績。它是PQC中擁有「最經過時間考驗的強固安全性」的演算法。&lt;/p>
&lt;p>此外，它還具備密文尺寸非常小（僅約100～200位元組）的優點。然而，它存在一個致命的缺點，就是&lt;strong>公開金鑰的尺寸會達到MB (Megabyte) 等級&lt;/strong>。即便是最低的安全級別（相當於AES-128），公開金鑰也大約有250KB，而在更高的安全級別中會超過1MB。&lt;/p>
&lt;p>因此，它完全無法適用於像TLS交握這種每次通訊都需要在網路上傳送公開金鑰的用途。不過，在VPN的預先共享金鑰交換、將公開金鑰硬編碼到韌體中，或是衛星通訊等可以預先將公開金鑰部署在系統中的特殊使用案例裡，由於其強固的安全性，它仍持續被視為極具潛力的選擇。&lt;/p>
&lt;hr>
&lt;h2 id="10-各pqc演算法的效能比較與取捨">10. 各PQC演算法的效能比較與取捨
&lt;/h2>&lt;p>針對目前為止解說過的主要演算法，在一般安全級別（相當於NIST Level 2〜3，AES-128〜192級別）下的效能特性整理如下表。&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">演算法 (標準名稱)&lt;/th>
&lt;th style="text-align:left">類別&lt;/th>
&lt;th style="text-align:left">數學基礎&lt;/th>
&lt;th style="text-align:left">公開金鑰尺寸&lt;/th>
&lt;th style="text-align:left">秘密金鑰尺寸&lt;/th>
&lt;th style="text-align:left">密文/簽章尺寸&lt;/th>
&lt;th style="text-align:left">處理速度傾向&lt;/th>
&lt;th style="text-align:left">主要特徵與用途&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">非常快&lt;/td>
&lt;td style="text-align:left">金鑰尺寸與速度平衡最佳。TLS 1.3等的通用KEM標準。&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">簽章&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">生成與驗證皆快&lt;/td>
&lt;td style="text-align:left">實作簡單。通用的數位簽章標準。&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">簽章&lt;/td>
&lt;td style="text-align:left">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">簽章生成偏慢，驗證超快&lt;/td>
&lt;td style="text-align:left">簽章尺寸極小。但需要浮點數運算。適合嵌入式、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">簽章&lt;/td>
&lt;td style="text-align:left">雜湊函數&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">約 17,000 Bytes&lt;/td>
&lt;td style="text-align:left">生成非常慢&lt;/td>
&lt;td style="text-align:left">數學破綻風險幾乎為零。根憑證等高安全需求用途。&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">Goppa碼&lt;/td>
&lt;td style="text-align:left">&lt;strong>約 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">封裝快&lt;/td>
&lt;td style="text-align:left">40年安全性實績。公開金鑰巨大。適合可硬編碼的環境。&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="理解取捨-trade-offs">理解取捨 (Trade-offs)
&lt;/h3>&lt;p>在PQC的世界裡，不存在「尺寸小、速度快且數學保證完美」這種魔法般的單一演算法。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>網際網路標準 (Kyber / Dilithium)&lt;/strong>：效能平衡最好，最適合目前RSA/ECC的直接替換（Drop-in replacement）。&lt;/li>
&lt;li>&lt;strong>極致的保守性 (SPHINCS+)&lt;/strong>：在犧牲資料尺寸與處理速度的情況下，為了防範未來的數學突破而選擇的絕對保險。&lt;/li>
&lt;li>&lt;strong>針對特殊環境 (FALCON / Classic McEliece)&lt;/strong>：為了適應通訊頻寬極度狹窄，或是可以預先派發金鑰等環境限制所選擇的特化型武器。&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="11-邁向實用化的課題與混合密碼的現實解方">11. 邁向實用化的課題與「混合密碼」的現實解方
&lt;/h2>&lt;p>隨著NIST完成標準化並正式發布FIPS標準，全球IT基礎設施的PQC過渡（&lt;strong>PQC轉移 (PQC Migration)&lt;/strong>）已正式展開。Google的Chrome瀏覽器、Apple的iMessage（PQ3協定）以及Cloudflare等網路供應商，已經將PQC的支援實作到協定中並開始實際上線運作。&lt;/p>
&lt;p>然而，突然完全切換到新的密碼演算法伴隨著極高的風險。假設幾年後有天才數學家對Kyber等晶格密碼發現了致命的攻擊手法（如在古典電腦上也能解開的數學缺陷），那麼依賴該演算法的整個系統就會在一瞬間形同裸奔。&lt;/p>
&lt;p>為減輕這種不確定性風險，既現實又被推薦的方法就是「&lt;strong>混合密碼 (Hybrid Cryptography)&lt;/strong>」。&lt;/p>
&lt;p>在混合密碼中，會同時使用擁有長年實績的現行古典密碼（例如：X25519等橢圓曲線密碼）與新的PQC（例如：Kyber768）來進行金鑰交換。各演算法分別生成共同金鑰成分，最後再使用安全的金鑰衍生函數（KDF）將兩個成分混合，生成最終的主秘密金鑰 (Master Secret)。&lt;/p>
&lt;div class="mermaid">graph TD
A["客戶端"] -->|① 傳送 X25519 的公開金鑰 + Kyber 的公開金鑰| B["伺服器"]
B -->|② 回傳 X25519 的共享金鑰 + Kyber 的封裝密文| A
A --> C{"衍生主秘密金鑰 (KDF)"}
B --> C
C -->|輸入: (X25519 的共同金鑰) || (Kyber 的共同金鑰)| D["安全的通訊金鑰 (AES-256 / ChaCha20)"]
D -->|"同時抵抗 量子威脅 ＆ 古典漏洞"| E["安全的混合密碼通訊 (TLS 1.3)"]&lt;/div>
&lt;p>透過這種方式，就能實現「萬一量子電腦實現且ECC被破解，還有Kyber能保護通訊」，反之「萬一Kyber被發現有未知數學缺陷，還有ECC能保護通訊」這種堅固的雙重防護安全性。代表性的例子就是IETF正在進行標準化的 &lt;strong>X25519MLKEM768 (舊稱 X25519Kyber768)&lt;/strong> 草案，目前網頁瀏覽器與最先進的伺服器之間的通訊，正是採用這種混合方式。&lt;/p>
&lt;p>此外，在系統設計時，建立「不過度依賴特定密碼演算法，當演算法崩潰時能迅速切換到另一個演算法（如從Kyber切換到McEliece，從Dilithium切換到SPHINCS+）的架構」，這種被稱為 &lt;strong>密碼敏捷性 (Crypto Agility)&lt;/strong> 的概念，將成為未來系統開發中不可或缺的需求。&lt;/p>
&lt;hr>
&lt;h2 id="12-總結密碼技術的新視野">12. 總結：密碼技術的新視野
&lt;/h2>&lt;p>量子電腦這項人類夢想中的科技，諷刺地成為了打破我們長年信賴的「整數分解」與「離散對數問題」等數學防壁的最大威脅。然而，世界各地的密碼學家並沒有因此屈服，反而開拓了晶格理論、雜湊函數樹、錯誤更正碼等更複雜深奧的多維數學領域，築起了名為抗量子密碼學（PQC）的新防線。&lt;/p>
&lt;p>NIST完成 FIPS 203 (ML-KEM)、FIPS 204 (ML-DSA)、FIPS 205 (SLH-DSA) 的標準化並非終點，這只是接下來將持續數十年的PQC轉移這趟壯闊旅程的第一步。對軟體工程師與系統架構師而言，如何將這些新演算法帶來的「金鑰尺寸增加」與「運算成本改變」最佳地適應到網路協定與系統中，將是未來的重大技術課題。&lt;/p>
&lt;p>量子電腦與密碼的戰爭，是人類數學探索與科技進化最激烈交會的刺激領域。希望透過本文，能讓您深入了解PQC背後優美的數學理論，以及形塑網路安全未來的各演算法令人驚嘆的機制。&lt;/p>
&lt;hr>
&lt;p>&lt;em>參考文獻 (References):&lt;/em>&lt;/p>
&lt;ul>
&lt;li>&lt;em>NIST Post-Quantum Cryptography Standardization Program&lt;/em>&lt;/li>
&lt;li>&lt;em>FIPS 203: Module-Lattice-Based Key-Encapsulation Mechanism Standard&lt;/em>&lt;/li>
&lt;li>&lt;em>FIPS 204: Module-Lattice-Based Digital Signature Standard&lt;/em>&lt;/li>
&lt;li>&lt;em>FIPS 205: Stateless Hash-Based Digital Signature Standard&lt;/em>&lt;/li>
&lt;/ul></description></item><item><title>量子電腦實用化之日：2026年的現狀</title><link>http://kenji.blog/zh-tw/p/quantum-computing-2026-current-status/</link><pubDate>Fri, 11 Sep 2026 06:00:00 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/quantum-computing-2026-current-status/</guid><description>&lt;img src="http://kenji.blog/p/quantum-computing-2026-current-status/img/eyecatch.jpg" alt="Featured image of post 量子電腦實用化之日：2026年的現狀" />&lt;h2 id="1-前言2026年量子電腦發展到了什麼程度">1. 前言：2026年，量子電腦發展到了什麼程度
&lt;/h2>&lt;p>2026年現在，量子運算已經從過去的「理論上的夢想」經歷了決定性的轉變，成為了「工程上的現實」。隨著幾年前仍是主流的**NISQ（Noisy Intermediate-Scale Quantum，雜訊中型量子）**裝置的極限變得明確，世界各地的研究機構與科技巨頭已將發展方向轉向實現「容錯量子運算（FTQC: Fault-Tolerant Quantum Computing）」。&lt;/p>
&lt;p>在本文中，我們將結合2026年的最新突破，深入探討量子電腦的現狀。特別是將詳細解說量子錯誤更正（表面碼）、物理量子位元與邏輯量子位元的差異、拓撲量子運算的進展，以及超導與離子阱方式的最前線。&lt;/p>
&lt;hr>
&lt;h2 id="2-量子態的基礎與保真度fidelity">2. 量子態的基礎與保真度（Fidelity）
&lt;/h2>&lt;p>作為量子電腦基本單位的量子位元（Qubit），不同於古典位元（0或1），可以呈現0與1的疊加態（Superposition）。單一量子位元的狀態在希爾伯特空間中以向量表示如下：&lt;/p>
$$
|\psi\rangle = \alpha|0\rangle + \beta|1\rangle
$$
&lt;p>這裡，$\alpha$ 與 $\beta$ 為複數的機率幅，並滿足以下的歸一化條件：&lt;/p>
$$
|\alpha|^2 + |\beta|^2 = 1
$$
&lt;p>在衡量量子運算效能時，一個極為重要的指標是&lt;strong>保真度（Fidelity）&lt;/strong>。理想的量子態 $|\psi\rangle$ 與受到雜訊退化而成為混合態的實際密度矩陣 $\rho$ 之間的保真度 $F$ 定義如下：&lt;/p>
$$
F(\rho, |\psi\rangle) = \langle \psi | \rho | \psi \rangle
$$
&lt;p>在2026年的現在，2量子位元閘（例如：CNOT閘或CZ閘）的保真度，在超導方式中已能穩定突破**99.99%**的障壁（即所謂的「四個九」）。這大幅超越了表面碼進行錯誤更正的閾值（約99%），是邁向實用化的最大突破之一。&lt;/p>
&lt;hr>
&lt;h2 id="3-nisq時代的極限與向ftqc的典範轉移">3. NISQ時代的極限與向FTQC的典範轉移
&lt;/h2>&lt;p>從2010年代後半到2020年代前半，是屬於不具備錯誤更正、擁有數十至數百個量子位元裝置的NISQ（Noisy Intermediate-Scale Quantum）時代。然而，NISQ有著明確的極限。&lt;/p>
&lt;p>隨著電路深度（Depth）增加，錯誤會呈指數級累積，使得獲得有意義的運算結果變得不可能。在電路深度 $D$ 下的整體成功機率 $P_{success}$，相對於單一閘的保真度 $f$ 與閘的數量 $N$，會以下列方式衰減：&lt;/p>
$$
P_{success} \approx f^N
$$
&lt;p>如果 $f = 0.99$ 且套用了1000個閘，則 $0.99^{1000} \approx 4.3 \times 10^{-5}$，結果將幾乎被隨機雜訊所掩蓋。因此，在2026年，比起直接擴展NISQ演算法（如VQE或QAOA），資源更集中於**邏輯量子位元（Logical Qubit）**的生成。&lt;/p>
&lt;hr>
&lt;h2 id="4-量子錯誤更正與邏輯量子位元表面碼的最前線">4. 量子錯誤更正與邏輯量子位元：表面碼的最前線
&lt;/h2>&lt;p>量子錯誤更正（QEC: Quantum Error Correction）是一種將多個「物理量子位元」編碼以創造出1個「邏輯量子位元」，並檢測與更正錯誤的技術。目前最被看好的是&lt;strong>表面碼（Surface Code）&lt;/strong>。&lt;/p>
&lt;h3 id="41-表面碼surface-code的結構">4.1 表面碼（Surface Code）的結構
&lt;/h3>&lt;p>在表面碼中，量子位元被配置為二維的網格狀。資料量子位元（保存實際資訊）與測量量子位元（用於症狀測量）如棋盤格般排列。&lt;/p>
&lt;div class="mermaid">graph TD
A["資料量子位元 (D1)"] --- B["測量量子位元 (M1)"]
B --- C["資料量子位元 (D2)"]
C --- D["測量量子位元 (M2)"]
D --- E["資料量子位元 (D3)"]
B --- F["資料量子位元 (D4)"]
D --- G["資料量子位元 (D5)"]
style A fill:#e1f5fe,stroke:#039be5
style C fill:#e1f5fe,stroke:#039be5
style E fill:#e1f5fe,stroke:#039be5
style F fill:#e1f5fe,stroke:#039be5
style G fill:#e1f5fe,stroke:#039be5
style B fill:#fff3e0,stroke:#fb8c00
style D fill:#fff3e0,stroke:#fb8c00&lt;/div>
&lt;p>利用穩定子算符 $S_x$ 與 $S_z$，持續監控位元反轉（X錯誤）與相位反轉（Z錯誤）。&lt;/p>
$$
S_x = \prod_{i \in \text{star}} X_i, \quad S_z = \prod_{j \in \text{plaquette}} Z_j
$$
&lt;p>2026年的重大進展，是完全突破了「損益平衡點（Break-even point）」。也就是說，因執行錯誤更正而消除的雜訊，已大於額外電路所引入的雜訊，使得邏輯量子位元的壽命比物理量子位元的壽命高出了好幾個數量級。&lt;/p>
&lt;h3 id="42-量子錯誤更正的循環">4.2 量子錯誤更正的循環
&lt;/h3>&lt;p>錯誤更正作為一個持續的回饋迴圈運作。&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant D as "資料量子位元"
participant M as "輔助/測量量子位元"
participant C as "古典控制器"
loop "症狀提取循環 (約 1 微秒)"
D->>M: "糾纏 (CNOT/CZ)"
M->>C: "測量狀態 (症狀)"
C->>C: "解碼症狀 (例如：最小權重完美匹配)"
C-->>D: "應用包立更正 (如有必要)"
end&lt;/div>
&lt;p>現在，使用FPGA或專用ASIC以奈秒為單位執行這種古典解碼處理（症狀分析）的技術已經確立，即時錯誤更正已進入實用階段。&lt;/p>
&lt;hr>
&lt;h2 id="5-硬體架構的進化2026年版">5. 硬體架構的進化（2026年版）
&lt;/h2>&lt;p>2026年的量子硬體主要在「超導方式」、「離子阱方式」及「拓撲方式」三個軸向上持續進化。&lt;/p>
&lt;h3 id="51-超導量子位元的整合">5.1 超導量子位元的整合
&lt;/h3>&lt;p>超導方式是由IBM與Google領軍的領域，主要使用以約瑟夫森接面（Josephson Junction）構成的傳輸子（Transmon）量子位元。2026年，在單一晶片上整合數千至一萬個物理量子位元的巨型晶片已經實現。&lt;/p>
&lt;p>值得特別提及的是**模組間量子通訊（Quantum Interconnects）**的確立。使用微波光子進行晶片間的量子遙傳已達商業級實作，使得繞過單一稀釋冷凍機的尺寸限制成為可能。&lt;/p>
&lt;h3 id="52-離子阱的二維擴展與光互連">5.2 離子阱的二維擴展與光互連
&lt;/h3>&lt;p>離子阱方式（由Quantinuum與IonQ等主導）使用懸浮在真空中的離子的內部能量狀態作為量子位元。與超導方式相比，其具有T1/T2同調時間極長，且可實現全連接（All-to-All Connectivity）的優點。&lt;/p>
&lt;p>2026年的突破在於QCCD（Quantum Charge Coupled Device）架構的二維化，以及利用光子互連（Photonic Interconnects）在多個阱之間快速生成糾纏。這大幅改善了過去離子阱在「閘速度緩慢」與「擴展性」上的弱點。&lt;/p>
&lt;h3 id="53-拓撲量子運算任意子的控制">5.3 拓撲量子運算：任意子的控制
&lt;/h3>&lt;p>長期以來被認為僅存在於理論上的&lt;strong>拓撲量子運算&lt;/strong>，終於在2026年進入了實驗證實的階段。由Microsoft等推動的此種方式，使用了被稱為「馬約拉納零模（Majorana Zero Modes）」的非阿貝爾任意子（Non-Abelian Anyons）。&lt;/p>
&lt;p>透過交換任意子粒子位置的「編織（Braiding）」操作來執行量子閘。&lt;/p>
$$
|\psi_{final}\rangle = B_{ij} |\psi_{initial}\rangle
$$
&lt;p>這裡 $B_{ij}$ 為編織算符。拓撲方式由於資訊的保存不依賴於粒子的局部狀態，而是依賴整體「紐結」的拓撲結構，因此在本質上對環境雜訊具有抵抗力（硬體級別的容錯性）。2026年，世界上首次確認了高保真度拓撲邏輯量子位元的生成，作為通往FTQC的強大捷徑而備受矚目。&lt;/p>
&lt;hr>
&lt;h2 id="6-邁向實用化的路線圖與展望">6. 邁向實用化的路線圖與展望
&lt;/h2>&lt;p>為了讓量子電腦在「化學計算」、「材料科學」、「金融建模」等領域中，真正展現出壓倒古典電腦（超級電腦）的&lt;strong>量子霸權（Quantum Advantage）&lt;/strong>，需要數千個邏輯量子位元。&lt;/p>
&lt;div class="mermaid">gantt
title "量子運算路線圖 (2026年修訂版)"
dateFormat YYYY
axisFormat %Y
section "NISQ 時代"
"含雜訊的量子位元 (&lt;1000)" :done, 2018, 2024
section "早期 FTQC"
"突破損益平衡點的展示" :done, 2024, 2026
"數百個邏輯量子位元" :active, 2026, 2028
section "全面 FTQC"
"1000+ 個邏輯量子位元 (商業應用)" : 2028, 2030
"通用容錯量子電腦" : 2030, 2035&lt;/div>
&lt;h3 id="61-目前面臨的挑戰與未來">6.1 目前面臨的挑戰與未來
&lt;/h3>&lt;p>2026年最大的挑戰，在於維持極低溫的巨大低溫恆溫器（稀釋冷凍機）的冷卻能力，以及連接室溫控制裝置與極低溫量子晶片的線路（I/O瓶頸）。為了解決這個問題，能在極低溫環境下運作的CMOS（Cryo-CMOS）控制器晶片的開發正以極快的速度推進。&lt;/p>
&lt;h3 id="結論">結論
&lt;/h3>&lt;p>2026年將被記錄為量子電腦歷史上的「邏輯量子位元擴展元年」。藉由錯誤更正演算法的證實、硬體的模組化，以及拓撲方法的快速進展，「實用化的日子」已不再是遙遠未來的空談，而是可以在未來數年內預見的具體里程碑。對於量子演算法的開發者與企業而言，現在正是正式投資於量子原生解決方案的最佳時機。&lt;/p>
&lt;hr>
&lt;p>&lt;em>本文是基於2026年最新的量子運算研究論文與業界動態所撰寫。&lt;/em>&lt;/p></description></item></channel></rss>