STAGE 7
ショアの因数分解
暗号を破る周期発見
🎯 ミッション
因数分解が「余りのくり返しの周期を探す問題」に化けることを、15=3×5 で自分の手で確かめよう。そして周期を干渉で読み取る仕組み――なぜグローバーと違って指数加速になるのか――を説明できれば合格。
未達成

ねこ博士
今日は、量子コンピュータがいちばん世界を騒がせた理由に踏み込もう。まず問題から。2つの素数を掛け算するのと、掛け算の答えから元の2つの素数を当てるのと、どちらが大変かな。

うさ美
当てる方が圧倒的に大変です。61×53=3233 は筆算ですぐですが、「3233を素因数分解せよ」と言われたら、2、3、5、7……と割り切れる数を探して回ることになります。
桁が増えたら手に負えません。100桁の数だと、割る候補が天文学的な数になります。
桁が増えたら手に負えません。100桁の数だと、割る候補が天文学的な数になります。

ねこ博士
その「片道は簡単、逆は困難」という性質の上に、いまのインターネットの安全が乗っている。RSA暗号という仕組みだ。ざっくり言えば、2つの大きな素数を掛けた数を公開して鍵にする。暗号を解くには元の2つの素数が要るけれど、それは掛け算の答えからは求められない――そういう賭けだね。
いま使われている鍵は2048ビット、10進数でおよそ617桁だ。世界中のコンピュータを総動員しても、素因数分解には宇宙の年齢を何度も超える時間がかかると見積もられている。
いま使われている鍵は2048ビット、10進数でおよそ617桁だ。世界中のコンピュータを総動員しても、素因数分解には宇宙の年齢を何度も超える時間がかかると見積もられている。

うさ美
それを量子コンピュータが破る、という話ですね。
でも、前のステージで学んだグローバーの方法だと、割る数を総当たりで探しても2次加速しかしません。617桁の数の候補を√にしても、まだ手に負えないはずです。まったく別の作戦があるということですか。
でも、前のステージで学んだグローバーの方法だと、割る数を総当たりで探しても2次加速しかしません。617桁の数の候補を√にしても、まだ手に負えないはずです。まったく別の作戦があるということですか。

ねこ博士
まったく別の作戦だ。1994年、ピーター・ショアが見つけたその作戦の第一歩は、意外にも量子力学とは無関係なんだ。数学者たちが昔から知っていた事実で、こういうもの。
「素因数分解は、あるくり返しの周期を求める問題に、書き換えることができる」
「素因数分解は、あるくり返しの周期を求める問題に、書き換えることができる」

うさ美
周期……ですか。素因数分解のどこにくり返しが出てくるんでしょう。

ねこ博士
手を動かすのがいちばんだ。因数分解したい数を 15 にしよう。答えは知っているけれど、手順を確かめるためだ。
まず、15と共通の約数を持たない数を適当に選ぶ。7 にしよう。そして、7を1回、2回、3回……と掛けていって、そのたびに15で割った余りを書き出してごらん。
まず、15と共通の約数を持たない数を適当に選ぶ。7 にしよう。そして、7を1回、2回、3回……と掛けていって、そのたびに15で割った余りを書き出してごらん。

うさ美
やってみます。
7を1回 → 7、15で割った余りは7。
7を2回 → 49、15で割ると3余り4なので4。
7を3回 → 343、15で割ると22余り13なので13。
7を4回 → 2401、15で割ると160余り1なので1。
7を5回 → 余りが1のところに7を掛けるので、また7。
……あ、戻ってきました。7, 4, 13, 1, 7, 4, 13, 1, … と、4個ごとにくり返します。
7を1回 → 7、15で割った余りは7。
7を2回 → 49、15で割ると3余り4なので4。
7を3回 → 343、15で割ると22余り13なので13。
7を4回 → 2401、15で割ると160余り1なので1。
7を5回 → 余りが1のところに7を掛けるので、また7。
……あ、戻ってきました。7, 4, 13, 1, 7, 4, 13, 1, … と、4個ごとにくり返します。

ねこ博士
それが周期だ。ここでは4だね。余りは有限個しかないから、掛け続ければ必ずどこかで同じ値に戻ってきて、その先はずっとくり返しになる。
そして、ここからが数学の魔法だよ。周期が偶数のとき、その半分の回数――今回なら2回――掛けたところを見る。7を2回掛けた余りは4だったね。この4に1を足した数と、1を引いた数を作る。
そして、ここからが数学の魔法だよ。周期が偶数のとき、その半分の回数――今回なら2回――掛けたところを見る。7を2回掛けた余りは4だったね。この4に1を足した数と、1を引いた数を作る。

うさ美
4+1=5 と、4−1=3 です。
……3と5。15=3×5。出てしまいました! なぜですか?
……3と5。15=3×5。出てしまいました! なぜですか?

ねこ博士
種明かしをしよう。周期が4だったということは、7を4回掛けた余りが1ということだね。つまり「7を4回掛けた数 − 1」は15でちょうど割り切れる。
ここで、中学校で習う因数分解を使う。7を4回掛けた数を、7を2回掛けた数の2乗と見れば、
(7を2回掛けた数)² − 1 =(7を2回掛けた数 − 1)×(7を2回掛けた数 + 1)
この左辺が15で割り切れるのだから、右辺も15で割り切れる。ところが右辺は2つの数の掛け算だ。15=3×5 の3と5が、この2つの数に分かれて入っている可能性が高い。
ここで、中学校で習う因数分解を使う。7を4回掛けた数を、7を2回掛けた数の2乗と見れば、
(7を2回掛けた数)² − 1 =(7を2回掛けた数 − 1)×(7を2回掛けた数 + 1)
この左辺が15で割り切れるのだから、右辺も15で割り切れる。ところが右辺は2つの数の掛け算だ。15=3×5 の3と5が、この2つの数に分かれて入っている可能性が高い。

うさ美
分かりました。実際に確かめます。7を2回掛けた数は49。49−1=48、49+1=50。
48と15の最大公約数は3。50と15の最大公約数は5。ちゃんと出ます!
(余りの4を使っても同じで、4−1=3、4+1=5。余りを取っても15との最大公約数は変わらないからですね。)
周期さえ分かれば、そこから先は簡単ということですか。でも、桁が何百もある数どうしの最大公約数を求めるのは、大変ではないんですか?
48と15の最大公約数は3。50と15の最大公約数は5。ちゃんと出ます!
(余りの4を使っても同じで、4−1=3、4+1=5。余りを取っても15との最大公約数は変わらないからですね。)
周期さえ分かれば、そこから先は簡単ということですか。でも、桁が何百もある数どうしの最大公約数を求めるのは、大変ではないんですか?

ねこ博士
そこは心配いらない。最大公約数にはユークリッドの互除法という2300年前からの高速な求め方があって、ふつうのコンピュータでも何百桁だろうと一瞬で計算できるんだ。では手順をまとめよう。
①因数分解したい数 N と共通の約数を持たない数 a を、適当に選ぶ
②a を1回、2回、3回…と掛けた余りの列の周期 r を求める
③r が偶数なら、a を r の半分だけ掛けた余りの、±1 と N の最大公約数を取る
これで N の因数が出る。運が悪いと(r が奇数だったり、うまくいかない場合が)あるが、a を選び直せばよくて、たいてい数回で成功する。
――さて、この手順の中で、ふつうのコンピュータにとって絶望的に重いのはどこかな。
①因数分解したい数 N と共通の約数を持たない数 a を、適当に選ぶ
②a を1回、2回、3回…と掛けた余りの列の周期 r を求める
③r が偶数なら、a を r の半分だけ掛けた余りの、±1 と N の最大公約数を取る
これで N の因数が出る。運が悪いと(r が奇数だったり、うまくいかない場合が)あるが、a を選び直せばよくて、たいてい数回で成功する。
――さて、この手順の中で、ふつうのコンピュータにとって絶望的に重いのはどこかな。

うさ美
②の周期を求めるところです。15なら4回掛けただけで戻ってきましたが、Nが617桁もあったら、周期がとんでもなく長くなりますよね。余りは N 通りくらいあるので、周期も最大でそのくらい。順に掛けていって「1に戻る」のを待つのでは、宇宙の年齢でも終わりません。

ねこ博士
そこが唯一の関門で、そこだけを量子コンピュータが担当する。ショアのアルゴリズムとは、正確には「周期を高速に見つける方法」なんだ。前後の手順はふつうのコンピュータの仕事だよ。
では、量子コンピュータはどうやって周期を見つけるのか。第一歩は、もう見慣れた形だ。
では、量子コンピュータはどうやって周期を見つけるのか。第一歩は、もう見慣れた形だ。

うさ美
1個目の量子ビットの束に H を全部当てて、「何回掛けるか」の候補 0、1、2、3、… をぜんぶ重ね合わせる。そして2個目の束に、その回数だけ掛けた余りを書き込む。もつれができて、「回数」と「余り」の対応表が丸ごと表に載る――ここまでは、いつもの形ですね。
でも、ここで測っても意味がないはずです。回数と余りの組が1つ出てくるだけで、周期は分かりません。
でも、ここで測っても意味がないはずです。回数と余りの組が1つ出てくるだけで、周期は分かりません。

ねこ博士
その通り。だから最後にひと工夫が要る。ここでも答えは同じだ――干渉だよ。
周期を読み取る干渉のさせ方を、身近なものでたとえよう。ブランコを押すときのことを考えてごらん。ブランコにはそれ自身の揺れる速さがある。それにぴったり合ったタイミングで押し続ければ、押した力が積み重なってどんどん大きく揺れる。合っていないタイミングで押すと、押す力どうしが打ち消し合って、大きくならない。
周期を読み取る干渉のさせ方を、身近なものでたとえよう。ブランコを押すときのことを考えてごらん。ブランコにはそれ自身の揺れる速さがある。それにぴったり合ったタイミングで押し続ければ、押した力が積み重なってどんどん大きく揺れる。合っていないタイミングで押すと、押す力どうしが打ち消し合って、大きくならない。

うさ美
積み重なるか、打ち消し合うか……強め合いと打ち消し合いそのものですね。
ということは、こういうことですか。表には「4回ごとにくり返す」という模様が入っている。そこに、いろんな速さで回る矢印を掛けて全部足してみる。くり返しの周期に合った速さのときだけ、矢印がそろって強め合い、それ以外の速さでは打ち消し合ってゼロになる。だから測れば、合った速さのところが出てくる。
ということは、こういうことですか。表には「4回ごとにくり返す」という模様が入っている。そこに、いろんな速さで回る矢印を掛けて全部足してみる。くり返しの周期に合った速さのときだけ、矢印がそろって強め合い、それ以外の速さでは打ち消し合ってゼロになる。だから測れば、合った速さのところが出てくる。

ねこ博士
自分で組み立てたね。その操作には名前があって、量子フーリエ変換という。「くり返し模様を、その周期の情報に変える装置」だ。アダマールを何本もの量子ビットにまたがって仕掛けたようなもので、大量の回転を一気にやってのける。
ここが決定的なところだよ。ふつうのコンピュータで同じことをすると、候補の数だけ計算が要る。量子コンピュータでは、量子ビットの本数の2乗くらいの手間で済んでしまう。候補の個数ではなく、桁数の2乗だ。この差が、指数の壁を越えさせる。
ここが決定的なところだよ。ふつうのコンピュータで同じことをすると、候補の数だけ計算が要る。量子コンピュータでは、量子ビットの本数の2乗くらいの手間で済んでしまう。候補の個数ではなく、桁数の2乗だ。この差が、指数の壁を越えさせる。
15と共通の約数を持たない数
選んだ数を1回、2回…と掛けて15で割った余りを並べたもの。必ずどこかで1に戻り、そこから同じ列がくり返す。1に戻るまでの長さが周期。周期が偶数なら、その半分の位置の余りに ±1 して15との最大公約数を取ると、3と5が出てくる(数の選び方によっては周期が奇数だったり、うまく分かれないことがある――そのときは別の数を選び直す)。因数分解の難しさは、まるごと「この周期を見つけること」に移し替えられている。
試す回転の速さ
試している速さ 0
足し合わせた矢印の長さ 1.00
この速さが出る確率 25%
左は「4回ごとにくり返す」模様の入った表から取り出した矢印たち。それぞれに、試している速さで回る矢印を掛けて(=向きをずらして)、右の作業台ですべて足し合わせる。速さが周期と噛み合うとき(この例では0、4、8、12)だけ、矢印がそろって長い合計になる。それ以外の速さでは矢印が円をぐるりと囲むように散らばり、足すとほぼゼロ――打ち消し合いだ。測定すると、この「そろう速さ」のどれかが高い確率で出てくる。そこから周期4が逆算できる。

うさ美
グローバーとの違いがはっきりしました。グローバーは構造のない問題を相手にしていたから、当たりの矢印を少しずつしか育てられなくて、2次加速が限界だった。
ショアは違う。相手の問題に「くり返し」という構造がもともとあって、干渉はその構造と共鳴するように仕掛けてある。だから一気に決まるんですね。
ショアは違う。相手の問題に「くり返し」という構造がもともとあって、干渉はその構造と共鳴するように仕掛けてある。だから一気に決まるんですね。

ねこ博士
それがこの旅を通じての、いちばん大事な教訓だよ。量子コンピュータが指数的に速くなるのは、問題の中に隠れた構造があって、その構造と共鳴する干渉を設計できたときだけ。どんな問題にも効く万能薬ではない。
いま、そういう指数加速が知られている問題は、実はそれほど多くない。因数分解や離散対数といった数論の問題、そして――こちらが本命かもしれないが――分子や材料の量子的なふるまいのシミュレーションだ。量子の世界を量子で真似るのだから、相性がいいのは当然だね。新しい薬や、より良い電池・触媒の設計に効くと期待されている。
いま、そういう指数加速が知られている問題は、実はそれほど多くない。因数分解や離散対数といった数論の問題、そして――こちらが本命かもしれないが――分子や材料の量子的なふるまいのシミュレーションだ。量子の世界を量子で真似るのだから、相性がいいのは当然だね。新しい薬や、より良い電池・触媒の設計に効くと期待されている。

うさ美
現実の話も聞かせてください。ショアのアルゴリズムは1994年に発表されたんですよね。もう30年以上たっています。いまのRSA暗号は、もう破られているんですか。

ねこ博士
まだ破られていない。実機でショアのアルゴリズムが本当に実行できたのは、15や21といったおもちゃのような数までだ。距離はまだ遠い。
2048ビットのRSAを破るには、誤りなく動く量子ビット――物理の部品を束ねて誤りを消した「正味」の量子ビットで、論理量子ビットと呼ぶ――が数千個必要だと見積もられている。ゲートを掛ける回数で言えば、何十億回という規模だ。ところが、いまの実機にあるのは誤りだらけの物理量子ビットが数百から千個ほど。しかも、論理量子ビット1個を作るのに、物理量子ビットが千個から数千個要る。掛け合わせると、必要な物理量子ビットは百万個規模だ。
なぜそんなに要るのか――その答えが、この旅の最後のステージになる。
2048ビットのRSAを破るには、誤りなく動く量子ビット――物理の部品を束ねて誤りを消した「正味」の量子ビットで、論理量子ビットと呼ぶ――が数千個必要だと見積もられている。ゲートを掛ける回数で言えば、何十億回という規模だ。ところが、いまの実機にあるのは誤りだらけの物理量子ビットが数百から千個ほど。しかも、論理量子ビット1個を作るのに、物理量子ビットが千個から数千個要る。掛け合わせると、必要な物理量子ビットは百万個規模だ。
なぜそんなに要るのか――その答えが、この旅の最後のステージになる。

うさ美
まだ先だと聞いて安心しました。……いえ、待ってください。安心してはいけない気がします。いま暗号化されて送られている通信を、誰かが解読できないまま保存しておいて、量子コンピュータができてから解読することができますよね。何十年も秘密にしておきたい情報は、いま盗まれた時点でもう危ないのでは。

ねこ博士
よく気づいたね。その脅威には名前がついていて、「いま集めて、あとで解読する」と呼ばれている。だから世界は、量子コンピュータの完成を待たずに動いている。
解決策は、量子コンピュータでも速く解けないと考えられている別の数学問題に、暗号を乗せ替えることだ。これを耐量子計算機暗号という。アメリカの標準化機関NISTが公募と審査を重ねて、2024年に最初の標準規格を正式に発表した。格子(たくさんの点が規則正しく並んだ構造)にまつわる問題などが土台になっている。乗せ替えはもう始まっているんだ。
解決策は、量子コンピュータでも速く解けないと考えられている別の数学問題に、暗号を乗せ替えることだ。これを耐量子計算機暗号という。アメリカの標準化機関NISTが公募と審査を重ねて、2024年に最初の標準規格を正式に発表した。格子(たくさんの点が規則正しく並んだ構造)にまつわる問題などが土台になっている。乗せ替えはもう始まっているんだ。
【ショアのアルゴリズム ― 因数分解を周期探しに変える】
・RSA暗号は「掛け算は簡単、素因数分解は困難」に安全性を預けている。鍵は2048ビット(約617桁)
・書き換え:N と共通の約数を持たない a を選び、a を1回、2回…掛けた余りの列の周期 r を求める。
r が偶数なら「a を r の半分だけ掛けた余り ±1」と N の最大公約数が N の因数 ・例(N=15, a=7):余りは 7, 4, 13, 1, … で周期 r=4。
4−1=3、4+1=5 → 15=3×5 ・重い部分は周期を求めるところだけ。ここを量子コンピュータが担当し、前後はふつうのコンピュータが処理する ・周期の読み取り=量子フーリエ変換:くり返し模様に色々な速さの回転を掛けて足すと、周期と噛み合う速さでだけ強め合う(ブランコの共鳴と同じ) ・指数加速になる理由:問題にもともと「くり返し」という構造があり、その構造と共鳴する干渉を設計できたから。構造のないグローバー型は2次加速が限界 ・現状:実機で解けたのは15や21程度。2048ビットRSAには論理量子ビット数千個(=物理量子ビット百万個規模)が必要で、まだ遠い。
ただし「いま集めて、あとで解読する」脅威があるため、耐量子計算機暗号への移行が進行中(NISTが2024年に最初の標準を発表)
r が偶数なら「a を r の半分だけ掛けた余り ±1」と N の最大公約数が N の因数 ・例(N=15, a=7):余りは 7, 4, 13, 1, … で周期 r=4。
4−1=3、4+1=5 → 15=3×5 ・重い部分は周期を求めるところだけ。ここを量子コンピュータが担当し、前後はふつうのコンピュータが処理する ・周期の読み取り=量子フーリエ変換:くり返し模様に色々な速さの回転を掛けて足すと、周期と噛み合う速さでだけ強め合う(ブランコの共鳴と同じ) ・指数加速になる理由:問題にもともと「くり返し」という構造があり、その構造と共鳴する干渉を設計できたから。構造のないグローバー型は2次加速が限界 ・現状:実機で解けたのは15や21程度。2048ビットRSAには論理量子ビット数千個(=物理量子ビット百万個規模)が必要で、まだ遠い。
ただし「いま集めて、あとで解読する」脅威があるため、耐量子計算機暗号への移行が進行中(NISTが2024年に最初の標準を発表)
確認クイズ
Q1. ショアのアルゴリズムで、量子コンピュータが担当している部分は?
正解! 因数分解を周期探しに書き換える部分も、周期から因数を取り出す最大公約数の計算も、ふつうのコンピュータで一瞬でできる。手に負えないのは周期探しだけで、そこだけを干渉で一気に片づける。
Q2. ショアが指数加速を実現できて、グローバーが2次加速どまりなのはなぜ?
正解! 量子コンピュータの速さは、いつも「いらない候補を打ち消し、欲しい候補を強め合わせる設計」から来る。その設計が強力に効くのは、問題の中に利用できる構造があるとき。万能の加速装置ではない、というのがこの旅の一貫した結論だ。
Q3. 「いま集めて、あとで解読する」という脅威への現実的な対策は?
正解! 鍵長を2倍にする対策が効くのはグローバー型の2次加速に対してだけで、ショアの指数加速には歯が立たない(鍵を長くしても同じように破られる)。だから問題そのものを取り替える必要がある。NISTは2024年に最初の耐量子計算機暗号の標準を発表し、移行はすでに始まっている。