<?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-cn/tags/security/</link><description>Recent content in Security on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 17:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/zh-cn/tags/security/index.xml" rel="self" type="application/rss+xml"/><item><title>后量子时代的区块链和虚拟货币将如何改变？</title><link>http://kenji.blog/zh-cn/p/post-quantum-blockchain-and-crypto/</link><pubDate>Fri, 11 Sep 2026 17:00:00 +0900</pubDate><guid>http://kenji.blog/zh-cn/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{ 次}}
$$
&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 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>的基础。哈希函数的反向计算（原像计算）可以被视为一个“非结构化数据库搜索问题”，即寻找一个输入值 $x$，使得 $H(x)$ 等于某个特定的输出值 $y$。&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-能否幸存哈希中的量子霸权">2.3.1. SHA-256 能否幸存？（哈希中的量子霸权）
&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{比特币地址} = \text{Base58Check}(\text{RIPEMD160}(\text{SHA256}(\text{公钥})))
$$
&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;/li>
&lt;li>使用获取的私钥，&lt;strong>创建一笔伪造的交易&lt;/strong>，将Alice的资金发送到攻击者的地址。&lt;/li>
&lt;li>为这笔伪造的交易设置比Alice原交易&lt;strong>高得多的矿工费（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（量子计算机破解密码之日）”的灾难，密码学界和区块链社区正在计划向**抗量子计算密码学（PQC）**过渡，这种密码学即使使用量子算法也很难破解。
美国国家标准与技术研究院（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签名的数学细节一次性签名">4.1.1. Lamport签名的数学细节（一次性签名）
&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>格密码学（Lattice-Based Cryptography）&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&lt;/strong>或&lt;strong>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>为了避免这种情况，必须通过网络硬分叉，将用于验证PQC的新预编译合约（例如：将 &lt;code>0x10&lt;/code> 分配给 DilithiumVerify）直接内置到EVM中。这需要各个以太坊客户端（如Geth、Nethermind、Erigon等）的核心开发者协同合作，在C++、Go、Rust等语言层面上优化实现格密码学验证逻辑，并进行安全审计，这是一个极其漫长的过程。&lt;/p>
&lt;h3 id="53-硬分叉达成共识的困难性">5.3. 硬分叉达成共识的困难性
&lt;/h3>&lt;p>要更改底层的签名算法，就必须进行**硬分叉（Hard Fork）**以更新整个网络的协议。然而，在一个像比特币这样极度重视“不改变规则、保持去中心化”的社区中，达成共识的过程在政治层面上是极其艰难的。关于过渡到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-rollups2025年">阶段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（扩展默克尔签名方案）的基于哈希的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>“后量子时代”的到来不再仅仅是科幻小说（SF）中的空想，它已经作为现实密码系统面临的具体技术挑战，逼近了我们的眼前。&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>：时刻留意主要网络关于PQC迁移的讨论或硬分叉新闻（如Bitcoin的BIP、Ethereum的EIP等），确保在需要时能妥善完成钱包的迁移工作。&lt;/li>
&lt;/ul>
&lt;p>区块链的历史，也是一部不断应对新技术威胁进行升级与自我修复（Resilience）的历史。正如克服可扩展性问题和环境问题（从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-cn/p/history-of-cryptography-caesar-to-pqc/</link><pubDate>Fri, 11 Sep 2026 15:00:00 +0900</pubDate><guid>http://kenji.blog/zh-cn/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}$ 种，以当时的技术水平，暴力破解被认为是不可能的。&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-数据加密标准">DES (数据加密标准)
&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-高级加密标准">AES (高级加密标准)
&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）”。即在开始加密通信之前，如何与远方的通信对象安全地共享“对称密钥”。解决这一问题的，正是诞生于20世纪70年代的“公钥密码”。&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比特的密钥长度就能实现与3072比特RSA相当的安全性&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密码就颇为著名，其历史悠久且安全性备受肯定，但也存在公钥体积过大（甚至可达数兆字节）的问题。&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>