ショアのアルゴリズム
From Wikipedia, the free encyclopedia
ショアのアルゴリズム(英: Shor's algorithm)は、1994年にピーター・ショアによって提案された[1][2][3][4]、量子コンピュータ上で整数の素因数分解を多項式時間で実行できる量子アルゴリズムである。素因数分解は古典コンピュータでは効率的な解法が知られておらず[5]、本アルゴリズムは量子計算の優位性を示す代表例とされる。
理論上は古典コンピュータによるシミュレーションも可能であるが、必要な計算資源が指数的に増大するため、大規模な素因数分解を効率的に解くには量子コンピュータが不可欠と考えられており、この性質は素因数分解の困難さに依存する公開鍵暗号方式の安全性にも影響を及ぼしうることから、量子計算および暗号研究において重要な位置を占めている。
現在の量子コンピューターには、量子ノイズや、量子力学的干渉の破壊といった課題が存在する。しかし、それらの課題を克服し、ある程度の量子ビット数の量子コンピューターを、操作することができるようになったとすると、RSA暗号、ディフィー・ヘルマン鍵共有、楕円曲線ディフィー・ヘルマン鍵共有などの公開鍵暗号の解読ができてしまうと考えられている[6]。なぜなら、例えばRSA暗号は、大きな素数同士の合成数を機械で素因数分解するのは、膨大な時間がかかり困難であるという推定のもとで基づいているからである。
アルゴリズムを少し変更することで離散対数問題(DLP, ElGamal暗号や楕円曲線暗号の安全性の根拠)も多項式時間で解くことができる。このアルゴリズムの基本的なアイデアを拡張したものが、可換隠れ部分群問題についての量子アルゴリズムである。現在は、これをさらに非可換隠れ部分群問題に拡張する研究が進展している。
アルゴリズム
ショアのアルゴリズムは、量子コンピュータが離散フーリエ変換を高速に実行できることを用いている。また、アルゴリズム全体は確率的 (BQP) であるので、正しい答えが得られるまで、何度も試行をする必要がある。
- 素因数分解したいNと互いに素な整数aを用意する。
- Nの二進数表記の桁数をLとし、位相推定の精度tは2L+1とする。
- 第一レジスタにアダマールゲート操作を施し、第二レジスタに制御ユニタリゲートUn,aを作用させる。ここで、Un,aとは以下の計算過程集合である。Un,a|α⟩=|αa mod N⟩と変換するようなaとNを引数とするユニタリ演算子Un,aを考え、その固有値を取り出す。(量子位相推定)
- 適切な位数rが見つかったら、p=gcd(ar/2+1,N),q=gcd(ar/2-1,N)がNの素因数である[7]。

位数を求める具体例
例えば、N = 15, a = 7 とする。
- 70 = 1 (mod 15)
- 71 = 7 (mod 15)
- 72 = 4 (mod 15)
- 73 = 13 (mod 15)
- 74 = 1 (mod 15)
- 75 = 7 (mod 15)
- 76 = 4 (mod 15)
- 77 = 13 (mod 15)
- 78 = 1 (mod 15)
- 79 = 7 (mod 15)
- ⋮
1,7,4,13,1,7,4,13,1,7,…という周期 4 の数列が生成される。
よって、周期 r = min{x > 0|7x = 1 (mod 15)} = 4
p = gcd(ar/2+1,N) = gcd(74/2+1,15) = gcd( 50, 15) = 5
q = gcd(ar/2-1,N) = gcd(74/2-1,15) = gcd( 48, 15) = 3
よって、最終的に得られる「5, 3」が素因数である。