技術 約13分で読めます

楕円曲線とモジュラー形式が同じものになる理由とついでにフェルマーの最終定理

いけさん目次

ブラウザでHTTPSのサイトを開いたときのTLSハンドシェイクは、いまほぼ確実に楕円曲線を使って鍵交換と署名をしている。Bitcoin・Ethereumの署名(secp256k1)、Signal や WhatsApp のメッセージ暗号化(Curve25519)、SSH の公開鍵(Ed25519)、TLS 1.3 の鍵交換(X25519、P-256)、これらの裏で「楕円曲線」と呼ばれる曲線の仲間が動いている。RSAより短い鍵長で同等以上の安全性が出るので、ここ10年で標準的な選択肢になった。

その安全性の根拠は、曲線上の「点の加法」を逆向きに解く問題(楕円曲線離散対数問題)がコストに対して指数的に重いという代数構造に支えられている。前向きに PPnn 倍する計算は速く、逆に「Q=nPQ = nP となる nn」を求める計算は指数的に重い。この非対称性で鍵の秘匿が成り立つ。

自分は「楕円曲線」という単語を何度も見ていただけで、なぜ曲線で暗号が組めるのか、形はどんなものか、楕円とどう違うのかを真面目に追ったことはなかった。調べてみると、暗号で使われる「点の加法」という構造がそのまま、フェルマーの最終定理の証明にも使われた道具だった、という地続きの話だった。

この記事では楕円曲線とは何かを図と数式で追って、点の加法がなぜ暗号アルゴリズムの中で動けるかを示す。同じ加法構造がモジュラー形式と結ばれること(谷山-志村予想)まで延長すれば、フライの曲線でフェルマーの最終定理が証明されるところまで一本の線で繋がる。前提は群論と複素関数を少しかじったことがある程度。完全に理解するには専門書が必要になる。

群・環・体を軽くおさらい

以降「有理数体 Q\mathbb{Q}」「アーベル群」「Fp\mathbb{F}_p」のような言葉がそのまま出てくるので、最小限の対応表を置いておく。すでに知ってる人は読み飛ばしていい。

構造できること主な性質
演算が1つ(加法 or 乗法のどちらか)結合則・単位元・逆元(Z,+)(\mathbb{Z}, +)、楕円曲線の点全体
アーベル群群+順番を入れ替えてもいいa+b=b+aa+b = b+a(Z,+)(\mathbb{Z}, +)(Q,+)(\mathbb{Q}, +)
加法と乗法加法はアーベル群、乗法は結合則と分配則Z\mathbb{Z}R[x]\mathbb{R}[x]
加法・減法・乗法・除法(00 除く)環+ 00 以外で乗法の逆元ありQ\mathbb{Q}R\mathbb{R}C\mathbb{C}Fp\mathbb{F}_p

Fp\mathbb{F}_p は素数 pp で割った余りの世界({0,1,,p1}\{0, 1, \dots, p-1\})で、加法・乗法・除法すべて mod p\bmod\ p で閉じている。後で楕円曲線を「素数で還元する」場面で出てくる。

楕円曲線とはどんな曲線か

楕円曲線は、有理数体 Q\mathbb{Q}(あるいは別の体)の上で

y2=x3+ax+by^2 = x^3 + ax + b

と書ける曲線のうち、右辺が重根を持たないもの。条件は

4a3+27b204a^3 + 27b^2 \neq 0

(判別式が非ゼロ)。これが破れると曲線に尖りや自己交差ができて「特異」になる。楕円曲線では避ける。

形を見てもらうのが早い。

y² = x³ − x + 1(連結な1成分)

これは判別式が正の場合で、ひとつながりの曲線になる。a,ba, b を変えると形は変わる。

y² = x³ − 3x + 1(こちらは右辺が3つの相異なる実根を持つ場合で、有界な「卵」成分と無限に伸びる成分の2つに分かれる)

楕円曲線という名前は楕円とは無関係。歴史的経緯で、楕円の弧長を求める積分(楕円積分)の解析から派生した名前なので、形は楕円ではない。

楕円曲線には加法がある

楕円曲線の上の点には「加法」を入れることができる。これによって曲線上の点全体が群になる。

2点 P,QP, Q を取って直線 PQPQ を引く。曲線は3次なので、直線は曲線と(多重度込みで)ちょうど3点で交わる。第3の交点を RR とし、RRxx 軸で折り返した点を P+QP + Q と定める。

座標を素直に足しているわけではないことに注意。「加法」と呼んではいるが、P+QP + Q の座標は PPQQ の座標の足し算にはなっていない。PPQQ から幾何的な作図で決まる別の点になる。

y² = x³ − x + 1 上での点加法(一般のケース)。P = (−1, 1), Q = (1, 1) を結ぶ直線 y = 1 は曲線と 3点で交わり、第3の交点 R = (0, 1) を x 軸で折り返した (0, −1) が P + Q になる。座標を成分ごとに足したものと一致しないことが確かめられる。

これは一番素直なケースで、点の取り方によって計算は変わる。

P=QP = Q のときは直線 PQPQ が一意に決まらないので、PP における曲線の接線を使う。接線の傾きは陰関数微分から m=(3px2+a)/(2py)m = (3p_x^2 + a) / (2p_y) で出る。

2倍点(doubling)。P = (1, 1) における接線は傾き 1(y = x)。これが曲線と x = −1 で交わり、R = (−1, −1) を折り返した 2P = (−1, 1) が得られる。

PPQQ が同じ xx 座標で yy の符号だけが逆(つまり Q=PQ = -P)のときは、直線が垂直になる。曲線との第3の交点は yy 方向の無限遠にしかない。

無限遠点を生むケース。P = (1, 1) と −P = (1, −1) を結ぶ直線は垂直で、曲線とは2点しか有限の範囲で交わらない。第3の交点を無限遠に取って、P + (−P) = 𝒪(無限遠点、群の単位元)と定義する。

ここで定義した加法が本当に「群」を作るかを見ていく。曲線上の任意の2点 P,QP, Q について、直線 PQPQ は1本に決まり、3次曲線との第3の交点 RR も(重複度込みで)一意に決まり、xx 軸で折り返した P+QP + Q も一意に決まる。「2点を入力すると曲線上の点が1つ返ってくる」演算が矛盾なく定義できている。曲線 EE の上には基本的に無限個の有理点があり、その間にこの加法が1つ定まる。

PP を固定して QQ を動かしたときも、P+QP + Q は曲線上を漏れなく重なりなく動く(P-P を足せば元に戻るので、QP+QQ \mapsto P + Q は1対1対応)。

群が満たすべき条件を順に並べると、いずれもこの加法で成立する。

  1. 閉じている。P,QEP, Q \in E なら P+QP + QEE の点。第3の交点は定義から曲線上にあり、折り返した点も曲線が xx 軸対称なので曲線上に残る。
  2. 可換。P+Q=Q+PP + Q = Q + P。直線 PQPQ と直線 QPQP は同じ直線なので、第3の交点も同じになる。
  3. 単位元 O\mathcal{O} がある。PPO\mathcal{O} を結ぶ「直線」は PP を通る垂直線で、曲線と P,P,OP, -P, \mathcal{O} で交わる。第3の交点 P-P を折り返すと PP に戻るので、P+O=PP + \mathcal{O} = P
  4. 逆元がある。P=(x,y)P = (x, y) に対して P=(x,y)-P = (x, -y) が逆元。図3で見た通り P+(P)=OP + (-P) = \mathcal{O}

残るは結合則 (P+Q)+R=P+(Q+R)(P+Q) + R = P + (Q+R)。これだけは図を見ただけでは納得しにくく、証明には射影平面の代数幾何(ベズーの定理の系)を要する。

この加法は曲線の幾何構造に従って P,QP, Q の取り方ごとに計算式が分岐するもので、座標を成分ごとに足したものとは別物になる。前向きの計算(「PPnn 倍した点 nPnP を求める」)はバイナリ展開と倍化を組み合わせて O(logn)O(\log n) 回の加法で済む。一方、逆問題(「PP を何倍したら QQ になるか求める」)は素朴な探索だと指数的なコストがかかる。

この加法のもとで、有理点(Q\mathbb{Q} に係数を持つ点)の集合 E(Q)E(\mathbb{Q}) がアーベル群になる。モーデル・ヴェイユの定理により、これは有限生成。つまり

E(Q)ZrTE(\mathbb{Q}) \cong \mathbb{Z}^r \oplus T

の形に書ける(rr は階数、TT はねじれ部分)。「楕円曲線の有理点の構造を理解する」という問題が、群論の問題になる。

楕円曲線が暗号として動く仕組み

ここまでで「曲線上の点に加法が入って群になる」「前向き nPnP は速く、逆問題は指数的に重い」という構造が手元にある。この非対称性を直接利用すれば、曲線そのものから暗号アルゴリズムが組み立てられる。

実際の暗号で使うのは、有理数体上の楕円曲線 E/QE/\mathbb{Q} ではなく、有限体 Fp\mathbb{F}_p 上の楕円曲線 E/FpE/\mathbb{F}_ppp は大きな素数)。方程式は同じ y2=x3+ax+by^2 = x^3 + ax + b で、座標が mod p\bmod\ p で計算される。点の集合 E(Fp)E(\mathbb{F}_p) は有限個の点からなる有限アーベル群で(点の数はおおむね pp 個前後)、ここまで述べた加法はそのまま使える。

楕円曲線ディフィー・ヘルマン鍵交換(ECDH)はこういう手順で動く。

sequenceDiagram
  participant A as Alice
  participant B as Bob
  Note over A,B: 公開パラメータ = 曲線 E/F_p と基点 G
  A->>A: 秘密鍵 a を生成、aG を計算
  B->>B: 秘密鍵 b を生成、bG を計算
  A->>B: 公開鍵 aG を送信
  B->>A: 公開鍵 bG を送信
  A->>A: a × bG = abG
  B->>B: b × aG = abG
  Note over A,B: 共有秘密 abG が両者の手元に

公開パラメータとして曲線 E/FpE/\mathbb{F}_p と基点 GE(Fp)G \in E(\mathbb{F}_p) を全員に共有しておく。Alice は秘密鍵 aa(整数)を選んで aGaG を計算し、Bob に送る。Bob は逆に bb を選んで bGbG を送る。受け取った相手の公開鍵に自分の秘密鍵を掛けると、両者とも同じ点 abG=a(bG)=b(aG)abG = a(bG) = b(aG) にたどり着き、これが共有秘密になる。

盗聴者は GGaGaGbGbG を見ているが、ここから aabb を復元するには「GG を何倍したら aGaG になるか」を解く必要がある。これが楕円曲線離散対数問題(ECDLP)で、最良の汎用アルゴリズム(Pollard’s rho など)でも O(p)O(\sqrt{p}) のコストがかかる。256ビット程度の pp を取れば現実的な計算資源では解けない。

同等の安全性を出すのに RSA なら2048ビット程度の鍵が必要なところ、ECCでは256ビットで済む。鍵が短い分、計算量も通信量も小さくなる。TLS 1.3 で ECDHE がデフォルトになり、Signal や Bitcoin、SSH の Ed25519 が標準になっていった背景には、この性能差がある。

署名(ECDSA / Ed25519)も同じ群構造を使って組まれていて、流れ自体は ECDH と同じく「秘密鍵から公開鍵を作って群演算で検証する」形になる。

ここまでで暗号への接続は説明できた。次は同じ加法構造が、暗号とは別の方向に伸びていく話になる。

モジュラー形式とは何か

ここから複素関数論の領域に入る。下流(谷山-志村以降)で使うのは、このセクションの最後に出てくる「フーリエ係数列 {an}\{a_n\}」というデータだけなので、定義の細部が重く感じたら、係数列の式が出てくるところまで読み飛ばして構わない。

ここで一見まったく無関係に見える対象を導入する。モジュラー形式は、上半平面

H={τC:Im(τ)>0}\mathbb{H} = \{ \tau \in \mathbb{C} : \mathrm{Im}(\tau) > 0 \}

上の正則関数 f(τ)f(\tau) で、強い対称性を持つもの。具体的には、整数行列

(abcd)SL2(Z)\begin{pmatrix} a & b \\ c & d \end{pmatrix} \in SL_2(\mathbb{Z})

による作用

τaτ+bcτ+d\tau \mapsto \frac{a\tau + b}{c\tau + d}

に対して、

f(aτ+bcτ+d)=(cτ+d)kf(τ)f\left(\frac{a\tau + b}{c\tau + d}\right) = (c\tau + d)^k \, f(\tau)

を満たす(重さ kk のモジュラー形式)。さらに ii\infty で有界。係数 a0=0a_0 = 0(無限遠点で消える)ものを「カスプ形式」と呼ぶ。

何が「対称性が強い」かというと、ττ+1\tau \mapsto \tau + 1ff が不変、τ1/τ\tau \mapsto -1/\tauτk\tau^k 倍にしか変わらない、という条件が同時に課されている。これだけ強い条件を満たす関数の空間は次元が小さく、重さ kk とレベル(SL2(Z)SL_2(\mathbb{Z}) ではなくその部分群 Γ0(N)\Gamma_0(N) にする)でほぼ決まる。

ここで使うのが「フーリエ展開」。ττ+1\tau \mapsto \tau + 1 で不変なので、q=e2πiτq = e^{2\pi i \tau} と置けば ff

f(τ)=n=1anqnf(\tau) = \sum_{n=1}^{\infty} a_n q^n

の形に書ける(カスプ形式なら a0=0a_0 = 0)。この係数列 {an}\{a_n\} が、次のセクションで楕円曲線側のデータと一致する対象になる。

楕円曲線とモジュラー形式は同じL関数を作る(谷山-志村予想)

楕円曲線 E/QE/\mathbb{Q} に対して、各素数 pp

ap(E)=p+1#E(Fp)a_p(E) = p + 1 - \#E(\mathbb{F}_p)

を定める。EE を素数 pp で還元(係数を mod p\bmod\ p)して、Fp\mathbb{F}_p 上の点を数える。Fp\mathbb{F}_p 上だと有限個に収まるので、その個数の「ずれ」を ap(E)a_p(E) とする。

これを使って LL 関数を作る。

L(E,s)=p11ap(E)ps+p12s=n=1an(E)nsL(E, s) = \prod_p \frac{1}{1 - a_p(E) p^{-s} + p^{1 - 2s}} = \sum_{n=1}^{\infty} \frac{a_n(E)}{n^s}

楕円曲線の数論的データ(各素数での点の数)が、ディリクレ級数の係数 {an(E)}\{a_n(E)\} として並ぶ。

一方、モジュラー形式 f(τ)=anqnf(\tau) = \sum a_n q^n からも LL 関数が作れる。

L(f,s)=n=1annsL(f, s) = \sum_{n=1}^{\infty} \frac{a_n}{n^s}

谷山-志村予想(現在は定理、ワイルズ・テイラー 1995 + ブルイユ・コンラッド・ダイヤモンド・テイラー 2001 で完全証明)はこう主張する。

任意の楕円曲線 E/QE/\mathbb{Q} に対し、重さ2のカスプ形式 fS2(Γ0(N))f \in S_2(\Gamma_0(N))L(E,s)=L(f,s)L(E, s) = L(f, s) となるものが存在する。NNEE の導手と呼ばれる量で、悪い還元を持つ素数だけから決まる。

楕円曲線から作った数列 {an(E)}\{a_n(E)\} と、あるモジュラー形式のフーリエ係数 {an(f)}\{a_n(f)\} が完全に一致する。「同じものになる」というのは、LL 関数を経由した、この係数列の一致を指す。

幾何的対象(楕円曲線)と解析的対象(モジュラー形式)が、LL 関数という数列レベルで重なる。なぜそんなことが起きるのかには、ガロワ表現を経由した深い理由があるが、本稿では「事実としてそうなる」と認めておく。

フライの曲線でフェルマーの解を楕円曲線に押し込む

フェルマーの最終定理:n3n \geq 3 の整数で

an+bn=cna^n + b^n = c^n

を満たす互いに素な正整数 a,b,ca, b, c は存在しない。

合成数の指数は素因数で割れた話に帰着するので、nn が素数 pp の場合と n=4n = 4 の場合だけ示せば足りる。n=3,4,5,7n = 3, 4, 5, 7 などは19世紀までに別々の代数的整数論で個別に証明されていたが、すべての p5p \geq 5 を一気に証明する道具がなかった。それが楕円曲線とモジュラー形式の同一視で、フライの曲線がその対応を発動させる入口になる。

フライのアイデアは、もし仮に解 (a,b,c,p)(a, b, c, p) が存在したら、その解から楕円曲線を一つ組み立ててしまえ、という発想だった。

EF:y2=x(xap)(x+bp)E_F : y^2 = x(x - a^p)(x + b^p)

右辺が3つの1次式の積で、x=0,ap,bpx = 0, a^p, -b^py=0y = 0 になる楕円曲線である。

y² = x(x − 2)(x + 2)(フライの曲線の「右辺が3つの1次式の積で、根の1つが0」という構造を見るための類例。実際の (a^p, b^p) は巨大なので可視化は不可)

この曲線が特殊なのは、判別式の形に表れる。

Δ(EF)=16(abc)2p\Delta(E_F) = 16 \cdot (abc)^{2p}

判別式が「pp 乗」の塊で構成されている。これは普通の楕円曲線では起きない構造で、各素因数の現れ方に強い偏りがあり、ガロワ表現の側に強い制約を生む。

リベットの定理で矛盾に追い込む

仮にフェルマーの解が存在したとして、フライの曲線 EFE_F が登場した。谷山-志村予想(が証明されているとすれば)により、EFE_F はあるモジュラー形式 ff に対応する。

ここでリベットのレベル下げ定理(1990)を使う。リベットは、EFE_Fpp-進ガロワ表現の性質から、対応するモジュラー形式 ff のレベル(Γ0(N)\Gamma_0(N)NN)を 2 まで下げられることを示した。直感的には、フライの曲線の判別式の特殊な形が、「悪い還元の素数」を 2 だけに絞り込ませる。

つまり、フェルマーの解が存在するなら、重さ 2、レベル 2 のカスプ形式

fS2(Γ0(2))f \in S_2(\Gamma_0(2))

が存在しなければならない。

ところが S2(Γ0(2))S_2(\Gamma_0(2)) の次元は

dimS2(Γ0(2))=0\dim S_2(\Gamma_0(2)) = 0

つまり、そんなカスプ形式は存在しない。「存在しないモジュラー形式に対応せざるを得ない」という矛盾が出てくる。

全体の論理の流れはこうなる。

graph TD
  A["フェルマー解 a^p + b^p = c^p が存在と仮定"]
  B["フライの曲線 E_F<br/>y^2 = x(x - a^p)(x + b^p)"]
  C["谷山-志村<br/>E_F に対応する重さ2のカスプ形式 f が存在"]
  D["リベットのレベル下げ<br/>f のレベルは 2 まで下げられる"]
  E["だから重さ2・レベル2 のカスプ形式 f が必要"]
  F["S_2(Γ_0(2)) は 0 次元"]
  G["矛盾<br/>したがってフェルマー解は存在しない"]

  A --> B
  B --> C
  C --> D
  D --> E
  E --> F
  F --> G

実際のワイルズの仕事は、谷山-志村予想を、フライの曲線が属する「半安定」と呼ばれるクラスに対して証明することだった(リベットはそれを使ってフェルマーの最終定理を証明するために必要な前段階を1986年に整えた)。残り(半安定でない楕円曲線への一般化)はブルイユ・コンラッド・ダイヤモンド・テイラーが1999-2001年に完成させた。

「楕円曲線」「モジュラー形式」という、形も場所も違う2つの対象が、L関数を経由して同一視できる。その同一視は、フェルマーの方程式から作ったうそ臭い楕円曲線を、存在しないモジュラー形式と紐付けて、矛盾を出すために使える。同じになる理由がそのまま、フェルマーの最終定理が成り立つ理由となり、そして同じ加法構造が、いま開いているブラウザのTLSセッションの中でも動いている。