# 量子密码分析:Shor、Grover、Collision 与 Simon 攻击模型 量子计算对密码学的影响**不是**“所有密钥长度减半”这样一句话能概括的。本章的任务是把三类本质不同的量子攻击讲清楚: - **Shor 算法**对整数分解(factoring)与离散对数(discrete logarithm)给出**多项式时间**算法,直接摧毁 RSA、有限域 Diffie–Hellman 与椭圆曲线密码(ECC)赖以安全的数学难题; - **Grover 算法**对无结构的密钥穷搜只给出**平方根级(quadratic)**的查询加速,它的后果是“对称密钥要加长”,而不是“对称密码被攻破”; - **Simon 型攻击**在更强的 **superposition-query(Q2)模型**中,可以把某些具体对称构造(如 Even–Mansour、3 轮 Feistel、CBC-MAC)的密钥恢复从指数级降到多项式级。 这三类攻击的**预言机(oracle)形式、所需数据、内存模型、输出结果**全都不同;把它们混为一谈,是量子密码分析科普中最常见的错误。本章假设读者已经学完本站第 1–8 章的内容(QFT、相位估计、Shor、Grover、Simon、QSP/QSVT 等),相关算法本身我们只引用结论,重点放在**如何把量子算法正确地“接到”密码学问题上**。 先交代一下历史脉络(对应的原始文献列在文末)。这条线从 1994 年开始:Shor 给出分解与离散对数的多项式时间量子算法,直接威胁 RSA 与刚刚兴起的椭圆曲线密码;Grover(1996)随后给出无结构搜索的平方根加速,迫使人们重新计算对称密钥的安全边际。对称密码这边,Simon 算法原本只是一个理论上的查询复杂度分离结果,直到 Kuwakado–Morii 等人发现它能攻击具体的分组密码构造、Kaplan 等人(2016)把它系统化为对 Even–Mansour、Feistel、MAC 的一族 Q2 攻击,才成为现实的设计约束。同一时期,差分/线性密码分析的量子化、AES 的量子资源估计、以及 isogeny/lattice/multivariate 方向的代数攻击陆续出现,构成了本章第 4–7 节的内容。贯穿这条线的主线是同一个问题:**量子算法到底改变了哪个安全假设、在哪个攻击模型下改变、改变了多少**——这正是本章每一节要回答的。 :::{admonition} 本课知识点 :class: tip 1. **[攻击者能力模型:Q1、Q2 与 recorded-data](#attacker-models-q1-q2)**——能列出 Q1、Q2、公开算法与 recorded-data 四种模型下攻击者的能力边界,并解释 Q2 为何严格强于 Q1、recorded-data 威胁为何不需要在线量子访问。 2. **[Shor:从分解到周期寻找](#shor-period-finding)**——能写出阶 $r$ 的定义,说明 $f(x)=a^x\bmod N$ 的周期性与 $U_a$ 的酉性来源,并指出相位估计加连分数展开如何把求 $r$ 降到 $\operatorname{poly}(\log N)$。 3. **[Shor:从周期到因子的经典后处理](#shor-classical-postprocessing)**——能推导 $(a^{r/2}-1)(a^{r/2}+1)\equiv0\pmod N$ 蕴含的因子分离论证,解释两条检查条件各自排除的失败情形,并对 $N=15$ 手算完整后处理流程。 4. **[离散对数的隐藏子群归约](#dlog-hidden-subgroup)**——能构造 $f(a,b)=g^{a+bx}$,推导隐藏子群 $H=\langle(-x,1)\rangle$ 及其陪集结构,并说明 QFT 采样方程 $-ux+v\equiv0\pmod q$ 如何给出 $x\equiv vu^{-1}$。 5. **[Grover 密钥恢复的迭代与成本](#grover-key-search-cost)**——能写出相位预言机并计算迭代次数 $\frac{\pi}{4}2^{\kappa/2}$,说明每次迭代的真实代价组成与“密钥翻倍”启发式的适用边界。 6. **[Hash 原像、碰撞与 BHT 算法](#hash-preimage-collision)**——能比较原像、第二原像与碰撞三个任务的经典/量子复杂度,推导生日界 $2^{n/2}$ 并计算 BHT 的参数平衡点 $r=2^{n/3}$。 7. **[Simon 攻击与 Even–Mansour 构造](#simon-even-mansour)**——能从 Even–Mansour 定义推导 $F(x\oplus k_1)=F(x)$,并说明 Simon 采样加高斯消元如何以多项式次查询恢复 $k_1$ 与 $k_2$。 8. **[三类攻击对照与后量子边界](#three-attack-classes)**——能按预言机形式、加速量级与防御对策三个维度比较三类量子攻击,并解释“后量子”安全估计必须写明模型与成本的原因。 ::: (attacker-models-q1-q2)= ## 1. 先区分攻击者能力:Q1、Q2 与 recorded-data 讨论任何量子攻击之前,必须先回答一个问题:攻击者到底能做什么?设带密钥的密码原语为 $E_K(x)$(例如分组密码加密、MAC 签名),密钥 $K$ 固定在目标设备内部。至少要区分以下几种模型: - **Q1 / offline-quantum(经典查询 + 量子离线计算):**攻击者只能像经典攻击者一样,向真实设备发送**经典**输入 $x$、收到**经典**输出 $E_K(x)$;但他可以把收集到的数据交给一台量子计算机做离线处理。这是对“现实世界的远程加密服务”最诚实的模型。 - **Q2 / superposition-query(叠加查询):**攻击者可以调用密码原语的**相干预言机** $$ O_{E_K}|x,z\rangle=|x,z\oplus E_K(x)\rangle, $$ 即把 $E_K$ 实现为一个可逆量子电路,允许输入是 $\sum_x \alpha_x|x\rangle$ 这样的叠加态,并且**跨多次查询保持相干性**(coherence)。这等价于攻击者拿到了“内嵌秘密 $K$ 的量子电路”,可以对它做任意酉操作。 - **Public-algorithm model(公开算法模型):**RSA 加密、Diffie–Hellman 的模幂运算等**公钥**操作,其算法与公开参数本来就是公开的,攻击者可以**自己**把它们实现成可逆电路,不需要访问任何带秘密的预言机。Shor 攻击就属于这一类——这是它现实威胁远大于 Q2 攻击的根本原因。 - **Recorded-data threat(先存后解 / harvest now, decrypt later):**攻击者今天记录下来的公钥密文(例如 TLS 握手中用 RSA 或 ECDH 保护的会话密钥),可以在未来的容错量子计算机造好之后解密。这个威胁**完全不需要在线量子访问**,它只依赖 Shor 算法的存在性和“今天的数据多年后仍有保密价值”这一事实。这正是各国推动后量子密码迁移的现实动机。 **Q2 严格强于 Q1,也强于普通的 chosen-plaintext 攻击。** 原因很直接:一个经典的服务器收到查询时会**测量**输入(它在经典比特上工作),返回的也是经典字符串——物理上它根本不会实现 $O_{E_K}$ 这个酉映射。叠加查询要求攻击者能把 $E_K$ 的**实现**(而不只是输入输出行为)拿来做相干演化,这在“远程调用一个加密 API”的场景里通常不成立。 但这不意味着 Q2 结果没有价值。它揭示的是:许多**经典安全性证明**(在经典查询模型下归约到某个困难假设的证明)在 quantum-access model 下**直接失效**——证明的归约步骤无法模拟一个回答叠加查询的预言机。因此 Q2 攻击应被读作“这类构造的设计原理在量子世界中不成立”,而不是“明天就能远程破解”。本章第 8 节的 Simon 攻击就属于这一类,届时我们会再强调这个前提。 ## 2. Shor 如何分解 RSA 模数 ### 2.1 问题背景与经典瓶颈 RSA 的安全性归约到整数分解:给定两个大素数的乘积 $N=pq$,求出 $p$ 与 $q$。已知的最好经典算法(general number field sieve)是**次指数**时间的,粗略形如 $\exp\!\big(O((\log N)^{1/3}(\log\log N)^{2/3})\big)$——这就是 RSA 密钥要取 2048 位甚至更长的原因:安全性来自“多项式与次指数之间的鸿沟”。Shor(1994/1995)证明,这个鸿沟在量子计算机上不存在:分解可以在 $\operatorname{poly}(\log N)$ 时间内完成。 Shor 算法的量子部分我们在[Shor 分解教程](../ch04-classic-algorithms/shors-algorithm-tutorial.md)中已经完整推导过,本节的重点是**密码分析视角下的完整链条**:从“分解 $N$”如何归约为“求周期”,到经典后处理为什么有效,再到资源估计上不能犯的错误。 (shor-period-finding)= ### 2.2 从分解到周期寻找 给定 $N=pq$,随机选取整数 $11$,那么 $a$ 与 $N$ 有公因子,而对 $N=pq$ 来说这个公因子只能是 $p$ 或 $q$——**分解已经完成**,不需要任何量子计算。若 $\gcd(a,N)=1$,则 $a$ 是模 $N$ 乘法群中的可逆元,定义它的**阶(order)**为 $$ r=\min\{r>0:a^r\equiv1\pmod N\}. $$ 由初等数论(有限群中任何元素的幂次必循环),这样的 $r$ 一定存在且 $r\le \varphi(N)n$,用一个对平均还剩约 $2^{\kappa-n}$ 个“碰巧也对”的假阳性密钥。因此验证对的数量要取得足够多(大致使 $\kappa$ 比特的密钥被所有对联合唯一确定),这属于经典密码分析中的 unicity 估计,与量子部分无关但影响 oracle 的构造。 ### 4.2 相位预言机 把 Grover 搜索套到谓词 $V$ 上:把密钥寄存器制备为均匀叠加 $|s\rangle=2^{-\kappa/2}\sum_k|k\rangle$;**可逆地**计算密码 $E_k(P_i)$、与 $C_i$ 比较、把比较结果写入相位、再 **uncompute**(反向运行)所有工作比特。净效果就是相位预言机 $$ |k\rangle\mapsto(-1)^{V(k)}|k\rangle. $$ 这一步在理论上总是可行的(任何经典可计算函数都可做成带垃圾比特的可逆电路再反算清除),但**工程上极其昂贵**:整个分组密码(如 AES)要被翻译成量子电路,密钥调度的每一轮都要可逆化,还需要足够的工作比特和 uncomputation 深度。 (grover-key-search-cost)= ### 4.3 迭代次数与真实成本 由 Grover 算法的标准分析(本站第 3 章),若唯一目标位于 $2^\kappa$ 个候选中,所需迭代次数约为 $$ \frac{\pi}{4}\,2^{\kappa/2}. $$ $\frac{\pi}{4}$ 来自“把态从初始角度 $\theta\approx2^{-\kappa/2}$ 旋转到 $\frac{\pi}{2}$ 所需步数 $\frac{\pi/2}{2\theta}$”,不是随便塞进来的常数。但**每次迭代不是一个基本门**,而是至少包含: - 一次完整的可逆密码计算(oracle); - 比较器与相位翻转; - 一次 diffusion 算子($2^{-\kappa}$ 量级的多比特受控相位,代价可忽略地低于密码本身); - 以及为保持相干性所需的全部 uncomputation。 因此 AES 类目标的严肃资源估计要数 **Toffoli/T 门数、逻辑量子比特数、电路深度(depth)与容错开销**,而不是只报告 $2^{\kappa/2}$ 这个查询数。文献中的 AES-128/192/256 量子资源估计正是按这种方式做的。 ### 4.4 “密钥长度翻倍”只是启发式 流行的说法“Grover 让对称安全性减半,所以密钥翻倍即可”是 **exponent-level heuristic**,只在“串行、单目标、oracle 深度固定”的理想化下成立。实际的攻击经济学更复杂: - **并行 Grover 的 time–processor tradeoff 很差。** 把候选空间均分给 $P$ 台处理器,每台搜索 $2^\kappa/P$ 大小的子空间,各自需要约 $\frac{\pi}{4}\sqrt{2^\kappa/P}$ 次迭代,于是**挂钟时间**只缩短为原来的 $1/\sqrt P$,而总处理器-时间乘积反而按 $\sqrt P$ 增长。也就是说,并行化在 Grover 上只有平方根回报——这与经典穷搜“$P$ 台机器 $P$ 倍速”完全不同,是量子攻击对防御方有利的一面。 - **多目标(multi-target)与单目标不同。** 攻击一个密钥库中“任意一个”密钥比攻击指定密钥便宜,这会改变大规模监控场景下的成本模型。 - **深度上限约束。** 物理机器能维持的相干深度有限;若限制总深度,Grover 的优势会被进一步压缩。 这些都改变具体参数选择,但不改变“平方根”这个渐近结论。 (hash-preimage-collision)= ## 5. Hash 原像与碰撞 对理想 $n$ 比特 hash 函数(随机预言机行为),三类任务的经典与量子复杂度完全不同,必须分开讨论: - **原像搜索(preimage):**给定 $y$,找 $x$ 使 $H(x)=y$。经典暴力约 $2^n$ 次求值;这正是无结构搜索,Grover 给出约 $2^{n/2}$ 次量子查询,且已证明是最优的。 - **第二原像(second preimage):**给定 $x$,找 $x'\ne x$ 使 $H(x')=H(x)$。对理想 hash 与原像同阶。 - **碰撞搜索(collision):**找任意一对 $x\ne x'$ 使 $H(x)=H(x')$。经典地用**生日悖论(birthday paradox)**只需约 $2^{n/2}$ 次求值。 **为什么生日攻击是 $2^{n/2}$?** 求值 $t$ 个随机输入,共有 $\binom{t}{2}\approx\frac{t^2}{2}$ 对候选;每对发生碰撞的概率约为 $2^{-n}$。于是“没有碰撞”的概率约为 $$ \prod_{i 提示:判断标准是秘密 $K$ 是否被“冻”在一个攻击者可相干操作的电路里。 **练习 2【Shor:从分解到周期寻找】**(→ [2.2 节](#shor-period-finding)) 1. 写出元素阶 $r$ 的定义,并解释为什么 $\gcd(a,N)>1$ 时无需任何量子计算即可完成分解。 2. 证明 $f(x)=a^x\bmod N$ 以 $r$ 为周期,并说明 $\gcd(a,N)=1$ 为何保证 $U_a|x\rangle=|ax\bmod N\rangle$ 可以实现为酉算子。 3. 在“随机选 $a$ → 求阶 $r$ → 连分数展开 → 两次 $\gcd$”的完整链条中指出哪些步骤由量子计算机完成、哪些由经典后处理完成,并解释为什么说经典地求 $r$ 并不比直接分解 $N$ 容易。 > 提示:量子部分只承担周期寻找;逐一试幂求阶需要指数多次模乘。 **练习 3【Shor:从周期到因子的经典后处理】**(→ [2.3 节](#shor-classical-postprocessing)) 1. 写出经典后处理的两条检查条件,并分别说明每一条排除了哪种使 $\gcd$ 只给出平凡结果的失败情形。 2. (手算)对 $N=15$、$a=2$:求阶 $r$,检查 Shor 经典后处理的两条条件,并算出两次 $\gcd$ 得到的因子。 3. 证明:由 $r$ 的极小性必有 $N\nmid(a^{r/2}-1)$;若 $a^{r/2}\equiv-1\pmod N$,则两个最大公因子都只能给出平凡结果。 > 提示:把 $a^r-1$ 用平方差公式拆成 $(a^{r/2}-1)(a^{r/2}+1)$ 后,逐项检查 $N$ 整除哪一个因子。 **练习 4【离散对数的隐藏子群归约】**(→ [3.2 节](#dlog-hidden-subgroup)) 1. 写出离散对数问题的定义,并给出经典通用攻击与椭圆曲线情形最好经典攻击的复杂度量级。 2. 验证 $f(a,b)=g^a h^b=g^{a+bx}$(代入 $h=g^x$),并推导 $f(a,b)=f(a',b')$ 当且仅当 $(a-a')+x(b-b')\equiv0\pmod q$。 3. (推导)从第 3 节的 $f(a,b)=g^{a+bx}$ 出发,补全“$f$ 在 $H=\langle(-x,1)\rangle$ 的陪集上取常值”的证明,并推导 QFT 采样结果 $(u,v)$ 满足的正交方程 $-ux+v\equiv0\pmod q$。 > 提示:正交方程来自特征标 $(a,b)\mapsto e^{2\pi i(ua+vb)/q}$ 在生成元 $(-x,1)$ 上取值 $1$ 的要求。 **练习 5【Grover 密钥恢复的迭代与成本】**(→ [4.3 节](#grover-key-search-cost)) 1. 写出相位预言机 $|k\rangle\mapsto(-1)^{V(k)}|k\rangle$ 的构造步骤,并说明最后一步 uncompute 为什么不可省略。 2. (计算)设 $\kappa=128$ 且目标密钥唯一,计算所需 Grover 迭代次数的数量级,并写出 $\frac{\pi}{4}$ 这个常数的几何来源。 3. (复杂度)设密钥空间有 $2^{128}$ 个候选、每次 Grover 迭代的 oracle 深度为 $D$。写出串行总深度的数量级;若有 $P=2^{20}$ 台理想并行处理器,挂钟深度变为多少?由此说明并行 Grover 的 tradeoff。 > 提示:$P$ 台处理器把候选空间均分后,每台各搜 $2^\kappa/P$ 大小的子空间。 **练习 6【Hash 原像、碰撞与 BHT 算法】**(→ [第 5 节](#hash-preimage-collision)) 1. 列出理想 $n$ 比特 hash 的原像、第二原像与碰撞三个任务在经典与量子模型下的复杂度量级。 2. 推导生日界:求值 $t$ 个随机输入后“无碰撞”的概率约为 $\exp\!\big(-\frac{t^2}{2}\cdot 2^{-n}\big)$,并说明为何取 $t\sim2^{n/2}$ 时碰撞以显著概率出现。 3. (参数平衡)在第 5 节 BHT 算法中,把表大小改为 $r=2^{n/4}$,总查询数 $T(r)=r+\sqrt{2^n/r}$ 变成多少?与 $r=2^{n/3}$ 比较,说明为什么 $2^{n/3}$ 是平衡点。 > 提示:分别写出 $r$ 与 $\sqrt{2^n/r}$ 两项的指数,平衡点在两项同阶处。 **练习 7【Simon 攻击与 Even–Mansour 构造】**(→ [8.2 节](#simon-even-mansour)) 1. 写出 Even–Mansour 加密 $E_{k_1,k_2}(x)=P(x\oplus k_1)\oplus k_2$ 的定义,并说明 Simon 算法每次测量输出的 $y$ 满足哪个关于 $k_1$ 的线性方程。 2. (验证)补全第 8.2 节 $F(x\oplus k_1)=F(x)$ 的推导,并说明:哪些“偶然碰撞”会破坏 Simon 算法要求的 promise?为什么理想置换模型下期望它们稀少?(定性即可) 3. 解释为什么 $O(n)$ 次独立采样加高斯消元能把候选缩小到 $\{0,k_1\}$,以及拿到 $k_1$ 后如何用单个明密文对求出 $k_2$。 > 提示:把 $E_{k_1,k_2}(x)=P(x\oplus k_1)\oplus k_2$ 两边同时异或 $P(x\oplus k_1)$。 **练习 8【三类攻击对照与后量子边界】**(→ [第 9 节](#three-attack-classes)) 1. 仿照第 9 节的表格,按“核心量子工具、典型影响、主要边界”三列默写三类攻击(代数公钥、通用量化、Q2 Simon)的对照。 2. 比较三类攻击对应的防御对策,并解释为什么“换难题、加大参数、重新设计构造”三者互不通用。 3. 解释“post-quantum(后量子)”的正确含义,并列举一份合格的量子安全估计必须写明的要素。 > 提示:三类的分界在预言机形式与加速量级——难题落入 $\mathsf{BQP}$、安全指数打折、模型升级后的构造性崩溃。 ## 参考文献与 Zoo 覆盖 - Zoo 编号 14、82、109、125:Boneh--Lipton hidden linear functions、Shor factoring/discrete log 与 elliptic-curve implementation。 - Zoo 编号 283、537--541:isogeny、lattice 与 multivariate algebraic attacks,以及适用范围/限制。 - Zoo 编号 262、284--285、287--288、315--316、536:AES/hash、block-cipher、NTRU、lattice sieving 和 collision 的 quantized attacks。 - Zoo 编号 286、289--292:differential/linear cryptanalysis,以及 Feistel、Even--Mansour、related-key 与 Simon symmetric-key attacks。 - 主要原文:[Shor](https://arxiv.org/abs/quant-ph/9508027)、[isogeny attack](https://arxiv.org/abs/1012.4019)、[AES resource estimates](https://arxiv.org/abs/1512.04965)、[quantum differential/linear cryptanalysis](https://arxiv.org/abs/1510.05836)、[Simon symmetric-key attacks](https://arxiv.org/abs/1603.07856)与[Macaulay/HHL limitations](https://arxiv.org/abs/2111.00405)。