相対エントロピーから情報と物理を組み立てる 第6部 第3章 §6.3.6 ★★ 周期 r の列の離散 Fourier 変換は L/r の倍数に立つ。RSA の復号は、因数分解を経ずに暗号文の位数からもできる
周期の列の離散 Fourier 変換
信号処理の授業では、長さ L の列 fx(x=0,…,L−1)の離散 Fourier 変換を f^k=∑xfxe−2πikx/L と書き、周期 r の列で r が L を割り切るなら f^k は k が L/r の倍数のところにだけ値を持つことを習う。fx+r=fx から f^k=e−2πikr/Lf^k が出て、kr/L が整数でない k では f^k=0 になるからである。r が L を割り切らないときは、k≈Ls/r の近くに幅を持った山が立つ(スペクトルの漏れ)。
量子 Fourier 変換は、この変換を状態の振幅に当てたもので、式 (6.3.8) の山はスペクトルの漏れを含めて古典の離散 Fourier 変換の山と同じ形をしている。違いは2つある。古典の高速 Fourier 変換は長さ L=2t の列全部を入力に取るので O(LlogL)=O(t2t) の手間がかかり、出力として L 個の係数全部を返す。量子 Fourier 変換は O(t2) 個のゲートで済むが、出力として返すのは ∣f^k∣2 に比例する確率で選ばれた1つの k だけである。周期を求める問題では山の位置1つで足りるので、この「1つしか返さない」制約が問題にならない。
RSA 暗号
暗号の授業での RSA は次の形である。素数 p、q を選び N=pq、ϕ(N)=(p−1)(q−1) とし、gcd(e,ϕ(N))=1 の e と、ed≡1(modϕ(N)) の d を作る。(N,e) を公開し、平文 x を c=xemodN で暗号化する。Euler の定理 xϕ(N)≡1(gcd(x,N)=1)から cd=xed=x1+kϕ(N)≡x で復号できる。d を求めるには ϕ(N)、したがって p、q を知る必要があり、これが「因数分解が難しければ安全」の根拠である。
Shor のアルゴリズムで N を因数分解すれば ϕ(N) と d が求まる。この章の言葉では、もっと直接の破り方もある。暗号文 c の位数 r=ordN(c) を位数発見の回路で求めたとする。x の位数 rx は ϕ(N) を割り切り、e は ϕ(N) と互いに素なので gcd(e,rx)=1 で、c=xe の位数は rx に等しい。したがって d′:=e−1modr を取ると
cd′=xed′=x1+kr≡x(modN)(6.3.16)
で、因数分解を経ずに平文が戻る。RSA の安全性は「N を法とした掛け算の位数が求められない」ことに依っていて、位数が求められれば、この前提は成り立たなくなる。
例題 6.3.6 N=55 の RSA を位数で破る ★★
オリジナルp=5、q=11、e=3 の RSA を考える。
- (1) ϕ(N) と d を求め、平文 x=7 の暗号文 c を求めよ。
- (2) c の位数 r を求め、d′=e−1modr と cd′mod55 を計算して平文が戻ることを確かめよ。
- (3) 長さ 24 の列 fx=1(x が6の倍数)、0(それ以外)の離散 Fourier 変換が0でない k を求めよ。
解答
(1) N=55、ϕ(55)=4⋅10=40 で、3⋅27=81=2⋅40+1 なので d=27 である。c=73=343=6⋅55+13 なので c=13 である。1327≡7 で正しく復号できる。
(2) 13 の冪を 55 で割った余りを追うと、1320≡1 が最初で r=20 である(7 の位数も 20 で、本文の主張どおり一致する)。3⋅7=21≡1(mod20) なので d′=7 で、137mod55=7 となり、d=27 を知らずに平文 7 が戻る。d′=7 と d=27 は 20 を法として等しく、d は ϕ(N)=40 を法として決まり、d′ はその約数 20 を法として決まる。
(3) 周期 6 が長さ 24 を割り切るので、f^k は 24/6=4 の倍数 k=0,4,8,12,16,20 にだけ値を持ち、その値はどれも 4(6の倍数の個数)である。
AI(Claude)が書いた教材を、木下が勉強しながら公開しています。式と数値は検算していますが、誤りが残っているかもしれません。誤りのご指摘・削除のご依頼をいただければ直します。 連絡先:support@tecktom.com