ELLIPTIC CURVE CRYPTOGRAPHY / 体験型教材(試作)

行きはよいよい、
帰りはこわい。 楕円曲線暗号のしくみを、さわって体感する

スマホの通信も、ネットの買い物も、暗号資産も、守っているのは「行きは一瞬、帰りはほぼ不可能」な計算です。 その正体は、ある曲線の上でくり返す、ちょっと変わった「足し算」。数式はほとんど使わずに、手を動かして確かめていきましょう。

第1章

曲線の上の、変わった「足し算」

青い線が楕円曲線です。名前に「楕円」とありますが、形は楕円ではありません。この曲線の上の2つの点 P と Q を「足す」ルールは、たった3手です。

P・Q をドラッグして動かせます

足し算の手順

  1. 曲線ともう1か所ぶつかる点を見つける
  2. 横線(折り返しの線)で上下に折り返す

曲線の形を変える

P と Q をどこに動かしても、直線は曲線と必ずもう1か所でぶつかります。だからこの「足し算」はいつでもできます。P と P を足す(同じ点どうし)ときは、曲線にふれる線(接線)を使います。

ここで覚えておいてほしいのは、答えの点がどこに飛ぶかは、ぱっと見では予想しにくいこと。この性質が、あとで暗号の強さにつながります。

第2章

曲線を「時計の世界」に持っていく

なめらかな曲線のままだと、コンピュータでは小数の誤差が出てしまいます。そこで暗号では、ある数で一周すると 0 に戻る「時計の数」だけを使います。

まずは、ふつうの時計で

12 で一周して 0 に戻る時計です。15 は 1周まわって 3。何周したかは、針を見ただけではわかりません。

曲線が「点の雲」になる

同じ曲線の式を、p で一周する時計の数で計算します。すると、なめらかな線は消えて、式を満たすマス目だけが点として残ります。p を大きくしていくと、どうなるでしょう。

時計の大きさ p

マス目 個
見つかった点0 個

点の雲で足し算

点は上下でペアになっています(ピンクの線をはさんで鏡うつし)。第1章の「折り返し」は、この世界でも生きています。

一方で、p を大きくするほど点の並びは規則のない砂嵐のようになり、「次はどこに飛ぶか」の見当がつかなくなります。

本物の暗号(secp256k1)で使われている時計の大きさ p
115792089237316195423570985008687907853269984665640564039457584007908834671663

78桁の数です。この盤のマス目を1つ 1mm で描くと、一辺の長さは観測できる宇宙の直径の約10⁴⁷倍になります。

その上に、点がおよそ 10⁷⁷個 散らばっています。

第3章

ジャンプしてみよう

点の雲の上で、スタート地点 P に P を足す。その答えに、また P を足す……。足すたびに点から点へ跳ぶので、これをジャンプと呼びます。

暗号では、何回跳んだかが誰にも教えない秘密の数(秘密鍵)になり、着地した点がみんなに見せる公開鍵になります。

跳んでみる

0回

この章では、点が全部で 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)

いまの手数

倍々 
1回ずつ 

これが「行きはよいよい」の正体です。秘密の数 k が分かっていれば、倍々ジャンプで一瞬でゴール(公開鍵)に着けます。

では逆に、ゴールだけを見せられて「何回跳んだ?」と聞かれたら? 倍々ジャンプは「k を知っている人」しか使えない近道です。知らない人は……次の章で試してみましょう。

第4章

何回跳んだか、当ててください

今度は立場が逆です。見えるのはスタート P とゴールだけ。P から何回跳んだらゴールに着くのかを当ててください。これが暗号を破る側の仕事です。

勘で答えてもいいし、「総当たり」で 1回、2回、3回……と順に跳んで、ゴールと同じ点になるまで試すこともできます。レベルが1つ上がるごとに、点の数は約10倍になります。

    道具

    成績表

    レベル点の数結果試した回数全力の計算時間(推定)

    「全力の計算時間」は、総当たりで試した回数を、あなたの端末が全力で計算した場合の時間に直したものです(画面のアニメーションのために、レベル1〜4はわざとゆっくり動かしています)。

    レベル5(点がおよそ100万個)までは、総当たりで1秒もかからずに見つかります。ところが「本物」では、何秒試しても全体のほんのわずかしか進みません。

    これが「帰りはこわい」の正体です。正解を知っていれば一瞬で確かめられるのに、知らなければ1つずつ試すしかありません。そして試す数が78桁あります。

    第5章

    総当たり実況:本物に挑む

    最後は、あなたの端末で本物の曲線に挑みます。CPU を全部使って、1回、2回、3回……と全力で試し続けます。

    秘密の数(78桁)は、このページを開いたときにランダムに決めてあります。見つけられるでしょうか。

    端末が熱くなったら、いつでも止めてください。

    試した回数
    0
    速さ
    —
    経過
    0秒
    使っているコア
    秘密の数(78桁)
    いま試している数

    ピンクの桁だけが動いています。78桁のうち、右端の何桁か。左の桁が1つ動くまでに、何がどれだけかかるでしょう。

    全体のうち、試し終わった割合

    終わるのはいつ?

    だれが、どうやってかかる時間くらべると

    ρ法は、総当たりよりずっと賢い、知られている中で最も速い解き方です。それでも必要な手数は約3.4×10³⁸(全体の数の平方根くらい)。宇宙の年齢は約138億年として計算しています。

    行きはよいよい、帰りはこわい

    行き

    秘密の数 k を知っている人は、倍々ジャンプで約400手。ミリ秒でゴール(公開鍵)に着きます。

    帰り

    ゴールしか知らない人は、近さのヒントもなく、1つずつ試すしかありません。試す数は78桁。宇宙が何度終わっても終わりません。

    この「片道だけ簡単」な性質のおかげで、公開鍵はみんなに見せても大丈夫。秘密の数を持っている本人だけが、署名をしたり、暗号を開けたりできます。スマホの通信や、暗号資産のウォレットを守っているのは、この仕組みです。

    ただし、十分に大きな「量子コンピュータ」ができると、この帰り道を近道する方法(ショアのアルゴリズム)が知られています。そのため、量子コンピュータでも解けない新しい暗号(耐量子暗号)への切り替えが、世界で進められています。