<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Security on kenji.blog</title><link>http://kenji.blog/zh-tw/tags/security/</link><description>Recent content in Security on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>zh-tw</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 17:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/zh-tw/tags/security/index.xml" rel="self" type="application/rss+xml"/><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>密碼學的歷史：從凱撒密碼到後量子密碼（PQC）</title><link>http://kenji.blog/zh-tw/p/history-of-cryptography-caesar-to-pqc/</link><pubDate>Fri, 11 Sep 2026 15:00:00 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/history-of-cryptography-caesar-to-pqc/</guid><description>&lt;img src="http://kenji.blog/p/history-of-cryptography-caesar-to-pqc/img/eyecatch.jpg" alt="Featured image of post 密碼學的歷史：從凱撒密碼到後量子密碼（PQC）" />&lt;h1 id="1-簡介什麼是密碼學">1. 簡介：什麼是密碼學？
&lt;/h1>&lt;p>密碼學（Cryptography）是為了保持資訊機密性的一門技術，它伴隨著人類歷史不斷演進。從古代戰爭中傳遞秘密指令，到現代網際網路保護信用卡資訊，密碼學的目的始終如一：即「確保只有預期的接收者能理解資訊，而第三方無法解密」。&lt;/p>
&lt;p>在現代資訊安全中，密碼學不僅僅是「隱藏資訊（機密性: Confidentiality）」，它還擔負著確保資料「完整性（Integrity）」、「身分鑑別（Authentication）」與「不可否認性（Non-repudiation）」等重要角色。&lt;/p>
&lt;p>本文將從古代簡單的替換式密碼開始，歷經機械式密碼、現代的對稱金鑰與公開金鑰加密，一直到量子電腦實用化所帶來的「後量子密碼學（PQC）」時代，從技術與數學的角度詳細剖析密碼技術演進的歷史。&lt;/p>
&lt;hr>
&lt;h1 id="2-古典密碼時代文字的替換與重排">2. 古典密碼時代：文字的替換與重排
&lt;/h1>&lt;p>密碼學的起源可追溯至西元前。早期的密碼主要由「換位（重排）」與「替換（代換）」兩種方法構成。&lt;/p>
&lt;h2 id="密碼棒密碼換位式密碼">密碼棒密碼（換位式密碼）
&lt;/h2>&lt;p>西元前 5 世紀古希臘斯巴達所使用的「密碼棒（Scytale）」是最古老的密碼工具之一。將細長的羊皮紙纏繞在特定粗細的木棒上，並在上面橫向寫下訊息。解開羊皮紙後，文字會排列成毫無意義的順序，但擁有相同粗細木棒的接收者只需再次纏繞羊皮紙，便能讀出原始訊息。&lt;/p>
&lt;h2 id="凱撒密碼單表替換式密碼">凱撒密碼（單表替換式密碼）
&lt;/h2>&lt;p>西元前 1 世紀，相傳古羅馬英雄朱利葉斯・凱撒所使用的便是「凱撒密碼」。這是一種將字母平移固定數量（通常為 3 個字母）的單表替換式密碼（Monoalphabetic substitution）。&lt;/p>
&lt;p>在數學上，若將字母視為 $0$ 到 $25$ 的數字，並將平移數量設為 $K$，則從明文 $P$ 轉換為密文 $C$ 的過程可由以下同餘式表示：&lt;/p>
$$C \equiv P + K \pmod{26}$$
&lt;p>解密則是進行反向操作：&lt;/p>
$$P \equiv C - K \pmod{26}$$
&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"># 凱撒密碼的簡單 Python 實作範例&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">caesar_cipher&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">shift&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">mode&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;encrypt&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">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&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">mode&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;decrypt&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">shift&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">shift&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="k">for&lt;/span> &lt;span class="n">char&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">text&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">char&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">isalpha&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">base&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">ord&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;A&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="n">char&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">isupper&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="k">else&lt;/span> &lt;span class="nb">ord&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;a&amp;#39;&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">result&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="nb">chr&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="nb">ord&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">char&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">base&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">shift&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">26&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">base&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="n">result&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">char&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">result&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">plaintext&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;HELLO WORLD&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ciphertext&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">caesar_cipher&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">plaintext&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;encrypt&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="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">ciphertext&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># KHOOR ZRUOG&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>單表替換式密碼後來被 9 世紀阿拉伯學者阿爾・金迪發明的「頻率分析（Frequency Analysis）」輕易破解。這是利用了語言的統計特性，例如在英文中「E」和「T」出現頻率極高。&lt;/p>
&lt;p>為了對抗頻率分析，16 世紀誕生了「維吉尼亞密碼（Vigenère cipher）」。這是一種週期性切換多個平移（金鑰）的多表替換式密碼（Polyalphabetic substitution），大約有 300 年的時間被稱為「無法破解的密碼（Le Chiffre Indéchiffrable）」。&lt;/p>
&lt;p>在數學上，使用明文的第 $i$ 個字母 $P_i$ 以及重複金鑰的第 $i$ 個字母 $K_i$，以如下方式進行加密：&lt;/p>
$$C_i \equiv P_i + K_i \pmod{26}$$
&lt;p>然而進入 19 世紀，查爾斯・巴貝奇與弗里德里希・卡西斯基發明了「卡西斯基試驗（Kasiski examination）」，藉由尋找密文中重複出現的模式來推算出金鑰長度，維吉尼亞密碼也因此被破解。&lt;/p>
&lt;div class="mermaid">graph TD
subgraph "古典密碼的分類"
A["古典密碼"] --> B["換位式密碼"]
A --> C["替換式密碼"]
B --> D["密碼棒密碼"]
C --> E["單表替換式"]
C --> F["多表替換式"]
E --> G["凱撒密碼"]
F --> H["維吉尼亞密碼"]
end&lt;/div>
&lt;hr>
&lt;h1 id="3-機械式密碼與世界大戰恩尼格瑪密碼機與其破解">3. 機械式密碼與世界大戰：恩尼格瑪密碼機與其破解
&lt;/h1>&lt;p>進入 20 世紀後，通訊手段從書信轉變為電報與無線電，對加密的速度與複雜度也產生了更高的需求。這時結合了轉子（旋轉盤）的「機械式密碼」便應運而生。&lt;/p>
&lt;h2 id="恩尼格瑪密碼機enigma的威脅">恩尼格瑪密碼機（Enigma）的威脅
&lt;/h2>&lt;p>第二次世界大戰期間，納粹德國使用的「恩尼格瑪密碼機（Enigma）」是密碼學史上最著名的密碼機。恩尼格瑪密碼機由多個轉子（通常為 3 到 4 個）、用來交換字母線路的接線板（Steckerbrett），以及反射器（反轉轉子）所構成。&lt;/p>
&lt;p>由於在鍵盤上每敲擊一個字母，轉子就會旋轉，因此即使連續敲擊相同的字母，也會輸出不同的密碼字母（多表替換式密碼的極致）。其金鑰空間（設定組合）高達約 $1.58 \times 10^{19}$ 種（約 1580 京），以當時的技術被認為不可能透過暴力破解法解密。&lt;/p>
&lt;h2 id="艾倫圖靈與炸彈機bombe">艾倫・圖靈與「炸彈機（Bombe）」
&lt;/h2>&lt;p>挑戰這台堅不可摧的恩尼格瑪密碼機的，是繼承了波蘭數學家馬里安・雷耶夫斯基等人初期成果的英國布萊切利園密碼破解團隊。&lt;/p>
&lt;p>尤其是艾倫・圖靈（Alan Turing），他利用對應部分密文的明文猜測（Crib），開發出了機電式的破解機「炸彈機（Bombe）」。炸彈機藉由高速檢測邏輯矛盾，不斷排除不可能的轉子設定，成功破解了恩尼格瑪密碼機。這項偉大的成就據說讓同盟國的勝利提早了幾年。&lt;/p>
&lt;hr>
&lt;h1 id="4-現代密碼學的開端對稱金鑰加密des-與-aes">4. 現代密碼學的開端：對稱金鑰加密（DES 與 AES）
&lt;/h1>&lt;p>戰後，隨著電腦的出現，密碼學從「文字」的操作經歷了戲劇性的典範轉移，變成了「位元（0 與 1）」的操作。&lt;/p>
&lt;h2 id="克勞德夏農與資訊理論">克勞德・夏農與資訊理論
&lt;/h2>&lt;p>1949 年，克勞德・夏農發表了論文《保密系統的通訊理論》，奠定了現代密碼學的數學基礎。他提出了安全密碼設計的兩大原則：「混淆（Confusion）」與「擴散（Diffusion）」。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>混淆（Confusion）&lt;/strong>: 讓金鑰與密文之間的關係盡可能變得複雜。（透過替換、S盒來實現）&lt;/li>
&lt;li>&lt;strong>擴散（Diffusion）&lt;/strong>: 讓明文的 1 個位元的改變能夠影響密文中的許多位元。（透過換位、重排來實現）&lt;/li>
&lt;/ul>
&lt;h2 id="des-data-encryption-standard">DES (Data Encryption Standard)
&lt;/h2>&lt;p>1977 年，美國國家標準暨技術研究院（NIST，當時稱 NBS）制定了以 IBM 設計為基礎的「DES」作為標準密碼。
DES 採用了稱為「費斯妥網路（Feistel Network）」的架構，具備 64 位元的區塊長度與 56 位元的金鑰長度。它在實作上的優勢在於加密與解密的演算法結構幾乎完全相同。&lt;/p>
&lt;p>然而，隨著電腦運算能力的提升，56 位元的金鑰長度（約 $7.2 \times 10^{16}$ 種組合）被證實是不夠的。1998 年，電子前哨基金會（EFF）開發了專用機器「Deep Crack」，僅在幾天內就成功破解了 DES。&lt;/p>
&lt;h2 id="aes-advanced-encryption-standard">AES (Advanced Encryption Standard)
&lt;/h2>&lt;p>為了取代 DES 成為新的標準，2001 年制定了「AES」。它採用了透過公開徵選選出的比利時密碼學家設計的「Rijndael」演算法。&lt;/p>
&lt;p>AES 並非採用費斯妥結構，而是採用了「SPN 結構（Substitution-Permutation Network）」，並利用了伽羅瓦體（有限體） $GF(2^8)$ 上的數學運算。金鑰長度可選擇 128、192、256 位元，至今仍是全世界廣泛使用的標準對稱金鑰加密演算法。&lt;/p>
&lt;div class="mermaid">graph TD
subgraph "AES的一輪處理 (SPN結構)"
A["輸入狀態 (128-bit)"] --> B("SubBytes (位元組替換 / S-Box)")
B --> C("ShiftRows (列平移)")
C --> D("MixColumns (行混合 / GF(2^8)上的乘法)")
D --> E("AddRoundKey (與回合金鑰進行 XOR)")
E --> F["前往下一輪"]
end&lt;/div>
&lt;hr>
&lt;h1 id="5-公開金鑰加密的革命從-diffie-hellman-到-rsa">5. 公開金鑰加密的革命：從 Diffie-Hellman 到 RSA
&lt;/h1>&lt;p>對稱金鑰加密存在一個致命的弱點，那就是「金鑰配送問題（Key Distribution Problem）」。也就是在開始加密通訊之前，如何與遠方的對象安全地共享「對稱金鑰」的問題。解決這個問題的正是 1970 年代誕生的「公開金鑰加密」。&lt;/p>
&lt;h2 id="diffie-hellman-金鑰交換">Diffie-Hellman 金鑰交換
&lt;/h2>&lt;p>1976 年，惠特菲爾德・迪菲與馬丁・赫爾曼發表了劃時代的論文《密碼學的新方向》。他們利用了「離散對數問題（Discrete Logarithm Problem）」的數學困難性，提出了一種即使在被竊聽的通訊路徑上，也能安全共享金鑰的方法。&lt;/p>
&lt;ol>
&lt;li>公開一個大質數 $p$ 與生成元 $g$。&lt;/li>
&lt;li>Alice 選擇一個秘密值 $a$，並將 $A = g^a \pmod{p}$ 傳送給 Bob。&lt;/li>
&lt;li>Bob 選擇一個秘密值 $b$，並將 $B = g^b \pmod{p}$ 傳送給 Alice。&lt;/li>
&lt;li>Alice 計算 $K = B^a \pmod{p}$，Bob 計算 $K = A^b \pmod{p}$。&lt;/li>
&lt;li>根據指數定律 $K = (g^b)^a = (g^a)^b = g^{ab} \pmod{p}$，兩人完美地共享了相同的金鑰 $K$。&lt;/li>
&lt;/ol>
&lt;h2 id="rsa-加密">RSA 加密
&lt;/h2>&lt;p>隔年 1977 年，由羅納德・李維斯特、阿迪・薩莫爾和倫納德・阿德曼三人發明了「RSA 加密」。這是基於「巨大的合成數的質因數分解十分困難」的特性。&lt;/p>
&lt;p>&lt;strong>RSA 的數學原理:&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>選擇兩個巨大的質數 $p$ 與 $q$，並計算 $n = p \times q$。&lt;/li>
&lt;li>計算尤拉商數函數 $\phi(n) = (p-1)(q-1)$。&lt;/li>
&lt;li>選擇與 $\phi(n)$ 互質的整數 $e$（公開金鑰）。&lt;/li>
&lt;li>計算能滿足 $e \times d \equiv 1 \pmod{\phi(n)}$ 的整數 $d$（私有金鑰）。&lt;/li>
&lt;/ol>
&lt;p>加密: 對於明文 $M$，計算 $C \equiv M^e \pmod{n}$
解密: 對於密文 $C$，計算 $M \equiv C^d \pmod{n}$&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;/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"># 示範 RSA 加密概念的 Python 程式碼（不適用於實際用途）&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">ext_euclid&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">b&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="k">if&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">g&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ext_euclid&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">b&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">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span> &lt;span class="o">//&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">g&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="k">def&lt;/span> &lt;span class="nf">rsa_example&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">p&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">q&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">61&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">53&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="n">p&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">q&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">phi&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">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="o">*&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">q&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>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">e&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">17&lt;/span> &lt;span class="c1"># 與 phi 互質的值&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">d&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ext_euclid&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&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">d&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">d&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">phi&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;公開金鑰: (e=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">, 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">)&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="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;私有金鑰: (d=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">, 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">)&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">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">65&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ciphertext&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">e&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">decrypted&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ciphertext&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">d&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>&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">message&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> -&amp;gt; 密文: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">ciphertext&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> -&amp;gt; 解密後: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">decrypted&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="n">rsa_example&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;hr>
&lt;h1 id="6-橢圓曲線密碼學ecc的崛起">6. 橢圓曲線密碼學（ECC）的崛起
&lt;/h1>&lt;p>RSA 加密雖然強大，但隨著電腦效能的提升，為了維持安全性必須加長金鑰長度（目前為 2048 位元或 3072 位元），這導致了運算成本增加的問題。&lt;/p>
&lt;p>因此在 1985 年提出了「橢圓曲線密碼學（Elliptic Curve Cryptography: ECC）」。這利用了有限體上橢圓曲線（通常為 $y^2 = x^3 + ax + b$ 形式）的點加法。&lt;/p>
&lt;p>橢圓曲線上的離散對數問題（ECDLP）已知比質因數分解問題更難求解，&lt;strong>ECC 只要 256 位元的金鑰長度，就能實現與 RSA 3072 位元同等的安全性&lt;/strong>。這使得在智慧型手機或 IoT 裝置等運算資源有限的環境中，也能進行高速且安全的加密通訊（如 ECDSA 或 ECDH 等）。&lt;/p>
&lt;hr>
&lt;h1 id="7-量子電腦的威脅與後量子密碼學pqc">7. 量子電腦的威脅與後量子密碼學（PQC）
&lt;/h1>&lt;p>密碼技術看似堅若磐石，但 1994 年由彼得・秀爾（Peter Shor）發表的「秀爾演算法」卻帶來了巨大的衝擊。&lt;/p>
&lt;p>量子電腦利用量子力學的「疊加」與「量子纏結」特性來進行運算。在數學上已經證明，如果在效能足夠的量子電腦上執行秀爾演算法，質因數分解問題與離散對數問題就能在「多項式時間」內被解開。也就是說，在實用的量子電腦問世的那一天（Q-Day），現在所使用的 RSA 或 ECC 等公開金鑰加密都將在瞬間崩潰。&lt;/p>
&lt;h2 id="pqc後量子密碼學的登場">PQC（後量子密碼學）的登場
&lt;/h2>&lt;p>為防範這個前所未有的威脅，基於連量子電腦也難以破解的新數學問題的「後量子密碼學（PQC）」研究正快馬加鞭地進行著。NIST（美國國家標準暨技術研究院）長年來持續推動 PQC 的標準化流程，主要以下列數學方法最具潛力。&lt;/p>
&lt;h3 id="1-晶格密碼學lattice-based-cryptography">1. 晶格密碼學（Lattice-based Cryptography）
&lt;/h3>&lt;p>這是目前最有潛力的方法，也被 NIST 的標準化演算法（ML-KEM / Kyber、ML-DSA / Dilithium）所採用。它基於在多維空間的「晶格（Lattice）」上尋找特定點的問題（如最短向量問題: SVP 等），以及 LWE（Learning With Errors: 錯誤學習）問題的困難性。&lt;/p>
&lt;p>LWE 問題的概念利用了當我們在聯立一次方程式中刻意加入「小雜訊（誤差）」時，求解會瞬間變得極為困難的特性。
方程式系統: $\mathbf{A}\mathbf{s} + \mathbf{e} \equiv \mathbf{b} \pmod{q}$
（$\mathbf{A}$ 與 $\mathbf{b}$ 為公開，$\mathbf{s}$ 為私有金鑰，$\mathbf{e}$ 為極小的雜訊）&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;/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"># LWE 問題的概念性虛擬碼（學習用途）&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">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>&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">256&lt;/span> &lt;span class="c1"># 維度&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">q&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">3329&lt;/span> &lt;span class="c1"># 模數&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">m&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">512&lt;/span> &lt;span class="c1"># 方程式的數量&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"># 私有金鑰 s 與小誤差 e&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">s&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">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randint&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">5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">size&lt;/span>&lt;span class="o">=&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">e&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">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randint&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="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">m&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"># 公開矩陣 A 與公開向量 b&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="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">q&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">size&lt;/span>&lt;span class="o">=&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">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">b&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dot&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">s&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">q&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"># 即使使用量子電腦，要從 A 和 b 還原 s 也被認為是非常困難的&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="2-雜湊基礎密碼學hash-based-cryptography">2. 雜湊基礎密碼學（Hash-based Cryptography）
&lt;/h3>&lt;p>這是一種僅以雜湊函數的抗碰撞性作為安全性基礎的數位簽章方案。由於不具備數學結構，因此能有效抵抗量子攻擊，但簽章大小往往較大（如 SPHINCS+ 等）。&lt;/p>
&lt;h3 id="3-編碼基礎密碼學code-based-cryptography">3. 編碼基礎密碼學（Code-based Cryptography）
&lt;/h3>&lt;p>這是一種基於錯誤更正碼理論的加密方式。1978 年提出的 McEliece 加密等較為著名，歷史悠久且安全性備受肯定，但存在公開金鑰尺寸極大（有時高達數 MB）的課題。&lt;/p>
&lt;div class="mermaid">timeline
title "密碼技術與計算機演進的歷史"
"古代至中世" : "凱撒密碼" : "維吉尼亞密碼" : "頻率分析的誕生"
"1930至40年代" : "恩尼格瑪密碼機的運用與破解" : "圖靈機・炸彈機的開發"
"1970年代" : "DES標準化 (1977)" : "Diffie-Hellman金鑰交換 (1976)" : "RSA加密的誕生 (1977)"
"1980至90年代" : "橢圓曲線密碼學 (ECC) 的提出" : "發表秀爾演算法 (1994)"
"2000年代" : "AES標準化 (2001)"
"2010年代至今" : "量子電腦研究加速" : "NIST開始PQC標準化計畫"
"近未來 (Q-Day)" : "大型量子電腦的實現？" : "完全轉移至PQC（ML-KEM/ML-DSA）"&lt;/div>
&lt;hr>
&lt;h1 id="8-結論無止盡的矛盾之爭">8. 結論：無止盡的矛盾之爭
&lt;/h1>&lt;p>密碼技術的歷史，就是發明新加密方式（盾）與破解它的新解密手法（矛）之間無止盡的戰鬥歷史。&lt;/p>
&lt;p>凱撒密碼敗給了頻率分析，號稱無敵的恩尼格瑪密碼機則敗給了圖靈的天才頭腦與機器的力量。而現在，支撐現代網際網路社會根基的 RSA 與 ECC 等強大密碼，也正暴露在量子電腦這個全新的「矛」的威脅之下。&lt;/p>
&lt;p>然而，人類已經放眼未來的下一步，正在準備名為後量子密碼學（PQC）的全新「盾」。目前，在全世界的 IT 基礎設施中，確保從現有公開金鑰加密轉移至 PQC 的準備（確保密碼靈活性，Crypto Agility）已成為當務之急。&lt;/p>
&lt;p>密碼技術不僅僅是艱澀難懂的數學謎題，它是為了保護我們的隱私、財產，乃至社會基礎設施本身的最強防壁。&lt;/p></description></item></channel></rss>