🗝️ オラクルは比較しない
STAGE 1 ― 一致判定は回路になる ―
クリア 0 / 6
STAGE 1一致判定は回路になる
比較リストは要らない
🎯 ミッション
まず、このクエスト全体で解きたい問題(AESの鍵探索)と、その中で残る謎(オラクルの中身)をつかもう。そのうえで、「入力が101と一致するか」の判定が、候補を1個ずつ見比べなくても、ANDとNOTの固定回路1個でできる理由を説明できれば合格。
未達成
【この旅で解きたい問題 ― AESの鍵探索】 ・分かっているもの:データP と、正しい鍵Kで作った暗号文C。そして検算の条件「候補kでPを暗号化した結果がCと一致 ⇔ kが正解」 ・知りたいもの:鍵K(候補は2¹²⁸個。総当たりでは絶望的) ・作戦:グローバーのアルゴリズム(前作STAGE6)で約√N=2⁶⁴回に短縮する ・謎(このクエストの主役):当たりに目印を付ける「オラクル」の中身。あれは2¹²⁸個の候補を1個ずつ比較しているのか? ・道順:STAGE1〜4で、3ビットのおもちゃ(C=101との一致判定)を使って判定回路の作り方を練習 → STAGE5で本物のAES鍵探索に組み込む → STAGE6で正直なコスト勘定
ねこ博士
今回のクエストは、量子コンピュータはなぜ速いのかで通り過ぎた場所を、じっくり掘り返す。始める前に、解きたい問題を先にはっきり掲げておこう
相手はAES――インターネットの通信を守っている共通鍵暗号だ。詳しい仕組みはSTAGE5で扱うから、いまは「128ビットの鍵kをダイヤルにして、データPを暗号文にかき混ぜる機械」だと思えばいい。
攻撃者は、データPと、正しい鍵Kでかき混ぜた暗号文Cのペアを手に入れた。知りたいのは鍵Kそのもの。手がかりは「候補kでPをかき混ぜた結果がCと一致すれば、そのkが正解」という検算の条件だけ。候補は2¹²⁸個ある。
うさ美
「候補は多すぎるが、1個ずつの検算はできる」――前作でやったグローバーのアルゴリズムの出番ですね。当たりの候補の矢印だけをオラクルという箱で反転して目印を付け、「平均のまわりの折り返し」で目印を長さに変える。これを約√N回で、2¹²⁸個でも約2⁶⁴回まで減るのでした。
でも、そのオラクルがずっと謎なんです。箱が「当たりかどうか」を判定できるということは、箱の中で、正解と候補を1個ずつ見比べているとしか思えません。候補が2¹²⁸個あるなら、中では2¹²⁸回の比較が起きているのでは?
ねこ博士
その疑問に正面から答えるのが、このクエストの目的だよ。先に結論だけ言っておくと、比較はしていない。そして「比較していないのに判定できる」のは、量子の魔法ではなくて、ふつうの論理回路にもともと備わっている性質なんだ。
進み方も先に示しておこう。いきなり128ビットのAESは大きすぎる。だからSTAGE1〜4では「3ビットの値が C=101 と一致するか」というおもちゃの問題で判定回路――以降錠前と呼ぶことになる――の作り方を練習して、STAGE5で本物のAES鍵探索に組み込む。
うさ美
待ってください。そのおもちゃの問題、正解が101だと知っている状態で回路を作るんですよね。答えを最初から知っているなら、探索する必要がそもそもないのでは? 何を解決しているのか分からなくなりました。
ねこ博士
いいところで立ち止まった。答えはこうだ。これから作る回路は探す装置ではなく、検算する装置なんだ。
さっきの問題設定を思い出してほしい。攻撃者が最初から知っているのは、答え合わせの目標である暗号文C。知らないのは鍵K。本番の回路に刻み込まれるのはCのほうで、探している鍵は回路のどこにも書かれていない。鍵の候補は、検算係の手前でAESの計算にかけられて暗号文に変換されてから、Cと照合される――この組み立てはSTAGE5で見る。
つまり「Cとの一致判定」は、探索の答えではなく検算の道具だ。道具の作り方さえ分かれば、オラクルの謎はほとんど解ける。だから今日は量子の話もいったん忘れて、電気で動くただの回路から始めよう。
うさ美
論理回路なら論理回路の旅でやりました。0と1の信号に対して、ANDは「両方1のときだけ1」、ORは「どちらかが1なら1」、NOTは「0と1をひっくり返す」。この3種類を組み合わせれば、どんな計算でも作れるのでした。
ねこ博士
それで十分だ。ではおもちゃの問題を正確に決めよう。検算の目標はもう分かっていて、C=101 だとする。やりたいのは、入力されてくる3ビット――上の桁から y₂、y₁、y₀ と呼ぶ――が、この C と一致するかどうかの判定だ。一致していたら1(ランプ点灯)、違ったら0を出す。
きみなら、どう作る?
うさ美
一致する条件を書き出してみます。C=101 と一致するのは、y₂=1、y₁=0、y₀=1 が全部同時に成り立つとき。それだけですね。
「y₁=0」は「NOT y₁ が1」と言い換えられるので……3つの条件を全部ANDでつなげば、
f(y) = y₂ AND (NOT y₁) AND y₀
この式が1になるのは y=101 のときだけです。NOTが1個とANDが2個、部品3個でできてしまいました。
ねこ博士
そう、それで完成だ。ここで、いま作った回路の動きをよく観察してほしい。この回路は
「まず000と見比べる。違う。次に001と見比べる。違う。次に010……」
という動作をしていない。8個の候補のリストも、正解Cを書いたメモも、回路の中には存在しない。入ってきた3本の信号線の電圧が「1・0・1」という条件を満たすかどうかを、その場で、いっぺんに調べているだけだ。
うさ美
言われてみれば、比較のしようがないですね。比較というのは「正解を思い出して、候補と桁ごとに突き合わせる」手続きですが、この回路には思い出すべきメモがそもそもありません。
……あれ? でもそれなら、正解 C=101 の情報はどこへ行ったんですか。回路は現に101だけを言い当てられるのに。
ねこ博士
いちばん大事な問いだ。答えは――回路の形そのものだよ。さっき自分で決めたはずだ。「y₁=0 だから y₁ にNOTを付ける」と。つまりどの入力線にNOTを置くかという配線の選び方が、Cの中身をそのまま写し取っている。C=110 用の回路を作るなら、NOTの位置は y₀ に移る。
正解の情報は、データとしてしまってあるのではなく、設計図として配線に焼き付いている。だから判定のたびに読み出す必要がないんだ。
うさ美
錠前と同じですね。錠前は「登録済みの鍵の一覧表」を持っていて差し込まれた鍵と照合する――わけではなくて、内部のピンの高さが正しい鍵の刻みに合わせて作ってある。合う鍵が入れば回るし、合わなければ回らない。正解の情報は部品の形になっている。
私たちの回路も、101専用の錠前です。
ねこ博士
いいたとえだ。以降このクエストでは、一致判定回路のことを錠前とも呼ぶことにしよう。
錠前のたとえで、もうひとつ確認しておきたいことがある。錠前は、開けようとする鍵が1本でも100万本でも、作るのは1個でいい。判定の相手が何通りあるかは、錠前の部品数と関係がない。部品数を決めるのは鍵の刻みの数――ビット数のほうだ。
うさ美
計算してみます。3ビットの場合、候補は2×2×2で8通りありましたが、回路の部品はNOT1個+AND2個の3個でした。
これが128ビットなら、候補は2¹²⁸通り――天文学的な数です。でも回路のほうは、Cの0の桁にNOTを置いて、128本をANDでまとめるだけだから、部品はおおむね128個ぶん。候補の数2¹²⁸とは比べものにならないくらい小さい。
判定にかかる手間は、候補の数ではなくビット数に比例するんですね。
ねこ博士
その通り。これがこのステージの核心だよ。「2¹²⁸個の候補がある」ことと「一致判定に2¹²⁸の手間がかかる」ことは、まったくの別問題なんだ。1個の候補について一致を判定するだけなら、128ビットぶんの小さな固定回路で足りる。ふつうのコンピュータの総当たりが2¹²⁸回かかるのは、判定が重いからではなく、候補を1個ずつ順番に入れ直すからだ。
次のステージでは、この錠前をそっくり量子回路に移植する。
C=101 の錠前 f(y) = y₂ AND (NOT y₁) AND y₀ y₂=0 y₁=0 y₀=0 NOT AND 全部1なら1 不一致 この回路が候補リストと比較した回数:0回(比較という動作が存在しない)
いまの入力: 000 出力 f: 0
C=101 の一致判定回路(錠前)。入力の箱かボタンを押して y₂y₁y₀ を切り替えてみよう。8通り全部試しても、ランプが点くのは 101 のときだけ。回路の中に候補リストはなく、「y₂ がそのまま1、y₁ がNOTを通って1、y₀ がそのまま1」という条件を配線が直接調べている。正解Cの情報はNOTを置いた位置に焼き付いている。
【一致判定は固定回路になる】 ・設定:正しい値 C=101 は既知。入力 y₂y₁y₀ が C と一致するかを判定したい ・一致条件:y₂=1 かつ y₁=0 かつ y₀=1。よって f(y) = y₂ AND (NOT y₁) AND y₀ ・この回路は「000と比較、001と比較……」とは動作しない。候補リストも正解のメモも持たず、入ってきたビットが条件を満たすかを直接調べる ・正解の情報はNOTゲートを置く位置(=回路の形)に焼き付いている。錠前のピンが正しい鍵の刻みに合わせて作られているのと同じ ・部品数はビット数に比例する:3ビットなら部品3個、128ビットならおおむね128個ぶん。候補の数(2¹²⁸)とは無関係
確認クイズ

Q1. 正しい値が C=110 のとき、一致判定回路 f(y) はどれ?

Q2. この回路が正解 C=101 を「覚えている」場所はどこ?

Q3. 128ビットの値との一致判定回路を1個作るのに必要な部品の数は?

← トップへ