Shorのアルゴリズムを用いた素因数分解のメモ
1.はじめに
Shor のアルゴリズムは,RSA 暗号や楕円曲線暗号などといった離散対数問題に基づいている暗号を多項式時間で解読できる量子アルゴリズムとしてよく知られています.この記事では,Shor のアルゴリズムを用いた素因数分解について解説します[1].
2.量子位数発見
具体的な方法は後で述べますが,素因数分解の問題は位数を求める問題に変換できます[2].そして,Shor のアルゴリズムでは量子コンピュータを使って位数を計算します.
2.1.位数とは
を満たす最小の正の整数
2.2.アルゴリズム
まず,次のような変換
このとき,
と定義される量子状態
そこで,次のような性質を利用します.
この式を示すためには
が成り立つことを用います[4].
この性質から,
2.3.冪剰余演算の構成方法
-
のような加算回路を作る.\ket{a+b} -
のような制御-剰余加算回路を作る.\ket{(a+b) \bmod{N}} -
のような制御-剰余乗算回路を作る.\ket{ax \bmod{N}} -
のような制御-冪剰余回路を作る.\ket{a^n x \bmod{N}}
個人的にわかり易い構成方法の例を以下に挙げておきます.
- V. Vedral, A. Barenco and A. Ekert, "Quantum Networks for Elementary Arithmetic Operations", arXiv:quant-ph/9511018, 1995.
- S. Beauregard, "Circuit for Shor's algorithm using 2n+3 qubits", arXiv:quant-ph/0205095, 2003.
"Quantum Networks for Elementary Arithmetic Operations" は古典的な回路を移植したようなものです.他の方の記事ですが,量子アルゴリズムの基本:算術演算の確認(べき剰余)で丁寧に解説されています.
"Circuit for Shor's algorithm using 2n+3 qubits" は QFT ベースのもので,量子位相推定の逆量子フーリエ変換を半古典的にすることで量子ビットの数を削減しています.
3.素因数分解
さきほどの量子位数発見を用いて,合成数
3.1.アルゴリズム
-
をランダムに選びます.x \in \{2, 3, \dots, N-1\} -
を計算します.\gcd(x,N) なら,\gcd(x, N) \ne 1 を出力して終了します.\gcd(x, N) -
となる位数x^r \equiv 1 \pmod{N} を量子位数発見で求めます.r -
が偶数なら,r を確認し,x^{r/2} + 1 \not\equiv 0 \pmod{N} を因数として出力して終了します.失敗したら,ステップ 1 に戻ります.\gcd(x^{r/2} \pm 1, N)
3.1.1.ステップ 1, 2 について
3.1.2.ステップ 3, 4 について
位数
が成り立ちます.また,位数の定義より,
さらに,
ちなみに,位数
3.2.計算量
既存の古典コンピュータの素因数分解アルゴリズムでは,一般数体篩法が最速です.一般数体篩法の計算量は
このことから,既存の古典アルゴリズムと比べて,Shor のアルゴリズムは非常に効率的だということがわかります.
3.3.必要な量子ビット数と実行時間の概算
Shor のアルゴリズムを用いた 2048 ビットの RSA 暗号の解読にかかる時間については,様々な研究によって概算されています.文献によって仮定や実装方法が異なるので,目についたものを一通り載せておきます[7].
量子ビット数:856 万個,28.63 時間
『米国科学・工学・医学アカデミーによる量子コンピュータの進歩と展望』(原著者:米国科学・工学・医学アカデミー, 訳者:西森秀稔)に載っていた数値です.
量子ビット数:2000 万個,7.44 時間
量子ビット数:1 億 7000 万個,1 日
量子ビット数:2 億 3000 万個,3.7 日
量子ビット数:10 億個,1.1 日
量子ビット数:6 億 2000 万個,10 日
量子ビット数:65 億個,410 日
量子ビット数:13436 個,177 日
-
勉強中の学生が書いた内容なので,間違っているかもしれません. ↩︎
-
これは Shor が見つけたということではなくて,以前から知られていたことです. ↩︎
-
より,\left(e^{-2 \pi i sk/r}\right)^r=1 は複素数平面上における正e^{-2 \pi i sk/r} 角形の頂点になります.そのため,この式は正r 角形の重心ということになり,対称性からr が出てきます.もし,0 でなかったら,重心が中心からズレてしまいます.式の形は少し異なりますが,1 の n 乗根の導出と複素数平面 と同じ話です. ↩︎0 -
あくまでも,これは因数を求めるアルゴリズムで,素因数分解をするアルゴリズムではありません.RSA 暗号で使われるような
という形なら,因数を求めることと素因数分解をすることは同等ですが,N=pq のような形だと素数がN=pqr 個求まるだけです. ↩︎1 -
位数
はr が成り立つ最小の正の整数なので,x^r \equiv 1 \pmod{N} よりも小さいr では成り立ちません. ↩︎r/2 -
実装方法によっては解いている問題が変わっています.例えば,"How to factor 2048 bit RSA integers in 8 hours using 20 million noisy qubits" は素因数分解ではなく,より小さな離散対数問題にすることで効率化を達成しています.そのため,Shor のアルゴリズムとしてカウントしていいかは怪しいです. ↩︎
Discussion