曲線の上の、変わった「足し算」
青い線が楕円曲線です。名前に「楕円」とありますが、形は楕円ではありません。この曲線の上の2つの点 P と Q を「足す」ルールは、たった3手です。
足し算の手順
- 曲線ともう1か所ぶつかる点を見つける
- 横線(折り返しの線)で上下に折り返す
曲線の形を変える
この形は曲線がとがったり交差したりして、足し算のルールが壊れます。暗号ではこういう形は使いません。
P と Q をどこに動かしても、直線は曲線と必ずもう1か所でぶつかります。だからこの「足し算」はいつでもできます。P と P を足す(同じ点どうし)ときは、曲線にふれる線(接線)を使います。
ここで覚えておいてほしいのは、答えの点がどこに飛ぶかは、ぱっと見では予想しにくいこと。この性質が、あとで暗号の強さにつながります。
曲線を「時計の世界」に持っていく
なめらかな曲線のままだと、コンピュータでは小数の誤差が出てしまいます。そこで暗号では、ある数で一周すると 0 に戻る「時計の数」だけを使います。
まずは、ふつうの時計で
12 で一周して 0 に戻る時計です。15 は 1周まわって 3。何周したかは、針を見ただけではわかりません。
曲線が「点の雲」になる
同じ曲線の式を、p で一周する時計の数で計算します。すると、なめらかな線は消えて、式を満たすマス目だけが点として残ります。p を大きくしていくと、どうなるでしょう。
時計の大きさ p
この p では曲線がとがってしまい、足し算が壊れます。第1章で a・b を変えてみてください。
点の雲で足し算
点は上下でペアになっています(ピンクの線をはさんで鏡うつし)。第1章の「折り返し」は、この世界でも生きています。
一方で、p を大きくするほど点の並びは規則のない砂嵐のようになり、「次はどこに飛ぶか」の見当がつかなくなります。
78桁の数です。この盤のマス目を1つ 1mm で描くと、一辺の長さは観測できる宇宙の直径の約10⁴⁷倍になります。
その上に、点がおよそ 10⁷⁷個 散らばっています。
ジャンプしてみよう
点の雲の上で、スタート地点 P に P を足す。その答えに、また P を足す……。足すたびに点から点へ跳ぶので、これをジャンプと呼びます。
暗号では、何回跳んだかが誰にも教えない秘密の数(秘密鍵)になり、着地した点がみんなに見せる公開鍵になります。
跳んでみる
この章では、点が全部で 107 個ある曲線(y² = x³ − 3x + 6、97 で一周)を使っています。
跳ぶたびに、点は盤のあちこちへ飛びます。足あとを隠すと、スタートとゴールを見ても何回跳んだのか見当がつきません。
でも、ちょっと待ってください。本物の暗号では、秘密の数は78桁です。1回ずつ跳んでいたら、鍵を作る側だって永遠に終わらないのでは?
近道があります:倍々ジャンプ
第1章の「P+P」を思い出してください。今いる点を自分自身に足すと、一気に2倍の位置まで跳べます。この「2倍」と「+1」を組み合わせると、たとえば 13 回目の位置には
0 → 1 → 2 → 3 → 6 → 12 → 13
のたった6手で着きます(1回ずつなら13手)。数が大きいほど、この差はとんでもなく開きます。2チームを同じペースで競争させてみましょう。
物差しは、1目盛りごとに数が何倍にもなる「桁の物差し」です。ふつうの物差しでは、倍々ジャンプのコマが速すぎて描けません。
倍々ジャンプの手順(×2 と +1)
いまの手数
これが「行きはよいよい」の正体です。秘密の数 k が分かっていれば、倍々ジャンプで一瞬でゴール(公開鍵)に着けます。
では逆に、ゴールだけを見せられて「何回跳んだ?」と聞かれたら? 倍々ジャンプは「k を知っている人」しか使えない近道です。知らない人は……次の章で試してみましょう。
何回跳んだか、当ててください
今度は立場が逆です。見えるのはスタート P とゴールだけ。P から何回跳んだらゴールに着くのかを当ててください。これが暗号を破る側の仕事です。
勘で答えてもいいし、「総当たり」で 1回、2回、3回……と順に跳んで、ゴールと同じ点になるまで試すこともできます。レベルが1つ上がるごとに、点の数は約10倍になります。
道具
成績表
| レベル | 点の数 | 結果 | 試した回数 | 全力の計算時間(推定) |
|---|
「全力の計算時間」は、総当たりで試した回数を、あなたの端末が全力で計算した場合の時間に直したものです(画面のアニメーションのために、レベル1〜4はわざとゆっくり動かしています)。
レベル5(点がおよそ100万個)までは、総当たりで1秒もかからずに見つかります。ところが「本物」では、何秒試しても全体のほんのわずかしか進みません。
これが「帰りはこわい」の正体です。正解を知っていれば一瞬で確かめられるのに、知らなければ1つずつ試すしかありません。そして試す数が78桁あります。
総当たり実況:本物に挑む
最後は、あなたの端末で本物の曲線に挑みます。CPU を全部使って、1回、2回、3回……と全力で試し続けます。
秘密の数(78桁)は、このページを開いたときにランダムに決めてあります。見つけられるでしょうか。
端末が熱くなったら、いつでも止めてください。
ピンクの桁だけが動いています。78桁のうち、右端の何桁か。左の桁が1つ動くまでに、何がどれだけかかるでしょう。
終わるのはいつ?
| だれが、どうやって | かかる時間 | くらべると |
|---|
ρ法は、総当たりよりずっと賢い、知られている中で最も速い解き方です。それでも必要な手数は約3.4×10³⁸(全体の数の平方根くらい)。宇宙の年齢は約138億年として計算しています。
行きはよいよい、帰りはこわい
秘密の数 k を知っている人は、倍々ジャンプで約400手。ミリ秒でゴール(公開鍵)に着きます。
ゴールしか知らない人は、近さのヒントもなく、1つずつ試すしかありません。試す数は78桁。宇宙が何度終わっても終わりません。
この「片道だけ簡単」な性質のおかげで、公開鍵はみんなに見せても大丈夫。秘密の数を持っている本人だけが、署名をしたり、暗号を開けたりできます。スマホの通信や、暗号資産のウォレットを守っているのは、この仕組みです。
ただし、十分に大きな「量子コンピュータ」ができると、この帰り道を近道する方法(ショアのアルゴリズム)が知られています。そのため、量子コンピュータでも解けない新しい暗号(耐量子暗号)への切り替えが、世界で進められています。