try ai
科普
编辑
分享
反馈
  • Shor 算法

Shor 算法

SciencePedia玻尔百科
核心要点
  • Shor 算法通过将整数分解问题转化为一个特别适合量子计算机解决的周期寻找问题,从而高效地解决了该问题。
  • 它利用量子叠加和量子傅里叶变换 (QFT) 来找到一个模幂函数的周期,进而揭示因数。
  • 通过将因数分解问题置于 BQP 复杂性类中,该算法威胁着如 RSA 等现代密码学,并重新定义了我们对计算极限的理解。

引言

在一个数字信息至高无上的时代,我们的数据安全通常依赖于一种简单的数学不对称性:将两个大素数相乘很容易,但对其乘积进行因数分解对于经典计算机来说却异常困难。这道计算之墙构成了现代公钥密码学的基础,保护着从金融交易到私人通信的一切。但是,如果一种新型计算能够摧毁这堵墙呢?这正是 Shor 算法所要解决的核心问题,它是一种革命性的量子程序,有望以前所未有的效率解决因数分解问题。本文将分两个主要部分探讨这一里程碑式的算法。在接下来的“原理与机制”一章中,我们将剖析 Shor 算法如何利用量子现象——叠加和干涉,将因数分解巧妙地转化为一个周期寻找问题。之后,在“应用与跨学科联系”一章中,我们将审视该算法对密码学、计算机科学以及我们对计算本身基本理解的巨大冲击。

原理与机制

那么,这个量子奇迹究竟是如何工作的呢?它是否仅仅凭借某种诡异的直觉来猜测因数?完全不是。Shor 算法之美不在于对数字 NNN 进行直接、暴力的攻击。相反,它完成了一次漂亮的计算上的“四两拨千斤”。它将棘手的因数分解问题转化为一个完全不同且更易于管理的问题:寻找一个隐藏的模式、一种节奏,或者数学家所称的​​周期​​。

迂回的艺术:从因数分解到周期寻找

想象你有一个锁,但你无法撬开它,也没有钥匙。直接攻击似乎毫无希望。但如果你能以某种方式测量锁内部机制的一个秘密属性——比如锁销的数量——而无需触碰锁销本身呢?知道这个数字可能会告诉你究竟需要什么样的钥匙。

这正是 Shor 算法的策略。我们不直接尝试寻找 NNN 的因数,而是采取一条巧妙的迂回路线。我们随机选择一个比 NNN 小的数,称之为 aaa。然后,我们观察将 aaa 的连续次幂除以 NNN 所得余数的序列。也就是说,我们研究函数 f(x)=ax(modN)f(x) = a^x \pmod Nf(x)=ax(modN)。

让我们来看一个小例子。如果我们想分解 N=15N=15N=15 并选择 a=7a=7a=7,序列如下: 71(mod15)=77^1 \pmod{15} = 771(mod15)=7 72(mod15)=49(mod15)=47^2 \pmod{15} = 49 \pmod{15} = 472(mod15)=49(mod15)=4 73(mod15)=7×4(mod15)=28(mod15)=137^3 \pmod{15} = 7 \times 4 \pmod{15} = 28 \pmod{15} = 1373(mod15)=7×4(mod15)=28(mod15)=13 74(mod15)=7×13(mod15)=91(mod15)=17^4 \pmod{15} = 7 \times 13 \pmod{15} = 91 \pmod{15} = 174(mod15)=7×13(mod15)=91(mod15)=1 75(mod15)=7×1(mod15)=77^5 \pmod{15} = 7 \times 1 \pmod{15} = 775(mod15)=7×1(mod15)=7 ……然后模式开始重复:7,4,13,1,7,4,13,1,…7, 4, 13, 1, 7, 4, 13, 1, \dots7,4,13,1,7,4,13,1,…。

这个序列有一个重复的模式!这个循环的长度就是它的​​周期​​,我们称之为 rrr。在这个例子中,周期是 r=4r=4r=4。事实证明,如果你能找到这个周期 rrr,你就持有了一把可以解开 NNN 的因数的钥匙。问题在于,对于密码学中使用的巨大数字,一步步计算这个序列以找到周期将花费天文数字般的时间。事实上,对于经典计算机来说,寻找周期已被证明与分解该数字一样困难!。这正是计算的瓶颈,是经典算法无法有效攀登的高山。

因此,Shor 算法进行了分工。困难的部分——寻找周期 rrr——外包给量子计算机。其他所有工作,包括设置和最终计算,都可以由一台普通的经典计算机处理。

经典部分的握手:铺垫工作

在我们进入量子比特的奇异世界之前,我们必须执行一些经典的预备步骤。我们首先在 1 和 NNN 之间随机选择一个数 aaa。但我们必须稍微小心一点。我们做的第一件事是一个快速检查:我们计算 aaa 和 NNN 的​​最大公约数​​ (GCD)。这个小小的检查有两个绝妙的目的。

首先,我们可能极其幸运。如果 gcd⁡(a,N)\gcd(a, N)gcd(a,N) 是一个大于 1 的数,那么我们甚至没有动用量子计算机就偶然发现了一个 NNN 的因数!游戏结束,我们赢了。例如,如果我们要分解 N=15N=15N=15,碰巧选了 a=6a=6a=6,那么 gcd⁡(6,15)=3\gcd(6, 15) = 3gcd(6,15)=3。这就是一个因数!

其次,如果 GCD 是 1,这意味着 aaa 和 NNN 是​​互质​​的(它们没有共同的因数)。这不是失败,而是我们下一阶段旅程所必需的通行证。周期寻找的整个数学技巧只有在 aaa 与 NNN 互质时才有效。所以这个初始的 GCD 检查既是一个潜在的捷径,也是一个关键的安全检查。

进入量子领域:机器的核心

现在是主要环节。我们选择了一个与 NNN 互质的 aaa,并且需要找到 f(x)=ax(modN)f(x) = a^x \pmod Nf(x)=ax(modN) 的周期。这正是量子计算机通过利用量子力学中两个最反直觉但最强大的特性——叠加和干涉——来发挥作用的地方。

​​量子并行性:一次完成所有计算​​

一台经典计算机必须逐个计算 f(0),f(1),f(2),…f(0), f(1), f(2), \ldotsf(0),f(1),f(2),…。而一台量子计算机在某种意义上可以一次性完成所有计算。这是通过​​叠加​​实现的。我们设置一个量子寄存器——一组量子比特——来表示输入 xxx。通过应用一个标准操作,我们可以使这个寄存器进入它所能容纳的所有可能数字的叠加态,从 0 到某个大值 QQQ。这并不是说寄存器持有一个我们不知道的数字,而是它同时体现了所有这些数字。

​​伟大的计算​​

接下来是最关键的操作:​​受控模幂运算​​。我们将输入寄存器与第二个输出寄存器连接起来。然后,计算机执行 ax(modN)a^x \pmod Nax(modN) 的计算。因为我们的输入寄存器处于 xxx 所有值的叠加态,该操作会并行地为每一个 xxx 计算该函数。结果是一个巨大的纠缠态。对于叠加态中的每个输入态 ∣x⟩|x\rangle∣x⟩,相应的输出 ∣ax(modN)⟩|a^x \pmod N\rangle∣ax(modN)⟩ 被计算出来并与之关联。最终的状态是所有 xxx 的总和:

∣Ψ⟩=1Q∑x=0Q−1∣x⟩∣ax(modN)⟩| \Psi \rangle = \frac{1}{\sqrt{Q}} \sum_{x=0}^{Q-1} |x\rangle |a^x \pmod N\rangle∣Ψ⟩=Q​1​x=0∑Q−1​∣x⟩∣ax(modN)⟩

在一个优雅的步骤中,计算机计算了整个序列。函数的周期性现在被编码在这个复杂的量子态中。但周期本身仍然对我们隐藏,埋藏在这个巨大的叠加态中。我们如何将它提取出来?

​​干涉的交响曲​​

简单的测量是行不通的。如果我们现在测量这个状态,我们只会得到一个随机的 (x,ax(modN))(x, a^x \pmod N)(x,ax(modN)) 对,这几乎告诉不了我们任何信息。我们需要一种方法让隐藏的周期性自我显现。这正是​​量子傅里叶变换 (QFT)​​ 发挥魔力的地方。

QFT 是我们熟悉的傅里叶变换的量子模拟,后者在信号处理中用于寻找声波中存在的频率。你可以把我们的状态想象成一个复杂的信号,其中周期性函数创造了一个基本的“频率”。QFT 就像一个完美调谐的棱镜。当我们的状态通过它时,叠加态的不同部分开始相互​​干涉​​。

与隐藏周期 rrr 同步的叠加态分量通过相长干涉相互加强。其他所有部分则通过相消干涉而抵消。结果是一个新的状态,其中概率集中在与周期相关的数字上。具体来说,当我们最终测量输入寄存器时,我们极有可能得到一个数字 kkk,使得分数 kQ\frac{k}{Q}Qk​ 对于某个随机整数 jjj 是 jr\frac{j}{r}rj​ 的一个非常好的近似。

回到现实:理解回声

量子计算机的工作已经完成。它倾听了我们函数的节奏,并在 QFT 之后产生了一个“回声”——一个测量结果 kkk。现在,我们回到经典世界来解释这个回声。

我们有一个测量结果 kkk 和叠加态的大小 QQQ,并且我们知道,以高概率,kQ≈jr\frac{k}{Q} \approx \frac{j}{r}Qk​≈rj​。挑战在于从这个分数中找出分母 rrr,特别是我们不知道分子 jjj。这似乎不可能,但有一个优美且有数百年历史的数论工具可以胜任这项工作:​​连分数算法​​。

这个经典算法接收任何分数,并为其找到最佳的有理数近似值。假设,在一次假设的运行中,我们使用了一个 10 量子比特的寄存器(所以 Q=210=1024Q = 2^{10} = 1024Q=210=1024)并测量得到 k=341k=341k=341。我们会将分数 3411024\frac{341}{1024}1024341​ 输入连分数算法。它会优雅地输出一系列接近我们值的更简单分数,而其中一个分母极有可能就是我们正在寻找的周期 rrr。在这种情况下,算法会很快提示 r=3r=3r=3 是一个强有力的候选值。就这样,隐藏的周期被揭示了。

最终章:破解密码

我们现在有了周期 rrr。锁即将弹开。我们回到最初的数学关系:ar≡1(modN)a^r \equiv 1 \pmod Nar≡1(modN)。这意味着 ar−1a^r - 1ar−1 是 NNN 的一个倍数。

接下来是最后也是最巧妙的一步。如果我们的周期 rrr 是一个​​偶数​​,我们可以将 ar−1a^r - 1ar−1 分解为平方差: ar−1=(ar/2−1)(ar/2+1)a^r - 1 = (a^{r/2} - 1)(a^{r/2} + 1)ar−1=(ar/2−1)(ar/2+1) 这就是为什么如果周期 rrr 结果是奇数,算法会失败——我们根本无法执行这个关键步骤。如果 rrr 是奇数,我们必须回到起点,重新选择一个新的底数 aaa。

但如果 rrr 是偶数,我们就发现 NNN 必须能够整除乘积 (ar/2−1)(ar/2+1)(a^{r/2} - 1)(a^{r/2} + 1)(ar/2−1)(ar/2+1)。这意味着 NNN 的素因数必须分布在这两项之间。就好像我们把 NNN 的因数放进了两个盒子里,现在我们只需要查看盒子里面。我们通过计算每一项与 NNN 的 GCD 来实现这一点: d1=gcd⁡(ar/2−1,N)和d2=gcd⁡(ar/2+1,N)d_1 = \gcd(a^{r/2} - 1, N) \quad \text{和} \quad d_2 = \gcd(a^{r/2} + 1, N)d1​=gcd(ar/2−1,N)和d2​=gcd(ar/2+1,N) 以很高的概率,这些将是 NNN 的非平凡因数!

我们还可能掉进最后一个陷阱。如果碰巧 ar/2≡−1(modN)a^{r/2} \equiv -1 \pmod Nar/2≡−1(modN),那么第一个 GCD 很可能是 1,而第二个将是 NNN,这只会给我们已知的平凡因数。如果发生这种情况,我们同样只需换一个随机的 aaa 再试一次。幸运的是,得到奇数周期或遇到这种特殊失败情况的概率很低。大多数时候,算法都能成功。

规模与范围的问题

为什么要经历所有这些量子和经典的体操动作?答案在于难度如何随数字 NNN 的大小而变化。假设 NNN 有 nnn 位。最好的经典算法——广义数域筛法 (GNFS) ——的运行时间大致是 nnn 的立方根的指数函数: TGNFS(n)≈exp⁡((constant)×n1/3(ln⁡n)2/3)T_{GNFS}(n) \approx \exp\left( (\text{constant}) \times n^{1/3} (\ln n)^{2/3} \right)TGNFS​(n)≈exp((constant)×n1/3(lnn)2/3) 然而,Shor 算法的运行时间是 nnn 的多项式时间,大致与 n3n^3n3 成正比。

对于小数,指数函数更小。但随着 nnn 的增长,多项式函数会压倒性地更快。一个假设性的计算表明,虽然 Shor 算法可能有巨大的常数开销,但它变得更快的交叉点在现代密码学标准的范围内。例如,分解一个 300 位的数字,两者可能不相上下,但对于一个 4000 位的数字(用于高安全性交易),经典方法将需要数十亿年,而一台容错量子计算机理论上可以在数小时或数天内完成工作。这就是我们所说的指数级加速。

然而,需要清醒地认识到,量子计算机并非万能灵药。Shor 算法是针对一个特定问题的专门工具。如果你被要求分解一个你知道是完美幂的数,比如 N=pkN = p^kN=pk,有一个非常简单的经典算法可以通过尝试计算 NNN 的整数根来找到 ppp。在这里使用 Shor 算法就像用大锤去砸一个已经裂开的坚果。量子计算的真正力量在于其处理像一般因数分解这类问题的能力,这些问题的隐藏结构完美地适应了叠加和干涉的交响乐。

应用与跨学科联系

好了,我们已经费尽心机地组装了 Shor 算法的机器。我们窥探了它的量子核心,那里发生了叠加和量子傅里叶变换的魔力。一个好奇的学生现在可能会问一个非常合理的问题:“这个宏伟的装置究竟是用来做什么的?”它仅仅是一件美丽的理论物理作品,一个供少数专家欣赏的深奥宝石吗?答案是响亮的“不”,而这正是故事变得真正激动人心的地方。Shor 算法不是一件博物馆展品。它是一把钥匙,一把具有前所未有威力的万能钥匙。它的存在已经在一些最关键的现代科学和技术领域引起了震动。

本章就是穿越这些领域的一次旅程。我们将看到这一个算法如何像一座强大的桥梁,将量子力学的奇异世界与数字安全、数论的基础,甚至我们对“计算”一词本身含义的理解联系起来。

数字锁匠:颠覆现代密码学

今天在互联网上传输的大部分信息——你的信用卡号、私人消息、银行交易——都受到一套锁的保护。一种非常常见且强大的数字锁被称为 RSA 密码学。RSA 的高明之处在于,用于加密信息的钥匙是公开的(任何人都可以使用),但用于解密的钥匙是私有的。整个系统的安全性取决于一个听起来很简单的数学事实:将两个大素数相乘非常容易,但要从其乘积中找出原始的素因数却极其困难。对于经典计算机来说,分解一个长达 600 位的数字可能比宇宙的年龄还要长。这种计算上的困难正是保护我们数字秘密的墙。

Shor 算法走到这堵墙前,以一位大师级锁匠的沉稳自信,径直穿了过去。它从根本上改变了因数分解问题的性质。对于经典计算机来说,因数分解是困难的。对于运行 Shor 算法的量子计算机来说,因数分解是容易的。用计算复杂性的语言来说,因数分解被认为不在 ​​P​​ 类(经典计算机上可在多项式时间内解决的问题)中,但 Shor 算法决定性地将其置于 ​​BQP​​ 类(量子计算机上可在多项式时间内解决的问题)中。

其后果是惊天动地的:一台足够大且稳定的量子计算机将使 RSA 密码系统以及我们当前大部分数字安全基础设施完全过时。

现在,在我们恐慌并拔掉网线之前,我们应该加上一剂清醒的现实。建造这样一台机器是一项巨大的工程挑战。所需的量子态极其脆弱。例如,要分解一个 nnn 位的数字,一台量子计算机需要一个大约 2n2n2n 个逻辑量子比特的寄存器,才能以足够的精度执行必要的计算。对于一个典型的 2048 位 RSA 密钥,这需要超过 4000 个逻辑量子比特——这个数字远远超出了我们目前的能力。所以,目前来看,锁还能用。但是,钥匙的蓝图已经存在了。

有趣的是,该算法是一种混合体,是经典与量子之间的一曲优美二重奏。在释放完整的量子交响乐之前,它甚至会进行一个简单的经典检查,看看所选的基数是否碰巧与我们想破解的数字有公因数。有时,你会幸运地发现门本来就没锁!。但正是其量子核心赋予了该算法革命性的力量。

更普遍的力量:阶寻找的秘密

如果仅仅将 Shor 算法视为一个“因数分解器”,那就只见树木不见森林了。该算法真正的天才之处在于一个更深、更普遍的原理。Shor 算法的核心不是一个因数分解算法,而是一个​​阶寻找​​算法。

想象一个自我重复的序列,一串数字中隐藏的节奏或节拍。Shor 算法就像一只极其灵敏的耳朵,能够以惊人的效率捕捉到那种节奏,即“周期”。因数分解只是一个特例,在这种情况下,找到模幂函数 f(x)=ax(modN)f(x) = a^x \pmod{N}f(x)=ax(modN) 的周期,就能导出 NNN 的因数。

一旦你意识到这一点,一个全新的可能性世界就打开了。事实证明,许多其他困难的数学问题,它们也构成了不同密码系统的基础,可以被巧妙地伪装成周期寻找问题。一个主要的例子是​​离散对数问题 (DLP)​​。就像 RSA 依赖于因数分解的难度一样,其他加密协议如 Diffie-Hellman 密钥交换和椭圆曲线密码学也依赖于解决 DLP 的难度。而且,与因数分解一样,DLP 也可以被高效的量子阶寻找算法破解。

这是如何工作的呢?这就像重新调谐收音机。核心的量子机制——量子傅里叶变换——保持不变。我们只是给它输入一个不同的数学“信号”进行分析。通过构造一个巧妙的双变量函数,如 F(u,v)=guhv(modp)F(u,v) = g^u h^v \pmod{p}F(u,v)=guhv(modp),未知的离散对数 xxx 就被嵌入到这个新函数的周期中。量子计算机不关心问题是“关于什么”的;它只是找到隐藏的周期性,然后秘密 xxx 就冒了出来。

这个统一的原理在计算机科学中有一个名字:​​隐藏子群问题 (HSP)​​。整数分解和离散对数问题都只是这个更基本问题所穿的两种不同外衣。任务始终是在一个更大的数学群中找到一个隐藏的结构模式——一个子群。Shor 算法为一大类群提供了解决此问题的通用量子方法。这个想法如此强大和抽象,以至于研究人员甚至设计出方法将其应用于更奇特的数学领域,例如利用椭圆曲线上的点来创造一种新颖的量子因数分解方法,这是经典与量子思想的美妙融合。

重新定义计算:一个新前沿

也许 Shor 算法最深远的影响不在于密码学,而在于我们对“计算”本身的定义。几十年来,计算机科学建立在一个被称为​​强丘奇-图灵论题​​的基本信念之上。简单来说,该论题指出,任何“合理”的计算模型都可以由一台标准的经典计算机模拟,而不会有天文数字级的速度减慢。这意味着,就有效解决问题的能力而言,所有计算机在某种意义上是等价的。一个对某台计算机来说是困难的问题,对所有计算机来说都是困难的。

Shor 算法是证明该论题可能错误的主要证据。

量子计算机不仅仅是一台更快的经典计算机。它似乎是一种根本不同类型的机器,它遵循一种不同的关于“可有效计算”的逻辑。通过在多项式时间内解决因数分解——一个被认为对经典计算机不可能完成的壮举——它提供了一个具体例子,说明一个问题对于量子计算机来说是“容易的”,但对于经典计算机来说是“困难的”。这表明,量子计算机可有效解决的问题类别 ​​BQP​​ 可能严格大于经典计算机的 ​​P​​ 类。

必须强调的是,这并不意味着量子计算机可以解决所有困难问题。例如,因数分解属于 ​​NP​​ 类,但它不被认为是 ​​NP完全​​问题(NP 中“最难”的问题之一)。因此,Shor 算法的存在并不意味着量子计算机可以解决所有 NP 问题,这是一个常见的误解。尽管如此,它为一种新的计算现实打开了大门,迫使我们去问:还有哪些目前被认为无法解决的问题,可能会在这种新的量子范式下变得易于处理?

因此,Shor 算法远不止是一个聪明的技巧。它是 20 世纪科学的一个里程碑。它证明了将物理学原理应用于数学深层结构的“不合理的有效性”。它揭示了隐藏的联系,打破了旧有的假设,并指向了信息与现实本身的新前沿。它能破解的锁令人印象深刻,但它所开启的理解之门才是其真正的遗产。