Lemma

第5章楕円曲線の計算と暗号

目安 10〜13 時間定理など 14演習 8 問
ここまでの道

この章の目標

  • スカラー倍を二進法と射影座標で計算でき、その計算量を評価できる
  • ECDH・エルガマル暗号・ECDSA の正しさと、ナンスの再利用で秘密鍵が漏れることを証明できる
  • ベビーステップ・ジャイアントステップ法、ポラードの ρ\rho 法、ポーリッヒ–ヘルマン法の正しさと計算量を説明できる
  • MOV 攻撃とアノマラス曲線への攻撃の仕組みと、secp256k1・P-256・Curve25519 が選ばれている理由を説明できる
  • シューフのアルゴリズムの考え方と、レンストラの楕円曲線法で素因数が見つかる理由を説明できる
  • 量子計算機と同種写像暗号について、確かなことを区別して述べられる

前提:第2章、第4章。5.4 節では第3章のヴェイユ対(定義 3.30・定理 3.31)を、5.6 節では同じく第3章の等分多項式(定義 3.17)を使い、5.4 節のアノマラス曲線の部分では第6章 6.4 節の E1(K)E_1(K) のフィルトレーションの結果を先取りする。中国剰余定理は 04-algebra 第1章、有限体の乗法群が巡回群であることは 04-algebra 第8章 を参照。

有限体上の楕円曲線の群 E(Fq)E(\mathbb{F}_q) は、元が座標の組で表され、演算が第2章の加法公式(定理 2.6)で計算できる有限アーベル群である。1985 年にコブリッツとミラーがそれぞれ独立に、この群を離散対数問題にもとづく暗号に使うことを提案し、現在ではウェブの暗号通信(TLS)やビットコインの署名などで日常的に使われている。

暗号に使えるのは、mm から [m]P[m]P を求めるのは速い(5.1 節)が、[m]P[m]P から mm を求める問題には、一般の曲線では指数時間のアルゴリズムしか知られていないからである。後者は定理ではなく経験的な事実である。特殊な曲線には効率のよい攻撃があり(5.4 節)、その仕組みは第3章のヴェイユ対や第6章の pp 進的な理論そのものである。楕円曲線は点の個数の計算(5.6 節)や素因数分解(5.7 節)の道具にもなる。

本章では、5.5 節のモンゴメリー形・エドワーズ形を除き、曲線を短い形 y2=x3+Ax+By^2 = x^3 + Ax + B(標数 ≠2,3\neq 2, 3)で表す。プロトコルの細部と実装上の注意は 25 暗号と符号 第4章 で扱い、本章はアルゴリズムの正しさと計算量、攻撃が成り立つ理由を中心にする。

5.1 スカラー倍の計算

暗号では mm が 256 ビット程度になるので、PP を m−1m - 1 回足すことはできない。整数のべき乗の反復二乗法と同じく、二進展開 m=∑i=0tbi2im = \sum_{i=0}^{t} b_i2^i(bi∈{0,1}b_i \in \lbrace 0, 1 \rbrace, bt=1b_t = 1, t=⌊log⁡2m⌋t = \lfloor \log_2 m \rfloor)を使う。二進法 (double-and-add) では、R=OR = O から始めて i=t,t−1,…,0i = t, t - 1, \dots, 0 の順に「R←[2]RR \leftarrow [2]R とし、bi=1b_i = 1 ならさらに R←R+PR \leftarrow R + P とする」ことを繰り返す。

命題 5.1(二進法)二進法は [m]P[m]P を出力する。最初の段(OO の 2 倍と O+PO + P で、計算は要らない)を除くと、2 倍算は tt 回、加算は w(m)−1w(m) - 1 回である。ここで w(m)w(m) は mm の二進展開の 11 の個数である。特に群演算は 2⌊log⁡2m⌋2\lfloor \log_2 m \rfloor 回以下である。

証明. mj=∑i=jtbi2i−jm_j = \sum_{i=j}^{t} b_i2^{i-j}(mm の上から t−j+1t - j + 1 桁)とおくと mt=1m_t = 1, mj=2mj+1+bjm_j = 2m_{j+1} + b_j, m0=mm_0 = m で、i=ji = j の段の後で R=[mj]PR = [m_j]P となることが下向きの帰納法でわかる(段の始めに R=[mj+1]PR = [m_{j+1}]P なら、段の後は [2mj+1+bj]P[2m_{j+1} + b_j]P)。回数は、j<tj < t の各段で 2 倍算が 1 回、bj=1b_j = 1 のときだけ加算が 1 回であることから従う。□\square

例 5.2 F97\mathbb{F}_{97} 上の E ⁣:y2=x3+7E\colon y^2 = x^3 + 7(5.5 節の secp256k1 と同じ式)を考える。すべての xx について数えると ∣E(F97)∣=79\lvert E(\mathbb{F}_{97}) \rvert = 79 で、これは素数なので OO 以外の点はすべて位数 79 である。G=(1,28)G = (1, 28) とし、10=1010210 = 1010_2 に沿って計算すると

G→[2][2]G=(68,81)→[2][4]G=(67,19)→+G[5]G=(20,76)→[2][10]G=(32,59)G \xrightarrow{[2]} [2]G = (68, 81) \xrightarrow{[2]} [4]G = (67, 19) \xrightarrow{+G} [5]G = (20, 76) \xrightarrow{[2]} [10]G = (32, 59)

となる。この曲線は以下の例でも使う。

注意 5.3 アフィン座標の群演算は Fp\mathbb{F}_p での数回の乗算と 1 回の逆元の計算からなり、どちらも(筆算と拡張ユークリッド互除法で)O((log⁡p)2)O((\log p)^2) 回のビット演算でできる。よって m<2pm < 2p なら [m]P[m]P は O((log⁡p)3)O((\log p)^3) 回のビット演算で計算できる。ただし演算の並びが mm のビットに依存するので、計算時間などから秘密の mm が漏れうる(5.5 節のラダーを参照)。

射影座標

逆元の計算は乗算よりかなり重いので、実装では第2章 2.8 節のヤコビ座標([X:Y:Z][X : Y : Z] を点 (X/Z2,Y/Z3)(X/Z^2, Y/Z^3) と同一視し、Z=0Z = 0 を OO とする)を使い、逆元の計算を最後の 1 回だけにする。

注意 5.4 第2章 2.8 節のヤコビ座標の 2 倍算に現れる M=3X2+AZ4M = 3X^2 + AZ^4 は、A=−3A = -3 なら 3(X−Z2)(X+Z2)3(X - Z^2)(X + Z^2) と因数分解でき、乗算を節約できる(5.5 節の P-256 は A=−3A = -3 をとっている)。加算も、加法公式の分母を払えば逆元を使わない式になる(計算は省略する)。また −P=(x,−y)-P = (x, -y) はただで求まるので、±1\pm 1 を桁に使う符号付き二進展開で加算を減らせる(問題 5.1)。

5.2 楕円曲線離散対数問題と暗号方式

定義 5.5(楕円曲線離散対数問題, elliptic curve discrete logarithm problem)P∈E(Fq)P \in E(\mathbb{F}_q) を位数 nn の点、Q∈⟨P⟩Q \in \langle P \rangle とする。Q=[m]PQ = [m]P となる m∈Z/nZm \in \mathbb{Z}/n\mathbb{Z} を求める問題を楕円曲線離散対数問題(ECDLP)といい、mm を QQ の離散対数という。

暗号では、Fp\mathbb{F}_p 上の曲線 EE、素数位数 nn の点 GG(ベースポイント, base point)、余因子 (cofactor) h=∣E(Fp)∣/nh = \lvert E(\mathbb{F}_p) \rvert / n を公開する(この hh は第8章の高さとは無関係)。秘密鍵は d∈[1,n−1]d \in [1, n - 1]、公開鍵は Q=[d]GQ = [d]G で、秘密鍵を求めることは ECDLP そのものである。一般の曲線に対する最良の攻撃は 5.3 節の汎用的な方法で、n≈2256n \approx 2^{256} なら約 21282^{128} 回の群演算を要する。Fp×\mathbb{F}_p^\times の離散対数問題には準指数時間の方法(数体ふるい法など)があるので、同程度の安全性には 3072 ビット程度の pp が要る(NIST SP 800-57 Part 1 の目安。推奨は変わりうる)。

ECDH(楕円曲線ディフィー–ヘルマン鍵共有):A さんは秘密鍵 dAd_A を選んで QA=[dA]GQ_A = [d_A]G を、B さんは dBd_B を選んで QB=[dB]GQ_B = [d_B]G を送る。[a]∘[b]=[ab][a] \circ [b] = [ab] なので [dA]QB=[dB]QA=[dAdB]G[d_A]Q_B = [d_B]Q_A = [d_Ad_B]G で、これが共有された秘密になる。盗聴者が G,QA,QBG, Q_A, Q_B から [dAdB]G[d_Ad_B]G を求める問題(計算ディフィー–ヘルマン問題)は、ECDLP が解ければ解けるが、逆が成り立つかは一般にはわかっていない。

楕円曲線エルガマル暗号:受信者の公開鍵 Q=[d]GQ = [d]G に点 MM を送るには、乱数 kk を選んで (C1,C2)=([k]G,M+[k]Q)(C_1, C_2) = ([k]G, M + [k]Q) を送る。受信者は C2−[d]C1=M+[kd]G−[dk]G=MC_2 - [d]C_1 = M + [kd]G - [dk]G = M で復元できる(これが正しさの証明である)。実際には、同じ考え方の鍵共有と共通鍵暗号を組み合わせた方式(ECIES など)が使われる。

ECDSA:メッセージのハッシュ値を nn のビット長に切り詰めた整数を zz とする(詳細は FIPS 186-5)。秘密鍵 dd による署名 (r,s)(r, s) は次のように作る。

  1. 乱数 k∈[1,n−1]k \in [1, n - 1](ナンス, nonce)を選ぶ。
  2. [k]G=(x1,y1)[k]G = (x_1, y_1) とし、x1x_1 を 0≤x1<p0 \leq x_1 < p の整数とみて r=x1 mod nr = x_1 \bmod n とする。r=0r = 0 なら 1 に戻る。
  3. s=k−1(z+rd) mod ns = k^{-1}(z + rd) \bmod n とする。s=0s = 0 なら 1 に戻る。

公開鍵 Q=[d]GQ = [d]G による検証は次のとおりである。

  1. 1≤r,s≤n−11 \leq r, s \leq n - 1 を確かめ、w=s−1 mod nw = s^{-1} \bmod n, u1=zw mod nu_1 = zw \bmod n, u2=rw mod nu_2 = rw \bmod n とする。
  2. X=[u1]G+[u2]QX = [u_1]G + [u_2]Q を計算し、X≠OX \neq O かつ XX の xx 座標を nn で割った余りが rr なら受理する。

定理 5.6(ECDSA の正しさ)上の手順で作られた署名は、検証で受理される。

証明. s≢0s \not\equiv 0 より ww が定まり、z+rd≡sk(modn)z + rd \equiv sk \pmod{n} なので u1+u2d≡w(z+rd)≡s−1sk≡k(modn)u_1 + u_2d \equiv w(z + rd) \equiv s^{-1}sk \equiv k \pmod{n}。GG の位数は nn なので X=[u1+u2d]G=[k]GX = [u_1 + u_2d]G = [k]G で、1≤k≤n−11 \leq k \leq n - 1 より X≠OX \neq O、その xx 座標は x1x_1 だから x1 mod n=rx_1 \bmod n = r により受理される。□\square

これは正しさの証明で、偽造できないこと(安全性)の証明ではない。一方、使い方を誤ると安全性が失われることは証明できる。

定理 5.7(ナンスの再利用)同じ秘密鍵 dd で、ハッシュ値 z1≢z2(modn)z_1 \not\equiv z_2 \pmod{n} の 2 つのメッセージに同じナンス kk を使って署名 (r,s1)(r, s_1), (r,s2)(r, s_2) を作ったとする。このとき s1≢s2s_1 \not\equiv s_2 であり、

k≡(z1−z2)(s1−s2)−1,d≡(s1k−z1)r−1(modn)k \equiv (z_1 - z_2)(s_1 - s_2)^{-1}, \qquad d \equiv (s_1k - z_1)r^{-1} \pmod{n}

である。したがって公開された情報だけから秘密鍵が計算できる。

証明. sik≡zi+rds_ik \equiv z_i + rd(i=1,2i = 1, 2)を辺々引くと (s1−s2)k≡z1−z2≢0(s_1 - s_2)k \equiv z_1 - z_2 \not\equiv 0。よって s1≢s2s_1 \not\equiv s_2 で、nn は素数なので s1−s2s_1 - s_2 は可逆であり、kk の式を得る。rd≡s1k−z1rd \equiv s_1k - z_1 で 1≤r≤n−11 \leq r \leq n - 1 も可逆なので dd の式を得る。□\square

ナンスが同じなら rr も同じなので、使い回しは署名を見ればわかる。ナンスの一部のビットが偏るだけでも、多数の署名から格子の手法で秘密鍵が復元できることが知られており、実装ではナンスを秘密鍵とメッセージから決定的に作る方式(RFC 6979)なども使われる(25 第4章)。

例 5.8 例 5.2 の曲線(n=79n = 79, G=(1,28)G = (1, 28))で秘密鍵を d=29d = 29 とすると、公開鍵は Q=[29]G=(78,61)Q = [29]G = (78, 61)。ハッシュ値 z1=31z_1 = 31, z2=56z_2 = 56 に同じナンス k=10k = 10 で署名すると、[10]G=(32,59)[10]G = (32, 59) より r=32r = 32、k−1≡8k^{-1} \equiv 8 で

s1≡8(31+32⋅29)=8⋅959≡9,s2≡8(56+32⋅29)=8⋅984≡51(mod79)s_1 \equiv 8(31 + 32 \cdot 29) = 8 \cdot 959 \equiv 9, \qquad s_2 \equiv 8(56 + 32 \cdot 29) = 8 \cdot 984 \equiv 51 \pmod{79}

検証者は (32,9)(32, 9) について w≡9−1≡44w \equiv 9^{-1} \equiv 44, u1≡31⋅44≡21u_1 \equiv 31 \cdot 44 \equiv 21, u2≡32⋅44≡65u_2 \equiv 32 \cdot 44 \equiv 65 を求め、[21]G+[65]Q[21]G + [65]Q の xx 座標が 3232 であることを確かめる(21+65⋅29≡1021 + 65 \cdot 29 \equiv 10 なので確かに [10]G[10]G)。攻撃者は定理 5.7 により k≡(31−56)(9−51)−1≡54⋅47≡10k \equiv (31 - 56)(9 - 51)^{-1} \equiv 54 \cdot 47 \equiv 10、d≡(9⋅10−31)⋅32−1≡59⋅42≡29d \equiv (9 \cdot 10 - 31) \cdot 32^{-1} \equiv 59 \cdot 42 \equiv 29 を得る。

5.3 汎用的な攻撃

この節では ⟨P⟩\langle P \rangle を位数 nn の巡回群、Q∈⟨P⟩Q \in \langle P \rangle とし、群演算と元の比較(ハッシュ表の登録・検索を含む)だけを使う汎用的な (generic) アルゴリズムを考える。どんな群でも同じように働く。

定理 5.9(ベビーステップ・ジャイアントステップ法, baby-step giant-step)M=⌈n⌉M = \lceil \sqrt{n} \rceil とする。点 [j]P[j]P(0≤j<M0 \leq j < M)を計算して表に登録し(ベビーステップ)、i=0,1,…,M−1i = 0, 1, \dots, M - 1 の順に Q−[iM]PQ - [iM]P が表にあるかを調べる(ジャイアントステップ)。このとき Q−[iM]P=[j]PQ - [iM]P = [j]P となる (i,j)(i, j) が必ず見つかり、m=iM+jm = iM + j は QQ の離散対数である。群演算は 2n+O(log⁡n)2\sqrt{n} + O(\log n) 回以下、記憶する点は MM 個である。

証明. Q=[m0]PQ = [m_0]P(0≤m0<n0 \leq m_0 < n)とし m0=iM+jm_0 = iM + j(0≤j<M0 \leq j < M)と割ると、n≤M2n \leq M^2 より i≤(n−1)/M<Mi \leq (n - 1)/M < M なので、この (i,j)(i, j) で一致が起こる。逆に Q−[iM]P=[j]PQ - [iM]P = [j]P なら Q=[iM+j]PQ = [iM + j]P。演算はベビーステップ M−2M - 2 回、[M]P[M]P の計算 O(log⁡n)O(\log n) 回、ジャイアントステップ高々 M−1M - 1 回で、M<n+1M < \sqrt{n} + 1 である。□\square

例 5.10 例 5.8 の公開鍵 Q=(78,61)Q = (78, 61) に適用する。M=9M = 9 で、[9]G=(96,43)[9]G = (96, 43) を引いていくと Q−[9]G=(45,7)Q - [9]G = (45, 7), Q−[18]G=(65,5)Q - [18]G = (65, 5), Q−[27]G=(68,81)=[2]GQ - [27]G = (68, 81) = [2]G となり、d=27+2=29d = 27 + 2 = 29 が求まる。

ポラードの ρ\rho 法 (Pollard's rho method) は、ほぼ同じ手間をわずかな記憶で実現する。⟨P⟩\langle P \rangle を(例えば xx 座標を 3 で割った余りで)3 つに分け、どれに属するかに応じて f(R)=R+P,[2]R,R+Qf(R) = R + P, [2]R, R + Q とおく。Ri+1=f(Ri)R_{i+1} = f(R_i) で点列を作ると、Ri=[ai]P+[bi]QR_i = [a_i]P + [b_i]Q となる ai,bia_i, b_i も同時に追跡できる。群は有限なので、いつか Ri=RjR_i = R_j(i<ji < j)となり以後は周期的になる(形が文字 ρ\rho に似ている)。このとき ai−aj≡m(bj−bi)(modn)a_i - a_j \equiv m(b_j - b_i) \pmod{n} で、nn が素数で bi≢bjb_i \not\equiv b_j なら mm が求まる。一致は RiR_i と R2iR_{2i} を並行して計算して比べれば見つかる(フロイドの方法。点列が添字 μ\mu から周期 λ\lambda で繰り返すなら、λ∣i\lambda \mid i, i≥μi \geq \mu で Ri=R2iR_i = R_{2i})ので、記憶は O(1)O(1) ですむ。

命題 5.11(誕生日の議論, birthday paradox)SS を nn 元集合、f ⁣:S→Sf\colon S \to S を一様ランダムに選んだ写像、x0∈Sx_0 \in S, xi+1=f(xi)x_{i+1} = f(x_i) とし、xT∈{x0,…,xT−1}x_T \in \lbrace x_0, \dots, x_{T-1} \rbrace となる最小の TT を考えると

Pr⁡(T>k)=∏i=1k(1−in)≤exp⁡(−k(k+1)2n),E[T]=∑k≥0Pr⁡(T>k)=πn2+O(1)\Pr(T > k) = \prod_{i=1}^{k}\Bigl(1 - \frac{i}{n}\Bigr) \leq \exp\Bigl(-\frac{k(k+1)}{2n}\Bigr), \qquad \mathbb{E}[T] = \sum_{k \geq 0}\Pr(T > k) = \sqrt{\frac{\pi n}{2}} + O(1)

証明の概略. x0,…,xi−1x_0, \dots, x_{i-1} が相異なるとき、xi−1x_{i-1} での ff の値はまだ使われていないので f(xi−1)f(x_{i-1}) は一様に分布し、xix_i がそれまでの ii 個と異なる確率は 1−i/n1 - i/n。これを掛けて第 1 式を、1−t≤e−t1 - t \leq e^{-t} から不等式を得る。不等式の右辺は e−k2/(2n)e^{-k^2/(2n)} 以下で、これは kk について減少するから、k≥1k \geq 1 の項を区間 [k−1,k][k - 1, k] での積分で上から押さえて E[T]≤1+∫0∞e−x2/(2n)dx=1+πn/2\mathbb{E}[T] \leq 1 + \int_0^\infty e^{-x^2/(2n)} dx = 1 + \sqrt{\pi n/2} を得る(攻撃の手間の評価にはこの上界で足りる)。和を同じ積分で近似すると期待値の主要項が得られる(下からの評価と誤差の評価は省略する。実際には πn/2−1/3+o(1)\sqrt{\pi n/2} - 1/3 + o(1) である)。□\square

ρ\rho 法の ff がランダムな写像のようにふるまうと仮定すると、約 πn/2≈1.25n\sqrt{\pi n/2} \approx 1.25\sqrt{n} 段で一致が起こる。フロイドの方法でも手間は O(n)O(\sqrt{n}) のままで、実際にもほぼこの程度の手間で一致が見つかり、並列化もできる。逆に、群を「ブラックボックス」としてしか使わないアルゴリズムは、nn の最大の素因数 ℓ\ell について ℓ\sqrt{\ell} の定数倍程度の群演算を必要とすることが証明されている(ネチャエフ、ショウプ)。

定理 5.12(ポーリッヒ–ヘルマン法, Pohlig–Hellman)n=∏i=1rℓiein = \prod_{i=1}^{r} \ell_i^{e_i} とする。位数 nn の巡回群の離散対数問題は、位数 ℓi\ell_i の群の離散対数問題を合計 ∑iei\sum_i e_i 個解くことと O(∑ieilog⁡n)O(\sum_i e_i \log n) 回の群演算に帰着される。各段をベビーステップ・ジャイアントステップ法で解けば、群演算は O(∑iei(log⁡n+ℓi))O\bigl(\sum_i e_i(\log n + \sqrt{\ell_i})\bigr) 回である。

証明. Q=[m]PQ = [m]P とする。(1) nn の素因数 ℓ\ell について ℓe\ell^e を nn を割る ℓ\ell の最大べきとし、P′=[n/ℓe]PP' = [n/\ell^e]P, Q′=[n/ℓe]QQ' = [n/\ell^e]Q とおくと、P′P' の位数は ℓe\ell^e で Q′=[m]P′Q' = [m]P' なので、Q′Q' の P′P' を底とする離散対数は m mod ℓem \bmod \ell^e である。すべての ℓiei\ell_i^{e_i} についてこれを求めれば、中国剰余定理(04-algebra 第1章 定理 1.28)で m mod nm \bmod n が定まる。(2) x=m mod ℓe=c0+c1ℓ+⋯+ce−1ℓe−1x = m \bmod \ell^e = c_0 + c_1\ell + \dots + c_{e-1}\ell^{e-1}(0≤cj<ℓ0 \leq c_j < \ell)とし、位数 ℓ\ell の点 T=[ℓe−1]P′T = [\ell^{e-1}]P' をとる。c0,…,cj−1c_0, \dots, c_{j-1} がわかったとして xj=c0+⋯+cj−1ℓj−1x_j = c_0 + \dots + c_{j-1}\ell^{j-1} とおくと、x−xj−cjℓjx - x_j - c_j\ell^j は ℓj+1\ell^{j+1} の倍数なので

[ℓe−1−j](Q′−[xj]P′)=[ℓe−1−j(x−xj)]P′=[cjℓe−1]P′=[cj]T[\ell^{e-1-j}]\bigl(Q' - [x_j]P'\bigr) = [\ell^{e-1-j}(x - x_j)]P' = [c_j\ell^{e-1}]P' = [c_j]T

となり、cjc_j は位数 ℓ\ell の群 ⟨T⟩\langle T \rangle での離散対数である。j=0,…,e−1j = 0, \dots, e - 1 の順に求まり、各段のスカラー倍は O(log⁡n)O(\log n) 回の演算である。□\square

したがって離散対数問題の難しさは位数の最大の素因数で決まる。ベースポイントの位数 nn を素数にとり、ρ\rho 法に耐えるよう大きくするのはこのためである。

例 5.13 F103\mathbb{F}_{103} 上の y2=x3+4x+2y^2 = x^3 + 4x + 2 では E(F103)≅Z/108ZE(\mathbb{F}_{103}) \cong \mathbb{Z}/108\mathbb{Z}(108=22⋅33108 = 2^2 \cdot 3^3)で、P=(4,44)P = (4, 44) が生成元である。Q=(90,15)=[m]PQ = (90, 15) = [m]P とする。ℓ=2\ell = 2 では P′=[27]P=(24,74)P' = [27]P = (24, 74), Q′=[27]Q=(24,29)=−P′Q' = [27]Q = (24, 29) = -P' より m≡3(mod4)m \equiv 3 \pmod{4}。ℓ=3\ell = 3 では P′=[4]P=(11,48)P' = [4]P = (11, 48), Q′=[4]Q=(32,91)Q' = [4]Q = (32, 91), T=[9]P′=(3,12)T = [9]P' = (3, 12), [2]T=(3,91)[2]T = (3, 91) で、[9]Q′=[2]T[9]Q' = [2]T, [3](Q′−[2]P′)=[2]T[3]\bigl(Q' - [2]P'\bigr) = [2]T, Q′−[8]P′=TQ' - [8]P' = T より (c0,c1,c2)=(2,2,1)(c_0, c_1, c_2) = (2, 2, 1)、m≡2+2⋅3+9=17(mod27)m \equiv 2 + 2 \cdot 3 + 9 = 17 \pmod{27}。中国剰余定理より m=71m = 71 である。

5.4 特殊な曲線への攻撃

定義 5.14(埋め込み次数, embedding degree)∣E(Fq)∣\lvert E(\mathbb{F}_q) \rvert を割る素数 nn(n∤qn \nmid q)について、n∣qk−1n \mid q^k - 1 となる最小の k≥1k \geq 1 を埋め込み次数という。Fqk×\mathbb{F}_{q^k}^\times は位数 qk−1q^k - 1 の巡回群なので(04-algebra 第8章 定理 8.40)、これは μn⊂Fqk×\mu_n \subset \mathbb{F}_{q^k}^\times となる最小の kk である。

第3章のヴェイユ対 en ⁣:E[n]×E[n]→μne_n\colon E[n] \times E[n] \to \mu_n(定義 3.30)は双線形・交代的・非退化である(定理 3.31)。メネゼス、岡本、ヴァンストーンは 1991 年に、これで ECDLP を有限体の乗法群の離散対数問題に移せることを示した(3 人の頭文字から MOV 帰着という)。

定理 5.15(MOV 帰着, MOV reduction)P∈E(Fq)P \in E(\mathbb{F}_q) を素数位数 nn(n∤qn \nmid q)の点とし、埋め込み次数 kk は 2 以上とする。このとき E[n]⊂E(Fqk)E[n] \subset E(\mathbb{F}_{q^k}) であり、en(P,T)≠1e_n(P, T) \neq 1 となる T∈E[n]T \in E[n] をとると、R↦en(R,T)R \mapsto e_n(R, T) は単射準同型 ⟨P⟩→μn⊂Fqk×\langle P \rangle \to \mu_n \subset \mathbb{F}_{q^k}^\times である。特に Q=[m]PQ = [m]P なら en(Q,T)=en(P,T)me_n(Q, T) = e_n(P, T)^m で、ECDLP は Fqk×\mathbb{F}_{q^k}^\times の離散対数問題に帰着される。

証明の概略. E[n]⊂E(Fqk)E[n] \subset E(\mathbb{F}_{q^k}) はバラスブラマニアン–コブリッツの定理(n∤q−1n \nmid q - 1 なら E[n]⊂E(Fqr)  ⟺  n∣qr−1E[n] \subset E(\mathbb{F}_{q^r}) \iff n \mid q^r - 1)による(主張のみ)。非退化性より en(P,T)≠1e_n(P, T) \neq 1 となる TT があり、写像は第 1 変数について準同型で、PP の像は位数 nn の元(nn は素数)なので単射である。ene_n はミラーのアルゴリズムで klog⁡qk\log q の多項式時間で計算でき、TT も効率よく作れる(詳細は省略する)。□\square

Fqk×\mathbb{F}_{q^k}^\times の離散対数問題には準指数時間の方法があるので、kk が小さいと ECDLP はずっと易しくなる(フライとリュックは 1994 年に、テイト対で同様の帰着を与えた)。ランダムな曲線では kk は nn と同程度に大きいのが普通である。逆に kk が小さく nn が大きい曲線は、ペアリングを使う暗号(ID ベース暗号や短い署名など)に使われる。

命題 5.16(超特異曲線の埋め込み次数)超特異な E/FqE/\mathbb{F}_q の埋め込み次数は 6 以下である。q=p≥5q = p \geq 5 が素数なら ∣E(Fp)∣=p+1\lvert E(\mathbb{F}_p) \rvert = p + 1 で、埋め込み次数は 2 以下である。

証明. q=prq = p^r, N=∣E(Fq)∣=q+1−aqN = \lvert E(\mathbb{F}_q) \rvert = q + 1 - a_q とし、素数 n∣Nn \mid N(n≠pn \neq p)をとる。n∣qj−1n \mid q^j - 1 となる jj があれば、埋め込み次数は jj 以下である。第4章の超特異性の同値条件(定理 4.17)より p∣aqp \mid a_q である。

q=p≥5q = p \geq 5 なら、ハッセの定理(定理 4.7)より ∣ap∣≤2p<p\lvert a_p \rvert \leq 2\sqrt{p} < p なので ap=0a_p = 0、すなわち N=p+1N = p + 1 で、n∣p+1∣p2−1n \mid p + 1 \mid p^2 - 1 より埋め込み次数は 2 以下である。

一般の場合は、p∣aqp \mid a_q とウォーターハウスの定理(定理 4.21)から aqa_q は次のいずれかである(定理 4.17 と 4.21 は第4章で主張として述べたもので、ここではそれを認める)。aq=0a_q = 0 なら n∣q+1∣q2−1n \mid q + 1 \mid q^2 - 1。aq=±2qa_q = \pm 2\sqrt{q}(rr は偶数)なら N=(q∓1)2N = (\sqrt{q} \mp 1)^2 なので n∣q∓1∣q−1n \mid \sqrt{q} \mp 1 \mid q - 1。aq=±qa_q = \pm\sqrt{q}(rr は偶数)なら (q±1)N=qq±1(\sqrt{q} \pm 1)N = q\sqrt{q} \pm 1 は q3−1q^3 - 1 を割る。aq=±pqa_q = \pm\sqrt{pq}(rr は奇数で p=2,3p = 2, 3)なら N(q+1±pq)=(q+1)2−pqN(q + 1 \pm \sqrt{pq}) = (q + 1)^2 - pq で、これは p=2p = 2 なら q2+1q^2 + 1 で q4−1q^4 - 1 を割り、p=3p = 3 なら q2−q+1q^2 - q + 1 で q3+1q^3 + 1 を、したがって q6−1q^6 - 1 を割る。いずれの場合も j≤6j \leq 6 がとれる。□\square

例 5.17 F67\mathbb{F}_{67} 上の E ⁣:y2=x3+xE\colon y^2 = x^3 + x では ∣E(F67)∣=68=4⋅17\lvert E(\mathbb{F}_{67}) \rvert = 68 = 4 \cdot 17(第4章 定理 4.18(2)。問題 5.5 も参照)で、P=(62,2)P = (62, 2) は位数 17 の点である。Q=[11]P=(59,63)Q = [11]P = (59, 63) とする。67≡−1(mod17)67 \equiv -1 \pmod{17} より k=2k = 2。F672=F67(i)\mathbb{F}_{67^2} = \mathbb{F}_{67}(i)(i2=−1i^2 = -1)上の自己同型 [i](x,y)=(−x,iy)[i](x, y) = (-x, iy)(第3章 例 3.35(1) と同じ形の自己同型)について [i]P=(5,2i)∉⟨P⟩[i]P = (5, 2i) \notin \langle P \rangle なので、E[17]≅(Z/17Z)2E[17] \cong (\mathbb{Z}/17\mathbb{Z})^2(第3章 定理 3.23)より E[17]=⟨P⟩⊕⟨[i]P⟩E[17] = \langle P \rangle \oplus \langle [i]P \rangle で、e17(P,P)=1e_{17}(P, P) = 1 と非退化性から e17(P,[i]P)≠1e_{17}(P, [i]P) \neq 1。定義 3.30 の値は e17(P,[i]P)=11−9ie_{17}(P, [i]P) = 11 - 9i, e17(Q,[i]P)=7−35ie_{17}(Q, [i]P) = 7 - 35i で、確かに (11−9i)11=7−35i(11 - 9i)^{11} = 7 - 35i である。なお PARI/GP の ellweilpairing(E, P, Q, n) は定義 3.30 の en(Q,P)=en(P,Q)−1e_n(Q, P) = e_n(P, Q)^{-1} を返す流儀なので(第3章 定理 3.31 の後の注意)、その出力はこれらの逆数 11+9i11 + 9i, 7+35i7 + 35i になる(逆数どうしでも同じ関係式 (11+9i)11=7+35i(11 + 9i)^{11} = 7 + 35i が成り立つ)。

定理 5.18(アノマラス曲線の ECDLP)∣E(Fp)∣=p\lvert E(\mathbb{F}_p) \rvert = p(ap=1a_p = 1)をみたす E/FpE/\mathbb{F}_p をアノマラス曲線 (anomalous curve) という。アノマラス曲線の離散対数問題は log⁡p\log p の多項式時間で解ける。

1990 年代の終わりに、セマエフ、佐藤–荒木、スマートがそれぞれ独立に示した。スマートの方法の概略を述べる。

証明の概略. p≥5p \geq 5 とし、EE の係数を Z\mathbb{Z} に持ち上げて、還元が EE になる Qp\mathbb{Q}_p 上の曲線 E\mathcal{E} を作る(判別式は pp 進単数なので、これは良い還元をもつ極小モデルである)。第6章の記号で、還元写像 E(Qp)→E(Fp)\mathcal{E}(\mathbb{Q}_p) \to E(\mathbb{F}_p) は全射準同型で核は E1(Qp)E_1(\mathbb{Q}_p) である(定理 6.13)。z=−x/yz = -x/y について、U1,U2∈E1(Qp)U_1, U_2 \in E_1(\mathbb{Q}_p) なら z(U1+U2)≡z(U1)+z(U2)(modp2)z(U_1 + U_2) \equiv z(U_1) + z(U_2) \pmod{p^2} であり(命題 6.17(2))、U↦z(U)/p mod pU \mapsto z(U)/p \bmod p は単射準同型 E1(Qp)/E2(Qp)→FpE_1(\mathbb{Q}_p)/E_2(\mathbb{Q}_p) \to \mathbb{F}_p を与える(系 6.18)。特に [p]E1(Qp)⊂E2(Qp)[p]E_1(\mathbb{Q}_p) \subset E_2(\mathbb{Q}_p) で、E2(Qp)E_2(\mathbb{Q}_p) の点の zz は p2p^2 で割り切れる。R∈E(Fp)R \in E(\mathbb{F}_p) の持ち上げ R∈E(Qp)\mathcal{R} \in \mathcal{E}(\mathbb{Q}_p) をとると、[p]R=O[p]R = O より [p]R∈E1(Qp)[p]\mathcal{R} \in E_1(\mathbb{Q}_p) である。持ち上げを R+S\mathcal{R} + S(S∈E1(Qp)S \in E_1(\mathbb{Q}_p))に替えても [p]S∈E2(Qp)[p]S \in E_2(\mathbb{Q}_p) なので z([p]R) mod p2z([p]\mathcal{R}) \bmod p^2 は変わらず、λ(R)=z([p]R)/p mod p\lambda(R) = z([p]\mathcal{R})/p \bmod p は RR だけで決まる。zz の  mod p2\bmod p^2 での加法性から λ ⁣:E(Fp)≅Z/pZ→Fp\lambda\colon E(\mathbb{F}_p) \cong \mathbb{Z}/p\mathbb{Z} \to \mathbb{F}_p は準同型で、00 か同型である。同型なら、Q=[m]PQ = [m]P について λ(Q)=mλ(P)\lambda(Q) = m\lambda(P) より m≡λ(Q)λ(P)−1(modp)m \equiv \lambda(Q)\lambda(P)^{-1} \pmod{p} となり、離散対数が割り算になる。λ=0\lambda = 0 となるのは E(Qp)\mathcal{E}(\mathbb{Q}_p) が位数 pp の点をもつ特別な持ち上げの場合で、そのときは持ち上げを取り替える。pp 進数の計算は pp の小さなべきを法とする精度で足りる(細部は省略する)。□\square

以上から、暗号に使う曲線は少なくとも、(i) ベースポイントの位数 nn が素数で十分大きい(128 ビットの安全性には n≈2256n \approx 2^{256})、(ii) 余因子 hh が小さい、(iii) 埋め込み次数が大きい、(iv) n≠pn \neq p、をみたすように選ぶ。

5.5 実際に使われている曲線

次の値は規格に載っているもので、本章の執筆にあたり PARI/GP で、pp と nn が素数であること、ベースポイント GG が曲線上にあること、[n]G=O[n]G = O、∣E(Fp)∣=hn\lvert E(\mathbb{F}_p) \rvert = hn(ellcard は 5.6 節の SEA アルゴリズムを使う)を確かめた。

secp256k1(SEC 2):ビットコインなど
  p = 2^256 - 2^32 - 977,   E : y^2 = x^3 + 7
  G = (79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798,
       483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8)
  n = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141,  h = 1

P-256(FIPS 186-5, SP 800-186。secp256r1 とも呼ばれる):TLS など
  p = 2^256 - 2^224 + 2^192 + 2^96 - 1,   E : y^2 = x^3 - 3x + b
  b = 5AC635D8 AA3A93E7 B3EBBD55 769886BC 651D06B0 CC53B0F6 3BCE3C3E 27D2604B
  G = (6B17D1F2 E12C4247 F8BCE6E5 63A440F2 77037D81 2DEB33A0 F4A13945 D898C296,
       4FE342E2 FE1A7F9B 8EE7EB4A 7C0F9E16 2BCE3357 6B315ECE CBB64068 37BF51F5)
  n = FFFFFFFF 00000000 FFFFFFFF FFFFFFFF BCE6FAAD A7179E84 F3B9CAC2 FC632551,  h = 1

Curve25519(RFC 7748):TLS 1.3 の鍵共有 X25519 など
  p = 2^255 - 19,   E : y^2 = x^3 + 486662 x^2 + x(モンゴメリー形)
  ベースポイントの x 座標 = 9
  n = 2^252 + 27742317777372353535851937790883648493,  h = 8

同じく PARI/GP で確かめると、3 つとも n≠pn \neq p で、埋め込み次数はそれぞれ (n−1)/6(n - 1)/6, (n−1)/3(n - 1)/3, (n−1)/6(n - 1)/6 と巨大なので、5.4 節の攻撃は当てはまらない。ρ\rho 法の手間は約 21282^{128}, 21282^{128}, 21262^{126} 回である(RR と −R-R を同一視するなどの改良で定数倍は縮むが、桁はほとんど変わらない)。

モンゴメリー形とラダー

B(A2−4)≠0B(A^2 - 4) \neq 0 として By2=x3+Ax2+xBy^2 = x^3 + Ax^2 + x の形の曲線をモンゴメリー形 (Montgomery form) という(この小節の A,BA, B は短い形の係数とは別物)。(Bx,B2y)(Bx, B^2y) で Y2=X3+ABX2+B2XY^2 = X^3 + ABX^2 + B^2X に移り、加法公式は x3=Bλ2−A−x1−x2x_3 = B\lambda^2 - A - x_1 - x_2, y3=λ(x1−x3)−y1y_3 = \lambda(x_1 - x_3) - y_1(λ\lambda は傾き)になる。点 RR の xx 座標を xRx_R と書く。

命題 5.19(xx 座標だけの公式)モンゴメリー形の曲線上の点 P,Q≠OP, Q \neq O, P≠±QP \neq \pm Q について

xP+Q xP−Q=(xPxQ−1xP−xQ)2,x2P=(xP2−1)24xP(xP2+AxP+1)([2]P≠O)x_{P+Q}\,x_{P-Q} = \left(\frac{x_Px_Q - 1}{x_P - x_Q}\right)^2, \qquad x_{2P} = \frac{(x_P^2 - 1)^2}{4x_P(x_P^2 + Ax_P + 1)} \quad ([2]P \neq O)

が成り立つ。どちらも BB と yy 座標を含まない。

(加法公式に代入し ByP2=xP3+AxP2+xPBy_P^2 = x_P^3 + Ax_P^2 + x_P などで整理する。計算は省略する。計算機で確かめられる。)x=X/Zx = X/Z と書けば逆元なしの式になる。和の公式には差 P−QP - Q の xx 座標が要るので、差がいつも既知になるように計算を組む。

命題 5.20(モンゴメリー・ラダー, Montgomery ladder)m=∑i=0tbi2im = \sum_{i=0}^{t} b_i2^i とし、(R0,R1)=(O,P)(R_0, R_1) = (O, P) から始めて i=t,…,0i = t, \dots, 0 の順に、bi=0b_i = 0 なら (R0,R1)←([2]R0,R0+R1)(R_0, R_1) \leftarrow ([2]R_0, R_0 + R_1)、bi=1b_i = 1 なら (R0,R1)←(R0+R1,[2]R1)(R_0, R_1) \leftarrow (R_0 + R_1, [2]R_1) とする。各段の後で R0=[mi]PR_0 = [m_i]P, R1=[mi+1]PR_1 = [m_i + 1]P(mim_i は命題 5.1 の証明の記号)であり、最後に R0=[m]PR_0 = [m]P となる。

証明. 段の始めに (R0,R1)=([u]P,[u+1]P)(R_0, R_1) = ([u]P, [u + 1]P) なら、段の後は bi=0b_i = 0 で ([2u]P,[2u+1]P)([2u]P, [2u + 1]P)、bi=1b_i = 1 で ([2u+1]P,[2u+2]P)([2u + 1]P, [2u + 2]P)、すなわち ([2u+bi]P,[2u+bi+1]P)([2u + b_i]P, [2u + b_i + 1]P) である。最初は u=0u = 0 で、u=mi+1u = m_{i+1} なら 2u+bi=mi2u + b_i = m_i。□\square

加算 R0+R1R_0 + R_1 の差はいつも PP なので、命題 5.19 により xx 座標だけで計算でき、どの段でも 2 倍算と加算を 1 回ずつ行うので演算の並びが mm に依存しない。X25519(RFC 7748)はこの方法で [m]P[m]P の xx 座標を求める。公式は BB を含まないので、B′/BB'/B が平方数でない B′y2=x3+Ax2+xB'y^2 = x^3 + Ax^2 + x(二次ツイスト, quadratic twist)の点でも同じ計算が成り立ち、Fp\mathbb{F}_p の各元は EE かツイストの点の xx 座標になる(問題 5.6)。xx 座標だけを受け取る実装は知らずにツイスト上で計算しうるので、ツイストの位数にも大きな素因数が要る。Curve25519 のツイストの位数は 4n′4n'(n′=2253−55484635554744707071703875581767296995n' = 2^{253} - 55484635554744707071703875581767296995 は素数。PARI/GP で確認)である。

エドワーズ形

標数 ≠2\neq 2 の体上で a,d≠0a, d \neq 0, a≠da \neq d として、ツイストエドワーズ形 (twisted Edwards form) ax2+y2=1+dx2y2ax^2 + y^2 = 1 + dx^2y^2 の曲線には

(x1,y1)+(x2,y2)=(x1y2+y1x21+dx1x2y1y2, y1y2−ax1x21−dx1x2y1y2)(x_1, y_1) + (x_2, y_2) = \left(\frac{x_1y_2 + y_1x_2}{1 + dx_1x_2y_1y_2}, \ \frac{y_1y_2 - ax_1x_2}{1 - dx_1x_2y_1y_2}\right)

で群構造が入り(単位元 (0,1)(0, 1)、−(x,y)=(−x,y)-(x, y) = (-x, y))、u=(1+y)/(1−y)u = (1 + y)/(1 - y), v=u/xv = u/x によりモンゴメリー形 Bv2=u3+Au2+uBv^2 = u^3 + Au^2 + u(A=2(a+d)/(a−d)A = 2(a + d)/(a - d), B=4/(a−d)B = 4/(a - d))と双有理同値で、この写像は(有限個の例外点を除いて)群の演算を保つ(ここの dd は秘密鍵とは別物。以上は主張)。さらに aa が平方数で dd が平方数でなければ、有理点に対して分母は決して 00 にならず、2 倍算や単位元を含むすべての場合に同じ式が使える(バーンスタイン–ランゲの完全な (complete) 加法公式。問題 5.7)。場合分けのない公式は、入力に依存しない実装に向く。

署名 Ed25519(RFC 8032)の曲線 edwards25519 は、p=2255−19p = 2^{255} - 19 上で a=−1a = -1(p≡1(mod4)p \equiv 1 \pmod{4} より平方数), d=−121665/121666d = -121665/121666(平方数でない。PARI/GP で確認)ととったものである。A=486662A = 486662, B=−486664B = -486664 で、−486664-486664 は Fp\mathbb{F}_p の平方数なので vv の定数倍で B=1B = 1 にでき、Curve25519 と Fp\mathbb{F}_p 上双有理同値になる。ベースポイントの y=4/5y = 4/5 は u=(1+4/5)/(1−4/5)=9u = (1 + 4/5)/(1 - 4/5) = 9 に対応する。

ヒント

実務では、本章の公式やパラメータを自分で実装せず、検証済みのライブラリを使う。受け取った点の検査、秘密に依存しない計算時間、ナンスの生成など、数学的に正しくても安全でない実装の落とし穴が多い(25 第4章)。推奨される曲線や鍵長は改訂されうるので、最新の規格を確認する。

5.6 点の個数の計算:シューフのアルゴリズム

暗号に使う曲線を選ぶには ∣E(Fq)∣\lvert E(\mathbb{F}_q) \rvert を正確に求め、大きな素数 nn で割り切れるかを調べる必要がある。xx ごとに数えると O(q)O(q) 回、ベビーステップ・ジャイアントステップ法でも O(q1/4)O(q^{1/4}) 回(問題 5.3)の計算が要り、q≈2256q \approx 2^{256} では使えない。シューフ(1985 年)は、aq=q+1−∣E(Fq)∣a_q = q + 1 - \lvert E(\mathbb{F}_q) \rvert を小さい素数 ℓ\ell を法として求めることで、log⁡q\log q の多項式時間のアルゴリズムを与えた。

補題 5.21 q=prq = p^r とし、素数 ℓ≠p\ell \neq p について qℓ≡q(modℓ)q_\ell \equiv q \pmod{\ell}, 0≤qℓ<ℓ0 \leq q_\ell < \ell とする。P∈E[ℓ]∖{O}P \in E[\ell] \setminus \lbrace O \rbrace と τ∈{0,1,…,ℓ−1}\tau \in \lbrace 0, 1, \dots, \ell - 1 \rbrace について、ϕq2(P)+[qℓ]P=[τ]ϕq(P)\phi_q^2(P) + [q_\ell]P = [\tau]\phi_q(P) が成り立つための必要十分条件は τ≡aq(modℓ)\tau \equiv a_q \pmod{\ell} である。

証明. 第4章の関係式 ϕq2−[aq]ϕq+[q]=0\phi_q^2 - [a_q]\phi_q + [q] = 0(定理 4.8(2))を PP に適用すると、[ℓ]P=O[\ell]P = O, ϕq(P)∈E[ℓ]\phi_q(P) \in E[\ell] より ϕq2(P)+[qℓ]P=[aq]ϕq(P)\phi_q^2(P) + [q_\ell]P = [a_q]\phi_q(P) なので、τ≡aq\tau \equiv a_q なら成り立つ。逆に成り立てば [τ−aq]ϕq(P)=O[\tau - a_q]\phi_q(P) = O で、ϕq\phi_q は E(F‾q)E(\overline{\mathbb{F}}_q) 上の全単射な準同型(第3章 命題 3.6)なので ϕq(P)\phi_q(P) の位数は ℓ\ell、よって ℓ∣τ−aq\ell \mid \tau - a_q。□\square

E[ℓ]E[\ell] の点の座標は大きな拡大体に入るので、具体的な点は使えない。シューフの方法では、第3章の等分多項式 ψℓ\psi_\ell(ℓ\ell が奇素数なら xx の多項式で、根は E[ℓ]∖{O}E[\ell] \setminus \lbrace O \rbrace の点の xx 座標。第3章 系 3.21)を使い、環 Rℓ=Fq[x,y]/(ψℓ(x),y2−x3−Ax−B)R_\ell = \mathbb{F}_q[x, y]/\bigl(\psi_\ell(x), y^2 - x^3 - Ax - B\bigr) の中で「一般の ℓ\ell 等分点」(x,y)(x, y) について補題 5.21 の両辺を計算する。ϕq(x,y)=(xq,y(x3+Ax+B)(q−1)/2)\phi_q(x, y) = (x^q, y(x^3 + Ax + B)^{(q-1)/2}) なので、すべて ψℓ\psi_\ell を法とする多項式の計算になり、τ=0,…,ℓ−1\tau = 0, \dots, \ell - 1 について両辺が RℓR_\ell で一致するかを調べれば aq mod ℓa_q \bmod \ell が求まる(分母が可逆でなければ ψℓ\psi_\ell の因子が見つかり、それを使って続ける。細部は省略する)。ℓ=2\ell = 2 は別に扱う(問題 5.4)。

積 L=∏ℓL = \prod \ell が 4q4\sqrt{q} を超えるまで ℓ=2,3,5,…\ell = 2, 3, 5, \dots(ℓ≠p\ell \neq p)について求めれば、中国剰余定理で aq mod La_q \bmod L がわかり、ハッセの定理(定理 4.7)より ∣aq∣≤2q<L/2\lvert a_q \rvert \leq 2\sqrt{q} < L/2 なので aqa_q が決まる。素数定理(チェビシェフの評価で足りる)により ℓ\ell は O(log⁡q)O(\log q) までで、ψℓ\psi_\ell の次数は (ℓ2−1)/2(\ell^2 - 1)/2、全体は筆算の乗算で O((log⁡q)8)O((\log q)^8) 回のビット演算でできる(評価の細部は省略する)。エルキースとアトキンの改良を加えた SEA アルゴリズムは PARI/GP の ellcard などで使われ、256 ビットの曲線でも普通の計算機で点の個数が計算できる。

例 5.22 例 5.2 の曲線では 497≈39.44\sqrt{97} \approx 39.4 である。x3+7x^3 + 7 は F97\mathbb{F}_{97} に根をもたない(−7-7 は法 97 で 3 乗数でない)ので a97a_{97} は奇数。シューフの方法で(計算機で)求めると a97≡1(mod3)a_{97} \equiv 1 \pmod{3}, a97≡4(mod5)a_{97} \equiv 4 \pmod{5}, a97≡5(mod7)a_{97} \equiv 5 \pmod{7} である。a97≡19(mod30)a_{97} \equiv 19 \pmod{30} だけでは ∣a∣≤19.7\lvert a \rvert \leq 19.7 の候補が 1919 と −11-11 の 2 つ残るが、ℓ=7\ell = 7 を加えると a97≡19(mod210)a_{97} \equiv 19 \pmod{210} で a97=19a_{97} = 19、∣E(F97)∣=79\lvert E(\mathbb{F}_{97}) \rvert = 79 となり、例 5.2 と一致する。

5.7 レンストラの楕円曲線法

ポラードの p−1p - 1 法(25 暗号と符号 第3章 3.4 節)は、NN の素因数 pp について p−1p - 1 が k=lcm⁡(1,…,B)k = \operatorname{lcm}(1, \dots, B) を割るとき、gcd⁡(2k−1,N)\gcd(2^k - 1, N) から pp を見つける。群 (Z/pZ)×(\mathbb{Z}/p\mathbb{Z})^\times の位数を使うので、p−1p - 1 が大きな素因数をもつと働かない。レンストラはこの群を E(Fp)E(\mathbb{F}_p) に置きかえた。∣E(Fp)∣\lvert E(\mathbb{F}_p) \rvert はハッセの区間の中で曲線ごとに変わるので、うまくいくまで曲線を取り替えられる。

NN を gcd⁡(N,6)=1\gcd(N, 6) = 1 の合成数、a,ba, b を gcd⁡(4a3+27b2,N)=1\gcd(4a^3 + 27b^2, N) = 1 となる整数とする(この節では BB を素因数の大きさの上限に使うので、短い形の係数を小文字で書く)。NN の各素因数 pp について Ep ⁣:y2=x3+ax+bE_p\colon y^2 = x^3 + ax + b は Fp\mathbb{F}_p 上の楕円曲線である。(Z/NZ)2(\mathbb{Z}/N\mathbb{Z})^2 の元と記号 OO を「点」と呼び、点 RR の pp を法とする還元を RpR_p と書く(Op=OO_p = O)。点 R1=(x1,y1)R_1 = (x_1, y_1), R2=(x2,y2)R_2 = (x_2, y_2) の疑似加算 R1⊕R2R_1 \oplus R_2 を次で定める(一方が OO なら他方を返す)。

  1. x1≢x2(modN)x_1 \not\equiv x_2 \pmod{N} のとき:g=gcd⁡(x2−x1,N)≠1g = \gcd(x_2 - x_1, N) \neq 1 なら gg(1<g<N1 < g < N)を出力して止まる。g=1g = 1 なら λ=(y2−y1)(x2−x1)−1\lambda = (y_2 - y_1)(x_2 - x_1)^{-1}。
  2. x1≡x2(modN)x_1 \equiv x_2 \pmod{N} のとき:g=gcd⁡(y1+y2,N)g = \gcd(y_1 + y_2, N) とする。g=Ng = N なら OO を返し、1<g<N1 < g < N なら gg を出力して止まる。g=1g = 1 なら λ=(3x12+a)(y1+y2)−1\lambda = (3x_1^2 + a)(y_1 + y_2)^{-1}。
  3. x3=λ2−x1−x2x_3 = \lambda^2 - x_1 - x_2, y3=λ(x1−x3)−y1y_3 = \lambda(x_1 - x_3) - y_1 として (x3,y3)(x_3, y_3) を返す。

補題 5.23 点 R1,R2R_1, R_2 が、NN のすべての素因数 pp について (R1)p,(R2)p∈Ep(Fp)(R_1)_p, (R_2)_p \in E_p(\mathbb{F}_p) をみたすとする。R1⊕R2R_1 \oplus R_2 が因数を出力せずに点 R3R_3 を返すならば、すべての pp について (R3)p=(R1)p+(R2)p(R_3)_p = (R_1)_p + (R_2)_p である。

証明. 一方が OO なら明らか。手順 1 で g=1g = 1 なら、すべての pp で x1≢x2(modp)x_1 \not\equiv x_2 \pmod{p} なので (R1)p≠±(R2)p(R_1)_p \neq \pm(R_2)_p で、手順 3 は Fp\mathbb{F}_p での加法公式そのものである。手順 2 では、すべての pp で x1≡x2x_1 \equiv x_2 と曲線の式から y1≡±y2(modp)y_1 \equiv \pm y_2 \pmod{p}。g=Ng = N なら、すべての pp で y1≡−y2y_1 \equiv -y_2 なので (R2)p=−(R1)p(R_2)_p = -(R_1)_p で和は OO。g=1g = 1 なら、すべての pp で y1+y2≢0y_1 + y_2 \not\equiv 0 なので y1≡y2y_1 \equiv y_2、(R1)p=(R2)p(R_1)_p = (R_2)_p で、y1+y2≡2y1y_1 + y_2 \equiv 2y_1 より λ\lambda は 2 倍算の傾き (3x12+a)/(2y1)(3x_1^2 + a)/(2y_1) に一致する。□\square

定理 5.24(楕円曲線法で因数が見つかる理由)P=(x0,y0)P = (x_0, y_0) を y02≡x03+ax0+b(modN)y_0^2 \equiv x_0^3 + ax_0 + b \pmod{N} をみたす点、k∈Nk \in \mathbb{N} とする。NN の素因数 p,p′p, p' で、PpP_p の位数は kk を割るが Pp′P_{p'} の位数は kk を割らないものがあるとする。このとき、二進法の加算と 2 倍算を疑似加算に置きかえて [k]P[k]P を計算すると、途中で NN の非自明な約数が出力される。

証明. 因数が出力されなかったとすると、補題 5.23 を二進法の各段に当てはめて(命題 5.1 の帰納法)、最後の点 RR はすべての素因数 ℓ\ell について Rℓ=[k]PℓR_\ell = [k]P_\ell をみたす。Rp=[k]Pp=OR_p = [k]P_p = O だが、(Z/NZ)2(\mathbb{Z}/N\mathbb{Z})^2 の元の還元は OO でないので R=OR = O。一方 Rp′=[k]Pp′≠OR_{p'} = [k]P_{p'} \neq O より R≠OR \neq O となり、矛盾する。□\square

∣Ep(Fp)∣\lvert E_p(\mathbb{F}_p) \rvert を割る素数べきがすべて BB 以下なら、k=lcm⁡(1,…,B)k = \operatorname{lcm}(1, \dots, B) について PpP_p の位数は kk を割る。∣Ep(Fp)∣\lvert E_p(\mathbb{F}_p) \rvert がハッセの区間で「ランダムな整数のようにふるまう」という(証明されていない)仮定のもとで BB と曲線の数を最適に選ぶと、NN の最小の素因数 pp を見つける期待時間は法 NN の演算 exp⁡((2+o(1))log⁡plog⁡log⁡p)\exp\bigl((\sqrt{2} + o(1))\sqrt{\log p \log\log p}\bigr) 回程度になる。手間が最小の素因数の大きさで決まるので、大きな数から比較的小さい素因数を見つけるのに向いている(同じ大きさの 2 つの素数の積である RSA の法には数体ふるい法が使われる)。

例 5.25 N=2065513=1019⋅2027N = 2065513 = 1019 \cdot 2027 とする。1018=2⋅5091018 = 2 \cdot 509, 2026=2⋅10132026 = 2 \cdot 1013 なので p−1p - 1 法は B<509B < 509 では働かない(実際 gcd⁡(22520−1,N)=1\gcd(2^{2520} - 1, N) = 1)。曲線 y2=x3+ax+1y^2 = x^3 + ax + 1 と点 P=(0,1)P = (0, 1) を a=1,2,3,…a = 1, 2, 3, \dots の順に試し、k=lcm⁡(1,…,10)=2520k = \operatorname{lcm}(1, \dots, 10) = 2520 とする。a=1,2a = 1, 2 では因数は見つからない。a=3a = 3 では

∣E(F1019)∣=1032=23⋅3⋅43,ord⁡(P1019)=172,∣E(F2027)∣=2040=23⋅3⋅5⋅17,ord⁡(P2027)=10\lvert E(\mathbb{F}_{1019}) \rvert = 1032 = 2^3 \cdot 3 \cdot 43, \quad \operatorname{ord}(P_{1019}) = 172, \qquad \lvert E(\mathbb{F}_{2027}) \rvert = 2040 = 2^3 \cdot 3 \cdot 5 \cdot 17, \quad \operatorname{ord}(P_{2027}) = 10

で、10∣252010 \mid 2520, 172∤2520172 \nmid 2520 だから定理 5.24 が使える。実際、2520=10011101100022520 = 100111011000_2 に沿って [315]P=(1007897,707423)[315]P = (1007897, 707423) まで進み、これを 2 倍しようとすると 2⋅7074232 \cdot 707423 の逆元が要るが、707423=349⋅2027707423 = 349 \cdot 2027 なので gcd⁡=2027\gcd = 2027 が出力される。法 2027 では [315]P2027=[5]P2027=(478,0)[315]P_{2027} = [5]P_{2027} = (478, 0) が位数 2 の点なので、その 2 倍で分母が消えたのである(法 1019 では [315]P1019=(106,237)[315]P_{1019} = (106, 237) は普通の点)。以上の値は、疑似加算を Python で実装して確かめた。

5.8 量子計算機と同種写像暗号

ショア(1994 年)は、素因数分解と離散対数問題を量子計算機で多項式時間で解くアルゴリズムを与えた。離散対数のアルゴリズムは群演算が効率よく計算できる有限アーベル群一般に使えるので、ECDLP も解ける(主張)。十分な規模の誤り耐性をもつ量子計算機は現時点で実現していないが、実現すれば ECDH・ECDSA は RSA とともに安全でなくなる。2024 年に NIST が定めた耐量子暗号の規格(FIPS 203, 204, 205)は格子とハッシュ関数にもとづく(25 第7章)。

楕円曲線を耐量子暗号に使う試みが同種写像暗号 (isogeny-based cryptography) で、同種な 2 つの超特異楕円曲線の間の同種写像(第3章 定義 3.8)を求める問題の難しさにもとづく。

  • SIDH(ジャオ–デ フェオ、2011 年)は、Fp2\mathbb{F}_{p^2} 上の超特異楕円曲線の間の、次数が小さい素数(ふつうは 2 と 3)のべきの秘密の同種写像を使う鍵共有で、秘密の同種写像によるねじれ点の像も公開する。これにもとづく SIKE は NIST の耐量子暗号の公募で第 4 ラウンドの候補だった。2022 年、キャストリックとデクルは、公開されるねじれ点の像を利用して秘密鍵を古典計算機で効率よく復元する攻撃を発表し(2 つの楕円曲線の積を出発点とする、2 次元のアーベル多様体の間の同種写像を使う)、攻撃はその後さらに改良された。SIDH・SIKE はこれで破られた。
  • CSIDH(キャストリック、ランゲ、マルティンデール、パニー、レネス、2018 年)は、Fp\mathbb{F}_p 上で定義された自己準同型のなす環が Z[−p]\mathbb{Z}[\sqrt{-p}] である超特異楕円曲線の集合への、イデアル類群の作用を使うディフィー–ヘルマン型の鍵共有である。ねじれ点の像を公開しないので 2022 年の攻撃は当てはまらないが、可換な群作用なので量子計算機による準指数時間の攻撃(クーパーバーグのアルゴリズム)があり、安全なパラメータの大きさについては議論が続いている。

まとめ

  • 二進法は [m]P[m]P を 2log⁡2m2\log_2 m 回以下の群演算で計算し、ヤコビ座標なら途中で逆元が要らない。
  • ECDH・エルガマル暗号・ECDSA の正しさは [a]∘[b]=[ab][a] \circ [b] = [ab] と GG の位数から従う。ECDSA のナンスを使い回すと、一次式を解くだけで秘密鍵が復元される。
  • 汎用的な攻撃は O(n)O(\sqrt{n}) 回の群演算を要し(ρ\rho 法は約 πn/2\sqrt{\pi n/2} 段)、ポーリッヒ–ヘルマン法により難しさは位数の最大の素因数で決まる。
  • 埋め込み次数 kk が小さいとヴェイユ対で ECDLP が Fqk×\mathbb{F}_{q^k}^\times に移り(超特異なら k≤6k \leq 6)、アノマラス曲線の ECDLP は多項式時間で解ける。
  • 実際の曲線は、素数位数が大きい・余因子が小さい・埋め込み次数が大きい・アノマラスでない、をみたす。
  • モンゴメリー形のラダーは演算の並びが秘密に依存せず、ツイストエドワーズ形は完全な加法公式をもちうる。
  • シューフのアルゴリズムは E[ℓ]E[\ell] 上の ϕq2−aqϕq+q=0\phi_q^2 - a_q\phi_q + q = 0 から aq mod ℓa_q \bmod \ell を求め、中国剰余定理とハッセの定理で aqa_q を決める。
  • 楕円曲線法は、ある素因数で PP の位数が kk を割り別の素因数で割らないとき必ず因数を見つけ、手間は最小の素因数の大きさで決まる。
  • ショアのアルゴリズムは量子計算機で ECDLP を解く。SIDH は 2022 年に破られたが、CSIDH はその攻撃を受けない。

演習問題

問題 5.1 ★ m=2520m = 2520 とする。(1) 二進法での 2 倍算と加算の回数を求めよ。(2) 2520=211+29−25−232520 = 2^{11} + 2^9 - 2^5 - 2^3 を使い、−P-P がただで求まることを利用すると、回数はどうなるか。

解答

(1) 2520=211+28+27+26+24+23=10011101100022520 = 2^{11} + 2^8 + 2^7 + 2^6 + 2^4 + 2^3 = 100111011000_2 で t=11t = 11, w(m)=6w(m) = 6 なので、命題 5.1 より 2 倍算 11 回、加算 5 回。

(2) 桁 1,0,1,0,0,0,−1,0,−1,0,0,01, 0, 1, 0, 0, 0, -1, 0, -1, 0, 0, 0 を上から使い、各段で 2 倍してから桁が 11 なら PP を、−1-1 なら −P-P を足すと、2 倍算 11 回、加算 3 回になる。00 でない桁が隣り合わないこの展開を NAF (non-adjacent form) といい、00 でない桁の割合は平均で約 1/31/3 である(二進展開では約 1/21/2)。

問題 5.2 ★★ ECDSA でナンスを k2=k1+1k_2 = k_1 + 1 と選んだとする。ハッシュ値 z1,z2z_1, z_2 の署名 (r1,s1)(r_1, s_1), (r2,s2)(r_2, s_2) から、s2r1≢s1r2(modn)s_2r_1 \not\equiv s_1r_2 \pmod{n} ならば

d≡(s1z2−s1s2−s2z1)(s2r1−s1r2)−1(modn)d \equiv (s_1z_2 - s_1s_2 - s_2z_1)(s_2r_1 - s_1r_2)^{-1} \pmod{n}

で秘密鍵が求まることを示せ。例 5.8 の曲線で、z1=31z_1 = 31 の署名 (32,9)(32, 9) と z2=56z_2 = 56 の署名 (65,40)(65, 40) に適用せよ。

解答

s1k1≡z1+r1ds_1k_1 \equiv z_1 + r_1d, s2(k1+1)≡z2+r2ds_2(k_1 + 1) \equiv z_2 + r_2d の第 2 式に s1s_1 を掛けて第 1 式を代入すると、s2(z1+r1d)+s1s2≡s1z2+s1r2ds_2(z_1 + r_1d) + s_1s_2 \equiv s_1z_2 + s_1r_2d、すなわち (s2r1−s1r2)d≡s1z2−s1s2−s2z1(s_2r_1 - s_1r_2)d \equiv s_1z_2 - s_1s_2 - s_2z_1。数値例では右辺 504−360−1240=−1096≡10504 - 360 - 1240 = -1096 \equiv 10、係数 1280−585=695≡631280 - 585 = 695 \equiv 63、63⋅74=4662≡1(mod79)63 \cdot 74 = 4662 \equiv 1 \pmod{79} より d≡10⋅74≡29d \equiv 10 \cdot 74 \equiv 29(実際この署名は k1=10k_1 = 10, k2=11k_2 = 11 で作った)。ナンスは既知の関係をもってもいけない。

問題 5.3 ★★ (1) 離散対数 mm が 0≤m<W0 \leq m < W にあるとわかっているとき、O(W)O(\sqrt{W}) 回の群演算で mm を求めよ。(2) P∈E(Fq)P \in E(\mathbb{F}_q) の位数が 4q4\sqrt{q} より大きいとき、∣E(Fq)∣\lvert E(\mathbb{F}_q) \rvert を O(q1/4)O(q^{1/4}) 回の群演算で決定できることを示せ。

解答

(1) M=⌈W⌉M = \lceil \sqrt{W} \rceil として定理 5.9 と同じことを行う。m=iM+jm = iM + j(0≤j<M0 \leq j < M)なら i≤(W−1)/M<Mi \leq (W - 1)/M < M なので必ず一致が見つかる。

(2) N=∣E(Fq)∣N = \lvert E(\mathbb{F}_q) \rvert, L=⌈q+1−2q⌉L = \lceil q + 1 - 2\sqrt{q} \rceil, W=⌊4q⌋+1W = \lfloor 4\sqrt{q} \rfloor + 1 とおくと、ハッセの定理より N=L+tN = L + t, 0≤t<W0 \leq t < W。[N]P=O[N]P = O より [t]P=−[L]P[t]P = -[L]P なので、(1) で解 tt を O(q1/4)O(q^{1/4}) 回の演算で見つける。2 つの解の差は PP の位数の倍数で、絶対値は 4q4\sqrt{q} 以下なので 00。よって N=L+tN = L + t が決まる。

問題 5.4 ★★ qq を奇数、E ⁣:y2=x3+Ax+BE\colon y^2 = x^3 + Ax + B を Fq\mathbb{F}_q 上の楕円曲線とする。(1) aqa_q が偶数であることと、x3+Ax+Bx^3 + Ax + B が Fq\mathbb{F}_q に根をもつことと、gcd⁡(xq−x,x3+Ax+B)≠1\gcd(x^q - x, x^3 + Ax + B) \neq 1 が同値であることを示せ。(2) 例 5.13 と例 5.2 の曲線で確かめよ。

解答

(1) q+1q + 1 は偶数なので ∣E(Fq)∣=q+1−aq≡aq(mod2)\lvert E(\mathbb{F}_q) \rvert = q + 1 - a_q \equiv a_q \pmod{2}。有限アーベル群の位数が偶数であることと位数 2 の元をもつことは同値(コーシーの定理)で、位数 2 の点は (c,0)(c, 0)(cc は x3+Ax+Bx^3 + Ax + B の Fq\mathbb{F}_q での根)である。xq−x=∏c∈Fq(x−c)x^q - x = \prod_{c \in \mathbb{F}_q}(x - c) なので、gcd⁡≠1\gcd \neq 1 は根をもつことと同値。

(2) 例 5.13 は位数 108 で、803+4⋅80+2=512322=4974⋅10380^3 + 4 \cdot 80 + 2 = 512322 = 4974 \cdot 103 より x=80x = 80 が根である((80,0)=[54]P(80, 0) = [54]P は、例 5.13 の位数 4 の点 P′=[27]PP' = [27]P の 2 倍で、位数 2 の点)。例 5.2 は位数 79 が奇数で、x3+7x^3 + 7 は F97\mathbb{F}_{97} に根をもたない。

問題 5.5 ★★ p≡3(mod4)p \equiv 3 \pmod{4} を素数、E ⁣:y2=x3+xE\colon y^2 = x^3 + x とする。(1) ∣E(Fp)∣=p+1\lvert E(\mathbb{F}_p) \rvert = p + 1 を、点を数えて直接示せ(第4章 定理 4.18(2) の特別な場合である)。(2) p+1p + 1 を割る素数 n>2n > 2 について埋め込み次数は 2 であることを示し、この曲線を ECDLP にもとづく暗号に使うべきでない理由を述べよ。

解答

(1) f(x)=x3+xf(x) = x^3 + x とおく。−1-1 は法 pp で平方剰余でない(04-algebra 第1章 系 1.50(2))ので f(x)=0  ⟺  x=0f(x) = 0 \iff x = 0 で、x=0x = 0 から点が 1 個。x≠0x \neq 0 は {x,−x}\lbrace x, -x \rbrace の (p−1)/2(p - 1)/2 組に分かれ、f(−x)=−f(x)≠0f(-x) = -f(x) \neq 0 だから f(x),f(−x)f(x), f(-x) のちょうど一方が平方数で、各組から点が 2 個出る。OO を加えて 1+(p−1)+1=p+11 + (p - 1) + 1 = p + 1。

(2) n∣p+1∣p2−1n \mid p + 1 \mid p^2 - 1 なので k≤2k \leq 2。k=1k = 1 なら n∣(p+1)−(p−1)=2n \mid (p + 1) - (p - 1) = 2 となり矛盾。よって k=2k = 2 で、定理 5.15 により ECDLP は Fp2×\mathbb{F}_{p^2}^\times の離散対数問題に帰着され、準指数時間の方法で攻撃できる。例 5.17 はこの場合である。

問題 5.6 ★★ pp を奇素数、E ⁣:By2=x3+Ax2+xE\colon By^2 = x^3 + Ax^2 + x と E′ ⁣:B′y2=x3+Ax2+xE'\colon B'y^2 = x^3 + Ax^2 + x をモンゴメリー形の曲線で、B′/BB'/B は Fp\mathbb{F}_p の平方数でないとする。(1) f(u)=u3+Au2+u≠0f(u) = u^3 + Au^2 + u \neq 0 ならば、x=ux = u の点を EE と E′E' の一方だけがちょうど 2 個もつことを示せ。(2) ∣E(Fp)∣+∣E′(Fp)∣=2p+2\lvert E(\mathbb{F}_p) \rvert + \lvert E'(\mathbb{F}_p) \rvert = 2p + 2 を示し、5.5 節の Curve25519 の値(8n+4n′8n + 4n')と比べよ。

解答

(1) x=ux = u の点は、EE では y2=f(u)/By^2 = f(u)/B、E′E' では y2=f(u)/B′y^2 = f(u)/B' の解に対応する。Fp×\mathbb{F}_p^\times の平方数は指数 2 の部分群で、f(u)/B′=(f(u)/B)(B/B′)f(u)/B' = (f(u)/B)(B/B'), B/B′B/B' は平方数でないので、ちょうど一方が平方数であり、その側で解が 2 個、他方で 0 個。

(2) f(u)=0f(u) = 0 なら両方に点 (u,0)(u, 0) が 1 個ずつある。どの uu でも個数の和は 2 なので、アフィンの点の和は 2p2p、OO を加えて 2p+22p + 2。Curve25519 では n=2252+cn = 2^{252} + c, n′=2253−c′n' = 2^{253} - c' で c′=2c+9c' = 2c + 9 が成り立つので、8n+4n′=2256+8c−4c′=2256−36=2p+28n + 4n' = 2^{256} + 8c - 4c' = 2^{256} - 36 = 2p + 2 となり一致する。

問題 5.7 ★★★ KK を標数 ≠2\neq 2 の体、d∈Kd \in K を平方数でない元とする。(x1,y1)(x_1, y_1), (x2,y2)(x_2, y_2) が x2+y2=1+dx2y2x^2 + y^2 = 1 + dx^2y^2 の KK 有理点ならば、1±dx1x2y1y2≠01 \pm dx_1x_2y_1y_2 \neq 0 であることを示せ。また、aa が平方数のツイストエドワーズ形 ax2+y2=1+dx2y2ax^2 + y^2 = 1 + dx^2y^2 でも同じことが成り立つことを導け。

解答

ε=dx1x2y1y2=±1\varepsilon = dx_1x_2y_1y_2 = \pm 1 と仮定すると、x1,y1,x2,y2≠0x_1, y_1, x_2, y_2 \neq 0 で ε2=1\varepsilon^2 = 1。曲線の式から

dx12y12(x22+y22)=dx12y12(1+dx22y22)=dx12y12+ε2=x12+y12dx_1^2y_1^2(x_2^2 + y_2^2) = dx_1^2y_1^2(1 + dx_2^2y_2^2) = dx_1^2y_1^2 + \varepsilon^2 = x_1^2 + y_1^2

で、εx1y1=dx12y12x2y2\varepsilon x_1y_1 = dx_1^2y_1^2x_2y_2 だから(複号同順)

(x1±εy1)2=x12+y12±2εx1y1=dx12y12(x2±y2)2(x_1 \pm \varepsilon y_1)^2 = x_1^2 + y_1^2 \pm 2\varepsilon x_1y_1 = dx_1^2y_1^2(x_2 \pm y_2)^2

x2+y2≠0x_2 + y_2 \neq 0 なら d=((x1+εy1)/(x1y1(x2+y2)))2d = \bigl((x_1 + \varepsilon y_1)/(x_1y_1(x_2 + y_2))\bigr)^2 が平方数になり矛盾するので x2+y2=0x_2 + y_2 = 0、同様に x2−y2=0x_2 - y_2 = 0。標数 ≠2\neq 2 より x2=0x_2 = 0 となり矛盾する。a=c2a = c^2 なら (x,y)↦(cx,y)(x, y) \mapsto (cx, y) で X2+y2=1+(d/a)X2y2X^2 + y^2 = 1 + (d/a)X^2y^2 に移り、d/ad/a は平方数でなく、dx1x2y1y2=(d/a)X1X2y1y2dx_1x_2y_1y_2 = (d/a)X_1X_2y_1y_2 なので前半に帰着する。

問題 5.8 ★★ 例 5.25 の NN で曲線 a=1a = 1(y2=x3+x+1y^2 = x^3 + x + 1, P=(0,1)P = (0, 1))を考える。P1019P_{1019} の位数は 1052=22⋅2631052 = 2^2 \cdot 263、P2027P_{2027} の位数は 1025=52⋅411025 = 5^2 \cdot 41 である。k=lcm⁡(1,…,B)k = \operatorname{lcm}(1, \dots, B) のとき、定理 5.24 で因数が見つかることが保証される最小の BB を求めよ。B≥263B \geq 263 ではどうか。

解答

lcm⁡(1,…,B)\operatorname{lcm}(1, \dots, B) が 525^2 で割り切れるのは B≥25B \geq 25、4141 で割り切れるのは B≥41B \geq 41 のときなので 1025∣k  ⟺  B≥411025 \mid k \iff B \geq 41。同様に 1052∣k  ⟺  B≥2631052 \mid k \iff B \geq 263。よって 41≤B≤26241 \leq B \leq 262 なら定理 5.24(p=2027p = 2027, p′=1019p' = 1019)の仮定がみたされ、B≤40B \leq 40 ではどちらの位数も kk を割らないので、最小の BB は 4141。B≥263B \geq 263 では両方の位数が kk を割るので仮定がみたされず、定理は何も保証しない。ただし定理は十分条件にすぎず、途中の加算で 2 点の xx 座標がたまたま一方の素因数だけを法として一致したり、2 倍する点の yy 座標が一方の素因数だけを法として 00 になったりすれば、因数が出力される(計算機で実行すると、B=41B = 41 では 20272027 が、B=47B = 47 では途中で 10191019 が見つかる)。

この章を読み終えたら

「読了」にすると、学習記録と地図に反映されます。

この章の誤りを報告GitHub で見る