tecktom.com

授業で習った形との対応:離散 Fourier 変換と RSA 暗号

2026年10月15日4分で読めますAI生成教科書『虎の巻』第6部 第3章 Shor のアルゴリズム
目次
  1. 周期の列の離散 Fourier 変換
  2. RSA 暗号
  3. 木下の層

AI 生成・木下が未勉強

相対エントロピーから情報と物理を組み立てる 第6部 第3章 §6.3.6 ★★ 周期 rr の列の離散 Fourier 変換は L/rL/r の倍数に立つ。RSA の復号は、因数分解を経ずに暗号文の位数からもできる

周期の列の離散 Fourier 変換

信号処理の授業では、長さ LL の列 fxf_x(x=0,…,L−1x=0,\dots,L-1)の離散 Fourier 変換を f^k=∑xfxe−2πikx/L\hat f_k=\sum_xf_x\mathrm{e}^{-2\pi\mathrm{i} kx/L} と書き、周期 rr の列で rr が LL を割り切るなら f^k\hat f_k は kk が L/rL/r の倍数のところにだけ値を持つことを習う。fx+r=fxf_{x+r}=f_x から f^k=e−2πikr/Lf^k\hat f_k=\mathrm{e}^{-2\pi\mathrm{i} kr/L}\hat f_k が出て、kr/Lkr/L が整数でない kk では f^k=0\hat f_k=0 になるからである。rr が LL を割り切らないときは、k≈Ls/rk\approx Ls/r の近くに幅を持った山が立つ(スペクトルの漏れ)。

量子 Fourier 変換は、この変換を状態の振幅に当てたもので、式 (6.3.8) の山はスペクトルの漏れを含めて古典の離散 Fourier 変換の山と同じ形をしている。違いは2つある。古典の高速 Fourier 変換は長さ L=2tL=2^t の列全部を入力に取るので O(Llog⁡L)=O(t2t)\mathcal{O}(L\log L)=\mathcal{O}(t2^t) の手間がかかり、出力として LL 個の係数全部を返す。量子 Fourier 変換は O(t2)\mathcal{O}(t^2) 個のゲートで済むが、出力として返すのは ∣f^k∣2\lvert \hat f_k\rvert ^2 に比例する確率で選ばれた1つの kk だけである。周期を求める問題では山の位置1つで足りるので、この「1つしか返さない」制約が問題にならない。

RSA 暗号

暗号の授業での RSA は次の形である。素数 pp、qq を選び N=pqN=pq、ϕ(N)=(p−1)(q−1)\phi(N)=(p-1)(q-1) とし、gcd⁡(e,ϕ(N))=1\gcd(e,\phi(N))=1 の ee と、ed≡1(modϕ(N))ed\equiv1\pmod{\phi(N)} の dd を作る。(N,e)(N,e) を公開し、平文 xx を c=xe mod Nc=x^e\bmod N で暗号化する。Euler の定理 xϕ(N)≡1x^{\phi(N)}\equiv1(gcd⁡(x,N)=1\gcd(x,N)=1)から cd=xed=x1+kϕ(N)≡xc^d=x^{ed}=x^{1+k\phi(N)}\equiv x で復号できる。dd を求めるには ϕ(N)\phi(N)、したがって pp、qq を知る必要があり、これが「因数分解が難しければ安全」の根拠である。

Shor のアルゴリズムで NN を因数分解すれば ϕ(N)\phi(N) と dd が求まる。この章の言葉では、もっと直接の破り方もある。暗号文 cc の位数 r=ord⁡N(c)r=\operatorname{ord}_N(c) を位数発見の回路で求めたとする。xx の位数 rxr_x は ϕ(N)\phi(N) を割り切り、ee は ϕ(N)\phi(N) と互いに素なので gcd⁡(e,rx)=1\gcd(e,r_x)=1 で、c=xec=x^e の位数は rxr_x に等しい。したがって d′≔e−1 mod rd'\coloneqq e^{-1}\bmod r を取ると

cd′=xed′=x1+kr≡x(modN)(6.3.16)c^{d'}=x^{ed'}=x^{1+kr}\equiv x\pmod N\tag{6.3.16}

で、因数分解を経ずに平文が戻る。RSA の安全性は「NN を法とした掛け算の位数が求められない」ことに依っていて、位数が求められれば、この前提は成り立たなくなる。

例題 6.3.6 N=55N=55 の RSA を位数で破る ★★

オリジナルp=5p=5、q=11q=11、e=3e=3 の RSA を考える。

  1. (1) ϕ(N)\phi(N) と dd を求め、平文 x=7x=7 の暗号文 cc を求めよ。
  2. (2) cc の位数 rr を求め、d′=e−1 mod rd'=e^{-1}\bmod r と cd′ mod 55c^{d'}\bmod55 を計算して平文が戻ることを確かめよ。
  3. (3) 長さ 2424 の列 fx=1f_x=1(xx が6の倍数)、00(それ以外)の離散 Fourier 変換が0でない kk を求めよ。
解答

(1) N=55N=55、ϕ(55)=4⋅10=40\phi(55)=4\cdot10=40 で、3⋅27=81=2⋅40+13\cdot27=81=2\cdot40+1 なので d=27d=27 である。c=73=343=6⋅55+13c=7^3=343=6\cdot55+13 なので c=13c=13 である。1327≡713^{27}\equiv7 で正しく復号できる。

(2) 1313 の冪を 5555 で割った余りを追うと、1320≡113^{20}\equiv1 が最初で r=20r=20 である(77 の位数も 2020 で、本文の主張どおり一致する)。3⋅7=21≡1(mod20)3\cdot7=21\equiv1\pmod{20} なので d′=7d'=7 で、137 mod 55=713^7\bmod55=7 となり、d=27d=27 を知らずに平文 77 が戻る。d′=7d'=7 と d=27d=27 は 2020 を法として等しく、dd は ϕ(N)=40\phi(N)=40 を法として決まり、d′d' はその約数 2020 を法として決まる。

(3) 周期 66 が長さ 2424 を割り切るので、f^k\hat f_k は 24/6=424/6=4 の倍数 k=0,4,8,12,16,20k=0,4,8,12,16,20 にだけ値を持ち、その値はどれも 44(6の倍数の個数)である。

木下の勉強ステータス

木下はまだこの記事を勉強していません。

AI(Claude)が書いた教材を、木下が勉強しながら公開しています。式と数値は検算していますが、誤りが残っているかもしれません。誤りのご指摘・削除のご依頼をいただければ直します。 連絡先:support@tecktom.com

← AI生成教科書『虎の巻』の記事一覧へ