この 章の 目標
スカラー倍を 二進法と 射影座標で 計算でき、その 計算量を 評価できる
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 節の E 1 ( K ) E_1(K) E 1 ( K ) の フィルトレーションの 結果を 先取りする。中国剰余定理は 04-algebra 第1章 、有限体の 乗法群が 巡回群である ことは 04-algebra 第8章 を 参照。
有限体上の 楕円曲線の 群 E ( F q ) E(\mathbb{F}_q) E ( F q ) は、元が 座標の 組で 表され、演算が 第2章の 加法公式(定理 2.6)で 計算できる 有限アーベル群である。1985 年に コブリッツと ミラーが それぞれ独立に、この 群を 離散対数問題にもと づく 暗号に 使う ことを 提案し、現在では ウェブの 暗号通信(TLS)や ビットコインの 署名などで 日常的に 使われている。
暗号に 使えるのは、 m m m から [ m ] P [m]P [ m ] P を 求めるのは 速い(5.1 節)が、 [ m ] P [m]P [ m ] P から m m m を 求める 問題には、一般の 曲線では 指数時間の アルゴリズムしか 知られていないからである。後者は 定理ではなく 経験的な 事実である。特殊な 曲線には 効率の よい 攻撃が あり(5.4 節)、その 仕組みは 第3章の ヴェイユ対や 第6章 の p p p 進的な 理論 その ものである。楕円曲線は 点の 個数の 計算(5.6 節)や 素因数分解(5.7 節)の 道具にもなる。
本章では、5.5 節の モンゴメリー形・エドワーズ形を 除き、曲線を 短い 形 y 2 = x 3 + A x + B y^2 = x^3 + Ax + B y 2 = x 3 + A x + B (標数 ≠ 2 , 3 \neq 2, 3 = 2 , 3 )で 表す。プロトコルの 細部と 実装上の 注意は 25 暗号と 符号 第4章 で 扱い、本章は アルゴリズムの 正しさと 計算量、攻撃が 成り立つ理由を 中心に する。
5.1 スカラー倍の 計算
暗号では m m m が 256 ビット程度に なるので、 P P P を m − 1 m - 1 m − 1 回足す ことは できない。整数の べき乗の 反復二乗法と 同じく、二進展開 m = ∑ i = 0 t b i 2 i m = \sum_{i=0}^{t} b_i2^i m = ∑ i = 0 t b i 2 i (b i ∈ { 0 , 1 } b_i \in \lbrace 0, 1 \rbrace b i ∈ { 0 , 1 } , b t = 1 b_t = 1 b t = 1 , t = ⌊ log 2 m ⌋ t = \lfloor \log_2 m \rfloor t = ⌊ log 2 m ⌋ )を 使う。 二進法 (double-and-add) では、R = O R = O R = O から 始めて i = t , t − 1 , … , 0 i = t, t - 1, \dots, 0 i = t , t − 1 , … , 0 の 順に「 R ← [ 2 ] R R \leftarrow [2]R R ← [ 2 ] R とし、b i = 1 b_i = 1 b i = 1 ならさらに R ← R + P R \leftarrow R + P R ← R + P と する」ことを 繰り返す。
命題 5.1 (二進法)二進法は [ m ] P [m]P [ m ] P を 出力する。最初の 段( O O O の 2 倍と O + P O + P O + P で、計算は 要らない)を 除くと、2 倍算は t t t 回、加算は w ( m ) − 1 w(m) - 1 w ( m ) − 1 回である。ここで w ( m ) w(m) w ( m ) は m m m の 二進展開の 1 1 1 の 個数である。特に 群演算は 2 ⌊ log 2 m ⌋ 2\lfloor \log_2 m \rfloor 2 ⌊ log 2 m ⌋ 回以下である。
証明. m j = ∑ i = j t b i 2 i − j m_j = \sum_{i=j}^{t} b_i2^{i-j} m j = ∑ i = j t b i 2 i − j (m m m の 上から t − j + 1 t - j + 1 t − j + 1 桁)と おくと m t = 1 m_t = 1 m t = 1 , m j = 2 m j + 1 + b j m_j = 2m_{j+1} + b_j m j = 2 m j + 1 + b j , m 0 = m m_0 = m m 0 = m で、i = j i = j i = j の 段の 後で R = [ m j ] P R = [m_j]P R = [ m j ] P と なる ことが 下向きの 帰納法で わかる(段の 始めに R = [ m j + 1 ] P R = [m_{j+1}]P R = [ m j + 1 ] P なら、段の 後は [ 2 m j + 1 + b j ] P [2m_{j+1} + b_j]P [ 2 m j + 1 + b j ] P )。回数は、j < t j < t j < t の 各段で 2 倍算が 1 回、 b j = 1 b_j = 1 b j = 1 の ときだけ加算が 1 回である ことから 従う。 □ \square □
例 5.2 F 97 \mathbb{F}_{97} F 97 上の E : y 2 = x 3 + 7 E\colon y^2 = x^3 + 7 E : y 2 = x 3 + 7 (5.5 節の secp256k1 と 同じ 式)を 考える。すべての x x x に ついて 数えると ∣ E ( F 97 ) ∣ = 79 \lvert E(\mathbb{F}_{97}) \rvert = 79 ∣ E ( F 97 )∣ = 79 で、これは 素数なので O O O 以外の 点は すべて 位数 79 である。 G = ( 1 , 28 ) G = (1, 28) G = ( 1 , 28 ) とし、10 = 1010 2 10 = 1010_2 10 = 101 0 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) G [ 2 ] [ 2 ] G = ( 68 , 81 ) [ 2 ] [ 4 ] G = ( 67 , 19 ) + G [ 5 ] G = ( 20 , 76 ) [ 2 ] [ 10 ] G = ( 32 , 59 )
と なる。この 曲線は 以下の 例でも 使う。
射影座標
逆元の 計算は 乗算より かなり 重いので、実装では 第2章 2.8 節の ヤコビ座標( [ X : Y : Z ] [X : Y : Z] [ X : Y : Z ] を 点 ( X / Z 2 , Y / Z 3 ) (X/Z^2, Y/Z^3) ( X / Z 2 , Y / Z 3 ) と 同一視し、 Z = 0 Z = 0 Z = 0 を O O O と する)を 使い、逆元の 計算を 最後の 1 回だけに する。
5.2 楕円曲線離散対数問題と 暗号方式
定義 5.5 (楕円曲線離散対数問題, elliptic curve discrete logarithm problem)P ∈ E ( F q ) P \in E(\mathbb{F}_q) P ∈ E ( F q ) を 位数 n n n の 点、 Q ∈ ⟨ P ⟩ Q \in \langle P \rangle Q ∈ ⟨ P ⟩ と する。 Q = [ m ] P Q = [m]P Q = [ m ] P と なる m ∈ Z / n Z m \in \mathbb{Z}/n\mathbb{Z} m ∈ Z / n Z を 求める 問題を 楕円曲線離散対数問題(ECDLP)と いい、 m m m を Q Q Q の 離散対数と いう。
暗号では、F p \mathbb{F}_p F p 上の 曲線 E E E 、素数位数 n n n の 点 G G G (ベースポイント , base point)、余因子 (cofactor) h = ∣ E ( F p ) ∣ / n h = \lvert E(\mathbb{F}_p) \rvert / n h = ∣ E ( F p )∣ / n を 公開する(この h h h は 第8章の 高さとは 無関係)。秘密鍵は d ∈ [ 1 , n − 1 ] d \in [1, n - 1] d ∈ [ 1 , n − 1 ] 、公開鍵は Q = [ d ] G Q = [d]G Q = [ d ] G で、秘密鍵を 求める ことは ECDLP その ものである。一般の 曲線に 対する 最良の 攻撃は 5.3 節の 汎用的な 方法で、 n ≈ 2 256 n \approx 2^{256} n ≈ 2 256 なら 約 2 128 2^{128} 2 128 回の 群演算を 要する。 F p × \mathbb{F}_p^\times F p × の 離散対数問題には 準指数時間の 方法(数体 ふる い法など)が あるので、同程度の 安全性には 3072 ビット程度の p p p が 要る(NIST SP 800-57 Part 1 の 目安。推奨は 変わりうる)。
ECDH (楕円曲線ディフィー–ヘルマン鍵共有):A さんは 秘密鍵 d A d_A d A を 選んで Q A = [ d A ] G Q_A = [d_A]G Q A = [ d A ] G を、B さんは d B d_B d B を 選んで Q B = [ d B ] G Q_B = [d_B]G Q B = [ d B ] G を 送る。 [ a ] ∘ [ b ] = [ a b ] [a] \circ [b] = [ab] [ a ] ∘ [ b ] = [ ab ] なので [ d A ] Q B = [ d B ] Q A = [ d A d B ] G [d_A]Q_B = [d_B]Q_A = [d_Ad_B]G [ d A ] Q B = [ d B ] Q A = [ d A d B ] G で、これが 共有された 秘密に なる。盗聴者が G , Q A , Q B G, Q_A, Q_B G , Q A , Q B から [ d A d B ] G [d_Ad_B]G [ d A d B ] G を 求める 問題(計算ディフィー–ヘルマン問題)は、ECDLP が 解ければ 解けるが、逆が 成り立つかは 一般には わかっていない。
楕円曲線エルガマル暗号 :受信者の 公開鍵 Q = [ d ] G Q = [d]G Q = [ d ] G に 点 M M M を 送るには、乱数 k k k を 選んで ( C 1 , C 2 ) = ( [ k ] G , M + [ k ] Q ) (C_1, C_2) = ([k]G, M + [k]Q) ( C 1 , C 2 ) = ([ k ] G , M + [ k ] Q ) を 送る。受信者は C 2 − [ d ] C 1 = M + [ k d ] G − [ d k ] G = M C_2 - [d]C_1 = M + [kd]G - [dk]G = M C 2 − [ d ] C 1 = M + [ k d ] G − [ d k ] G = M で 復元できる( これが 正しさの 証明である)。実際には、同じ 考え方の 鍵共有と 共通鍵暗号を 組み合わせた 方式(ECIES など)が 使われる。
ECDSA :メッセージの ハッシュ値を n n n の ビット長に 切り詰めた 整数を z z z と する(詳細は FIPS 186-5)。秘密鍵 d d d に よる 署名 ( r , s ) (r, s) ( r , s ) は 次のように 作る。
乱数 k ∈ [ 1 , n − 1 ] k \in [1, n - 1] k ∈ [ 1 , n − 1 ] (ナンス , nonce)を 選ぶ。
[ k ] G = ( x 1 , y 1 ) [k]G = (x_1, y_1) [ k ] G = ( x 1 , y 1 ) とし、x 1 x_1 x 1 を 0 ≤ x 1 < p 0 \leq x_1 < p 0 ≤ x 1 < p の 整数と みて r = x 1 m o d n r = x_1 \bmod n r = x 1 mod n と する。 r = 0 r = 0 r = 0 なら 1 に 戻る。
s = k − 1 ( z + r d ) m o d n s = k^{-1}(z + rd) \bmod n s = k − 1 ( z + r d ) mod n と する。 s = 0 s = 0 s = 0 なら 1 に 戻る。
公開鍵 Q = [ d ] G Q = [d]G Q = [ d ] G に よる 検証は 次の とおりである。
1 ≤ r , s ≤ n − 1 1 \leq r, s \leq n - 1 1 ≤ r , s ≤ n − 1 を 確かめ、 w = s − 1 m o d n w = s^{-1} \bmod n w = s − 1 mod n , u 1 = z w m o d n u_1 = zw \bmod n u 1 = z w mod n , u 2 = r w m o d n u_2 = rw \bmod n u 2 = r w mod n と する。
X = [ u 1 ] G + [ u 2 ] Q X = [u_1]G + [u_2]Q X = [ u 1 ] G + [ u 2 ] Q を 計算し、 X ≠ O X \neq O X = O かつ X X X の x x x 座標を n n n で 割った 余りが r r r なら 受理する。
定理 5.6 (ECDSA の 正しさ)上の 手順で 作られた 署名は、検証で 受理される。
証明. s ≢ 0 s \not\equiv 0 s ≡ 0 より w w w が 定まり、 z + r d ≡ s k ( m o d n ) z + rd \equiv sk \pmod{n} z + r d ≡ s k ( mod n ) なので u 1 + u 2 d ≡ w ( z + r d ) ≡ s − 1 s k ≡ k ( m o d n ) u_1 + u_2d \equiv w(z + rd) \equiv s^{-1}sk \equiv k \pmod{n} u 1 + u 2 d ≡ w ( z + r d ) ≡ s − 1 s k ≡ k ( mod n ) 。G G G の 位数は n n n なので X = [ u 1 + u 2 d ] G = [ k ] G X = [u_1 + u_2d]G = [k]G X = [ u 1 + u 2 d ] G = [ k ] G で、1 ≤ k ≤ n − 1 1 \leq k \leq n - 1 1 ≤ k ≤ n − 1 より X ≠ O X \neq O X = O 、その x x x 座標は x 1 x_1 x 1 だから x 1 m o d n = r x_1 \bmod n = r x 1 mod n = r に より 受理される。 □ \square □
これは 正しさの 証明で、偽造できない こと(安全性)の 証明ではない。一方、使い方を 誤ると 安全性が 失われる ことは 証明できる。
定理 5.7 (ナンスの 再利用)同じ 秘密鍵 d d d で、ハッシュ値 z 1 ≢ z 2 ( m o d n ) z_1 \not\equiv z_2 \pmod{n} z 1 ≡ z 2 ( mod n ) の 2 つの メッセージに 同じナンス k k k を 使って 署名 ( r , s 1 ) (r, s_1) ( r , s 1 ) , ( r , s 2 ) (r, s_2) ( r , s 2 ) を 作ったとする。この とき s 1 ≢ s 2 s_1 \not\equiv s_2 s 1 ≡ s 2 であり、
k ≡ ( z 1 − z 2 ) ( s 1 − s 2 ) − 1 , d ≡ ( s 1 k − z 1 ) r − 1 ( m o d n ) k \equiv (z_1 - z_2)(s_1 - s_2)^{-1}, \qquad d \equiv (s_1k - z_1)r^{-1} \pmod{n} k ≡ ( z 1 − z 2 ) ( s 1 − s 2 ) − 1 , d ≡ ( s 1 k − z 1 ) r − 1 ( mod n )
である。したがって 公開された 情報だけから 秘密鍵が 計算できる。
証明. s i k ≡ z i + r d s_ik \equiv z_i + rd s i k ≡ z i + r d (i = 1 , 2 i = 1, 2 i = 1 , 2 )を 辺々 引くと ( s 1 − s 2 ) k ≡ z 1 − z 2 ≢ 0 (s_1 - s_2)k \equiv z_1 - z_2 \not\equiv 0 ( s 1 − s 2 ) k ≡ z 1 − z 2 ≡ 0 。よって s 1 ≢ s 2 s_1 \not\equiv s_2 s 1 ≡ s 2 で、n n n は 素数なので s 1 − s 2 s_1 - s_2 s 1 − s 2 は 可逆であり、 k k k の 式を 得る。 r d ≡ s 1 k − z 1 rd \equiv s_1k - z_1 r d ≡ s 1 k − z 1 で 1 ≤ r ≤ n − 1 1 \leq r \leq n - 1 1 ≤ r ≤ n − 1 も 可逆なので d d d の 式を 得る。 □ \square □
ナンスが 同じなら r r r も 同じなので、使い回しは 署名を 見れば わかる。ナンスの 一部の ビットが 偏るだけでも、多数の 署名から 格子の 手法で 秘密鍵が 復元できる ことが 知られており、実装では ナンスを 秘密鍵と メッセージから 決定的に 作る 方式(RFC 6979)なども 使われる( 25 第4章 )。
例 5.8 例 5.2 の 曲線( n = 79 n = 79 n = 79 , G = ( 1 , 28 ) G = (1, 28) G = ( 1 , 28 ) )で 秘密鍵を d = 29 d = 29 d = 29 と すると、公開鍵は Q = [ 29 ] G = ( 78 , 61 ) Q = [29]G = (78, 61) Q = [ 29 ] G = ( 78 , 61 ) 。ハッシュ値 z 1 = 31 z_1 = 31 z 1 = 31 , z 2 = 56 z_2 = 56 z 2 = 56 に 同じナンス k = 10 k = 10 k = 10 で 署名すると、 [ 10 ] G = ( 32 , 59 ) [10]G = (32, 59) [ 10 ] G = ( 32 , 59 ) より r = 32 r = 32 r = 32 、k − 1 ≡ 8 k^{-1} \equiv 8 k − 1 ≡ 8 で
s 1 ≡ 8 ( 31 + 32 ⋅ 29 ) = 8 ⋅ 959 ≡ 9 , s 2 ≡ 8 ( 56 + 32 ⋅ 29 ) = 8 ⋅ 984 ≡ 51 ( m o d 79 ) 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} s 1 ≡ 8 ( 31 + 32 ⋅ 29 ) = 8 ⋅ 959 ≡ 9 , s 2 ≡ 8 ( 56 + 32 ⋅ 29 ) = 8 ⋅ 984 ≡ 51 ( mod 79 )
検証者は ( 32 , 9 ) (32, 9) ( 32 , 9 ) に ついて w ≡ 9 − 1 ≡ 44 w \equiv 9^{-1} \equiv 44 w ≡ 9 − 1 ≡ 44 , u 1 ≡ 31 ⋅ 44 ≡ 21 u_1 \equiv 31 \cdot 44 \equiv 21 u 1 ≡ 31 ⋅ 44 ≡ 21 , u 2 ≡ 32 ⋅ 44 ≡ 65 u_2 \equiv 32 \cdot 44 \equiv 65 u 2 ≡ 32 ⋅ 44 ≡ 65 を 求め、 [ 21 ] G + [ 65 ] Q [21]G + [65]Q [ 21 ] G + [ 65 ] Q の x x x 座標が 32 32 32 である ことを 確かめる( 21 + 65 ⋅ 29 ≡ 10 21 + 65 \cdot 29 \equiv 10 21 + 65 ⋅ 29 ≡ 10 なので 確かに [ 10 ] G [10]G [ 10 ] G )。攻撃者は 定理 5.7 に より k ≡ ( 31 − 56 ) ( 9 − 51 ) − 1 ≡ 54 ⋅ 47 ≡ 10 k \equiv (31 - 56)(9 - 51)^{-1} \equiv 54 \cdot 47 \equiv 10 k ≡ ( 31 − 56 ) ( 9 − 51 ) − 1 ≡ 54 ⋅ 47 ≡ 10 、d ≡ ( 9 ⋅ 10 − 31 ) ⋅ 32 − 1 ≡ 59 ⋅ 42 ≡ 29 d \equiv (9 \cdot 10 - 31) \cdot 32^{-1} \equiv 59 \cdot 42 \equiv 29 d ≡ ( 9 ⋅ 10 − 31 ) ⋅ 3 2 − 1 ≡ 59 ⋅ 42 ≡ 29 を 得る。
5.3 汎用的な 攻撃
この 節では ⟨ P ⟩ \langle P \rangle ⟨ P ⟩ を 位数 n n n の 巡回群、 Q ∈ ⟨ P ⟩ Q \in \langle P \rangle Q ∈ ⟨ P ⟩ とし、群演算と 元の 比較(ハッシュ表の 登録・検索を 含む)だけを 使う 汎用的な (generic) アルゴリズムを 考える。どんな 群でも 同じように 働く。
定理 5.9 (ベビーステップ・ジャイアントステップ法, baby-step giant-step)M = ⌈ n ⌉ M = \lceil \sqrt{n} \rceil M = ⌈ n ⌉ と する。点 [ j ] P [j]P [ j ] P (0 ≤ j < M 0 \leq j < M 0 ≤ j < M )を 計算して 表に 登録し(ベビーステップ)、 i = 0 , 1 , … , M − 1 i = 0, 1, \dots, M - 1 i = 0 , 1 , … , M − 1 の 順に Q − [ i M ] P Q - [iM]P Q − [ i M ] P が 表に あるかを 調べる(ジャイアントステップ)。この とき Q − [ i M ] P = [ j ] P Q - [iM]P = [j]P Q − [ i M ] P = [ j ] P と なる ( i , j ) (i, j) ( i , j ) が 必ず 見つかり、 m = i M + j m = iM + j m = i M + j は Q Q Q の 離散対数である。群演算は 2 n + O ( log n ) 2\sqrt{n} + O(\log n) 2 n + O ( log n ) 回以下、記憶する 点は M M M 個である。
証明. Q = [ m 0 ] P Q = [m_0]P Q = [ m 0 ] P (0 ≤ m 0 < n 0 \leq m_0 < n 0 ≤ m 0 < n )と し m 0 = i M + j m_0 = iM + j m 0 = i M + j (0 ≤ j < M 0 \leq j < M 0 ≤ j < M )と 割ると、 n ≤ M 2 n \leq M^2 n ≤ M 2 より i ≤ ( n − 1 ) / M < M i \leq (n - 1)/M < M i ≤ ( n − 1 ) / M < M なので、この ( i , j ) (i, j) ( i , j ) で 一致が 起こる。逆に Q − [ i M ] P = [ j ] P Q - [iM]P = [j]P Q − [ i M ] P = [ j ] P なら Q = [ i M + j ] P Q = [iM + j]P Q = [ i M + j ] P 。演算は ベビーステップ M − 2 M - 2 M − 2 回、[ M ] P [M]P [ M ] P の 計算 O ( log n ) O(\log n) O ( log n ) 回、ジャイアントステップ高々 M − 1 M - 1 M − 1 回で、M < n + 1 M < \sqrt{n} + 1 M < n + 1 である。□ \square □
例 5.10 例 5.8 の 公開鍵 Q = ( 78 , 61 ) Q = (78, 61) Q = ( 78 , 61 ) に 適用する。 M = 9 M = 9 M = 9 で、[ 9 ] G = ( 96 , 43 ) [9]G = (96, 43) [ 9 ] G = ( 96 , 43 ) を 引いていくと Q − [ 9 ] G = ( 45 , 7 ) Q - [9]G = (45, 7) Q − [ 9 ] G = ( 45 , 7 ) , Q − [ 18 ] G = ( 65 , 5 ) Q - [18]G = (65, 5) Q − [ 18 ] G = ( 65 , 5 ) , Q − [ 27 ] G = ( 68 , 81 ) = [ 2 ] G Q - [27]G = (68, 81) = [2]G Q − [ 27 ] G = ( 68 , 81 ) = [ 2 ] G と なり、 d = 27 + 2 = 29 d = 27 + 2 = 29 d = 27 + 2 = 29 が 求まる。
ポラードの ρ \rho ρ 法 (Pollard's rho method) は、ほぼ同じ 手間を わずかな 記憶で 実現する。 ⟨ P ⟩ \langle P \rangle ⟨ P ⟩ を(例えば x x x 座標を 3 で 割った 余りで)3 つに 分け、どれに 属するかに 応じて f ( R ) = R + P , [ 2 ] R , R + Q f(R) = R + P, [2]R, R + Q f ( R ) = R + P , [ 2 ] R , R + Q と おく。 R i + 1 = f ( R i ) R_{i+1} = f(R_i) R i + 1 = f ( R i ) で 点列を 作ると、 R i = [ a i ] P + [ b i ] Q R_i = [a_i]P + [b_i]Q R i = [ a i ] P + [ b i ] Q と なる a i , b i a_i, b_i a i , b i も 同時に 追跡できる。群は 有限なので、いつか R i = R j R_i = R_j R i = R j (i < j i < j i < j )と なり以後は 周期的に なる(形が 文字 ρ \rho ρ に 似ている)。この とき a i − a j ≡ m ( b j − b i ) ( m o d n ) a_i - a_j \equiv m(b_j - b_i) \pmod{n} a i − a j ≡ m ( b j − b i ) ( mod n ) で、n n n が 素数で b i ≢ b j b_i \not\equiv b_j b i ≡ b j なら m m m が 求まる。一致は R i R_i R i と R 2 i R_{2i} R 2 i を 並行して 計算して 比べれば 見つかる(フロイドの 方法。点列が 添字 μ \mu μ から 周期 λ \lambda λ で 繰り返すなら、 λ ∣ i \lambda \mid i λ ∣ i , i ≥ μ i \geq \mu i ≥ μ で R i = R 2 i R_i = R_{2i} R i = R 2 i )ので、記憶は O ( 1 ) O(1) O ( 1 ) ですむ。
命題 5.11 (誕生日の 議論, birthday paradox) S S S を n n n 元集合、f : S → S f\colon S \to S f : S → S を 一様ランダムに 選んだ 写像、 x 0 ∈ S x_0 \in S x 0 ∈ S , x i + 1 = f ( x i ) x_{i+1} = f(x_i) x i + 1 = f ( x i ) とし、x T ∈ { x 0 , … , x T − 1 } x_T \in \lbrace x_0, \dots, x_{T-1} \rbrace x T ∈ { x 0 , … , x T − 1 } と なる 最小の T T T を 考えると
Pr ( T > k ) = ∏ i = 1 k ( 1 − i n ) ≤ exp ( − k ( k + 1 ) 2 n ) , E [ T ] = ∑ k ≥ 0 Pr ( T > k ) = π n 2 + 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) Pr ( T > k ) = i = 1 ∏ k ( 1 − n i ) ≤ exp ( − 2 n k ( k + 1 ) ) , E [ T ] = k ≥ 0 ∑ Pr ( T > k ) = 2 π n + O ( 1 )
証明の 概略. x 0 , … , x i − 1 x_0, \dots, x_{i-1} x 0 , … , x i − 1 が 相異なる とき、 x i − 1 x_{i-1} x i − 1 での f f f の 値は まだ 使われていないので f ( x i − 1 ) f(x_{i-1}) f ( x i − 1 ) は 一様に 分布し、 x i x_i x i が それまでの i i i 個と 異なる 確率は 1 − i / n 1 - i/n 1 − i / n 。これを 掛けて 第 1 式を、 1 − t ≤ e − t 1 - t \leq e^{-t} 1 − t ≤ e − t から 不等式を 得る。不等式の 右辺は e − k 2 / ( 2 n ) e^{-k^2/(2n)} e − k 2 / ( 2 n ) 以下で、これは k k k に ついて 減少するから、 k ≥ 1 k \geq 1 k ≥ 1 の 項を 区間 [ k − 1 , k ] [k - 1, k] [ k − 1 , k ] での 積分で 上から 押さえて E [ T ] ≤ 1 + ∫ 0 ∞ e − x 2 / ( 2 n ) d x = 1 + π n / 2 \mathbb{E}[T] \leq 1 + \int_0^\infty e^{-x^2/(2n)} dx = 1 + \sqrt{\pi n/2} E [ T ] ≤ 1 + ∫ 0 ∞ e − x 2 / ( 2 n ) d x = 1 + π n /2 を 得る(攻撃の 手間の 評価には この 上界で 足りる)。和を 同じ 積分で 近似すると 期待値の 主要項が 得られる(下からの 評価と 誤差の 評価は 省略する。実際には π n / 2 − 1 / 3 + o ( 1 ) \sqrt{\pi n/2} - 1/3 + o(1) π n /2 − 1/3 + o ( 1 ) である)。□ \square □
ρ \rho ρ 法の f f f が ランダムな 写像のように ふる まうと 仮定すると、約 π n / 2 ≈ 1.25 n \sqrt{\pi n/2} \approx 1.25\sqrt{n} π n /2 ≈ 1.25 n 段で 一致が 起こる。フロイドの 方法でも 手間は O ( n ) O(\sqrt{n}) O ( n ) の ままで、実際にも ほぼ この 程度の 手間で 一致が 見つかり、並列化も できる。逆に、群を「ブラックボックス」と してしか 使わない アルゴリズムは、 n n n の 最大の 素因数 ℓ \ell ℓ に ついて ℓ \sqrt{\ell} ℓ の 定数倍程度の 群演算を 必要と する ことが 証明されている(ネチャエフ、ショウプ)。
定理 5.12 (ポーリッヒ–ヘルマン法, Pohlig–Hellman)n = ∏ i = 1 r ℓ i e i n = \prod_{i=1}^{r} \ell_i^{e_i} n = ∏ i = 1 r ℓ i e i と する。位数 n n n の 巡回群の 離散対数問題は、位数 ℓ i \ell_i ℓ i の 群の 離散対数問題を 合計 ∑ i e i \sum_i e_i ∑ i e i 個解く ことと O ( ∑ i e i log n ) O(\sum_i e_i \log n) O ( ∑ i e i log n ) 回の 群演算に 帰着される。各段を ベビーステップ・ジャイアントステップ法で 解けば、群演算は O ( ∑ i e i ( log n + ℓ i ) ) O\bigl(\sum_i e_i(\log n + \sqrt{\ell_i})\bigr) O ( ∑ i e i ( log n + ℓ i ) ) 回である。
証明. Q = [ m ] P Q = [m]P Q = [ m ] P と する。(1) n n n の 素因数 ℓ \ell ℓ に ついて ℓ e \ell^e ℓ e を n n n を 割る ℓ \ell ℓ の 最大べきとし、 P ′ = [ n / ℓ e ] P P' = [n/\ell^e]P P ′ = [ n / ℓ e ] P , Q ′ = [ n / ℓ e ] Q Q' = [n/\ell^e]Q Q ′ = [ n / ℓ e ] Q と おくと、 P ′ P' P ′ の 位数は ℓ e \ell^e ℓ e で Q ′ = [ m ] P ′ Q' = [m]P' Q ′ = [ m ] P ′ なので、Q ′ Q' Q ′ の P ′ P' P ′ を 底と する 離散対数は m m o d ℓ e m \bmod \ell^e m mod ℓ e である。すべての ℓ i e i \ell_i^{e_i} ℓ i e i に ついて これを 求めれば、中国剰余定理( 04-algebra 第1章 定理 1.28)で m m o d n m \bmod n m mod n が 定まる。(2) x = m m o d ℓ e = c 0 + c 1 ℓ + ⋯ + c e − 1 ℓ e − 1 x = m \bmod \ell^e = c_0 + c_1\ell + \dots + c_{e-1}\ell^{e-1} x = m mod ℓ e = c 0 + c 1 ℓ + ⋯ + c e − 1 ℓ e − 1 (0 ≤ c j < ℓ 0 \leq c_j < \ell 0 ≤ c j < ℓ )とし、位数 ℓ \ell ℓ の 点 T = [ ℓ e − 1 ] P ′ T = [\ell^{e-1}]P' T = [ ℓ e − 1 ] P ′ を とる。 c 0 , … , c j − 1 c_0, \dots, c_{j-1} c 0 , … , c j − 1 が わかったとして x j = c 0 + ⋯ + c j − 1 ℓ j − 1 x_j = c_0 + \dots + c_{j-1}\ell^{j-1} x j = c 0 + ⋯ + c j − 1 ℓ j − 1 と おくと、 x − x j − c j ℓ j x - x_j - c_j\ell^j x − x j − c j ℓ j は ℓ j + 1 \ell^{j+1} ℓ j + 1 の 倍数なので
[ ℓ e − 1 − j ] ( Q ′ − [ x j ] P ′ ) = [ ℓ e − 1 − j ( x − x j ) ] P ′ = [ c j ℓ e − 1 ] P ′ = [ c j ] 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 [ ℓ e − 1 − j ] ( Q ′ − [ x j ] P ′ ) = [ ℓ e − 1 − j ( x − x j )] P ′ = [ c j ℓ e − 1 ] P ′ = [ c j ] T
と なり、 c j c_j c j は 位数 ℓ \ell ℓ の 群 ⟨ T ⟩ \langle T \rangle ⟨ T ⟩ での 離散対数である。 j = 0 , … , e − 1 j = 0, \dots, e - 1 j = 0 , … , e − 1 の 順に 求まり、各段の スカラー倍は O ( log n ) O(\log n) O ( log n ) 回の 演算である。 □ \square □
したがって 離散対数問題の 難しさは 位数の 最大の 素因数で 決まる。ベースポイントの 位数 n n n を 素数に とり、 ρ \rho ρ 法に 耐えるよう 大きく するのは この ためである。
例 5.13 F 103 \mathbb{F}_{103} F 103 上の y 2 = x 3 + 4 x + 2 y^2 = x^3 + 4x + 2 y 2 = x 3 + 4 x + 2 では E ( F 103 ) ≅ Z / 108 Z E(\mathbb{F}_{103}) \cong \mathbb{Z}/108\mathbb{Z} E ( F 103 ) ≅ Z /108 Z (108 = 2 2 ⋅ 3 3 108 = 2^2 \cdot 3^3 108 = 2 2 ⋅ 3 3 )で、P = ( 4 , 44 ) P = (4, 44) P = ( 4 , 44 ) が 生成元である。 Q = ( 90 , 15 ) = [ m ] P Q = (90, 15) = [m]P Q = ( 90 , 15 ) = [ m ] P と する。 ℓ = 2 \ell = 2 ℓ = 2 では P ′ = [ 27 ] P = ( 24 , 74 ) P' = [27]P = (24, 74) P ′ = [ 27 ] P = ( 24 , 74 ) , Q ′ = [ 27 ] Q = ( 24 , 29 ) = − P ′ Q' = [27]Q = (24, 29) = -P' Q ′ = [ 27 ] Q = ( 24 , 29 ) = − P ′ より m ≡ 3 ( m o d 4 ) m \equiv 3 \pmod{4} m ≡ 3 ( mod 4 ) 。ℓ = 3 \ell = 3 ℓ = 3 では P ′ = [ 4 ] P = ( 11 , 48 ) P' = [4]P = (11, 48) P ′ = [ 4 ] P = ( 11 , 48 ) , Q ′ = [ 4 ] Q = ( 32 , 91 ) Q' = [4]Q = (32, 91) Q ′ = [ 4 ] Q = ( 32 , 91 ) , T = [ 9 ] P ′ = ( 3 , 12 ) T = [9]P' = (3, 12) T = [ 9 ] P ′ = ( 3 , 12 ) , [ 2 ] T = ( 3 , 91 ) [2]T = (3, 91) [ 2 ] T = ( 3 , 91 ) で、[ 9 ] Q ′ = [ 2 ] T [9]Q' = [2]T [ 9 ] Q ′ = [ 2 ] T , [ 3 ] ( Q ′ − [ 2 ] P ′ ) = [ 2 ] T [3]\bigl(Q' - [2]P'\bigr) = [2]T [ 3 ] ( Q ′ − [ 2 ] P ′ ) = [ 2 ] T , Q ′ − [ 8 ] P ′ = T Q' - [8]P' = T Q ′ − [ 8 ] P ′ = T より ( c 0 , c 1 , c 2 ) = ( 2 , 2 , 1 ) (c_0, c_1, c_2) = (2, 2, 1) ( c 0 , c 1 , c 2 ) = ( 2 , 2 , 1 ) 、m ≡ 2 + 2 ⋅ 3 + 9 = 17 ( m o d 27 ) m \equiv 2 + 2 \cdot 3 + 9 = 17 \pmod{27} m ≡ 2 + 2 ⋅ 3 + 9 = 17 ( mod 27 ) 。中国剰余定理より m = 71 m = 71 m = 71 である。
5.4 特殊な 曲線への 攻撃
定義 5.14 (埋め込み次数, embedding degree)∣ E ( F q ) ∣ \lvert E(\mathbb{F}_q) \rvert ∣ E ( F q )∣ を 割る 素数 n n n (n ∤ q n \nmid q n ∤ q )に ついて、 n ∣ q k − 1 n \mid q^k - 1 n ∣ q k − 1 と なる 最小の k ≥ 1 k \geq 1 k ≥ 1 を 埋め込み次数と いう。 F q k × \mathbb{F}_{q^k}^\times F q k × は 位数 q k − 1 q^k - 1 q k − 1 の 巡回群なので( 04-algebra 第8章 定理 8.40)、これは μ n ⊂ F q k × \mu_n \subset \mathbb{F}_{q^k}^\times μ n ⊂ F q k × と なる 最小の k k k である。
第3章 の ヴェイユ対 e n : E [ n ] × E [ n ] → μ n e_n\colon E[n] \times E[n] \to \mu_n e n : E [ n ] × E [ n ] → μ n (定義 3.30)は 双線形・交代的・非退化である(定理 3.31)。メネゼス、岡本、ヴァンストーンは 1991 年に、これで ECDLP を 有限体の 乗法群の 離散対数問題に 移せる ことを 示した(3 人の 頭文字から MOV 帰着と いう)。
定理 5.15 (MOV 帰着, MOV reduction)P ∈ E ( F q ) P \in E(\mathbb{F}_q) P ∈ E ( F q ) を 素数位数 n n n (n ∤ q n \nmid q n ∤ q )の 点とし、埋め込み次数 k k k は 2 以上と する。この とき E [ n ] ⊂ E ( F q k ) E[n] \subset E(\mathbb{F}_{q^k}) E [ n ] ⊂ E ( F q k ) であり、e n ( P , T ) ≠ 1 e_n(P, T) \neq 1 e n ( P , T ) = 1 と なる T ∈ E [ n ] T \in E[n] T ∈ E [ n ] を とると、 R ↦ e n ( R , T ) R \mapsto e_n(R, T) R ↦ e n ( R , T ) は 単射準同型 ⟨ P ⟩ → μ n ⊂ F q k × \langle P \rangle \to \mu_n \subset \mathbb{F}_{q^k}^\times ⟨ P ⟩ → μ n ⊂ F q k × である。特に Q = [ m ] P Q = [m]P Q = [ m ] P なら e n ( Q , T ) = e n ( P , T ) m e_n(Q, T) = e_n(P, T)^m e n ( Q , T ) = e n ( P , T ) m で、ECDLP は F q k × \mathbb{F}_{q^k}^\times F q k × の 離散対数問題に 帰着される。
証明の 概略. E [ n ] ⊂ E ( F q k ) E[n] \subset E(\mathbb{F}_{q^k}) E [ n ] ⊂ E ( F q k ) は バラスブラマニアン–コブリッツの 定理( n ∤ q − 1 n \nmid q - 1 n ∤ q − 1 なら E [ n ] ⊂ E ( F q r ) ⟺ n ∣ q r − 1 E[n] \subset E(\mathbb{F}_{q^r}) \iff n \mid q^r - 1 E [ n ] ⊂ E ( F q r ) ⟺ n ∣ q r − 1 )に よる(主張のみ)。非退化性より e n ( P , T ) ≠ 1 e_n(P, T) \neq 1 e n ( P , T ) = 1 と なる T T T が あり、写像は 第 1 変数に ついて 準同型で、 P P P の 像は 位数 n n n の 元( n n n は 素数)なので 単射である。 e n e_n e n は ミラーの アルゴリズムで k log q k\log q k log q の 多項式時間で 計算でき、 T T T も 効率よく 作れる(詳細は 省略する)。 □ \square □
F q k × \mathbb{F}_{q^k}^\times F q k × の 離散対数問題には 準指数時間の 方法が あるので、 k k k が 小さいと ECDLP は ずっと 易しくなる(フライと リュックは 1994 年に、テイト対で 同様の 帰着を 与えた)。ランダムな 曲線では k k k は n n n と 同程度に 大きいのが 普通である。逆に k k k が 小さく n n n が 大きい 曲線は、ペアリングを 使う 暗号(ID ベース暗号や 短い 署名など)に 使われる。
命題 5.16 (超 特異曲線の 埋め込み次数)超 特異な E / F q E/\mathbb{F}_q E / F q の 埋め込み次数は 6 以下である。 q = p ≥ 5 q = p \geq 5 q = p ≥ 5 が 素数なら ∣ E ( F p ) ∣ = p + 1 \lvert E(\mathbb{F}_p) \rvert = p + 1 ∣ E ( F p )∣ = p + 1 で、埋め込み次数は 2 以下である。
証明. q = p r q = p^r q = p r , N = ∣ E ( F q ) ∣ = q + 1 − a q N = \lvert E(\mathbb{F}_q) \rvert = q + 1 - a_q N = ∣ E ( F q )∣ = q + 1 − a q とし、素数 n ∣ N n \mid N n ∣ N (n ≠ p n \neq p n = p )を とる。 n ∣ q j − 1 n \mid q^j - 1 n ∣ q j − 1 と なる j j j が あれば、埋め込み次数は j j j 以下である。第4章 の 超 特異性の 同値条件(定理 4.17)より p ∣ a q p \mid a_q p ∣ a q である。
q = p ≥ 5 q = p \geq 5 q = p ≥ 5 なら、ハッセの 定理(定理 4.7)より ∣ a p ∣ ≤ 2 p < p \lvert a_p \rvert \leq 2\sqrt{p} < p ∣ a p ∣ ≤ 2 p < p なので a p = 0 a_p = 0 a p = 0 、すな わち N = p + 1 N = p + 1 N = p + 1 で、n ∣ p + 1 ∣ p 2 − 1 n \mid p + 1 \mid p^2 - 1 n ∣ p + 1 ∣ p 2 − 1 より 埋め込み次数は 2 以下である。
一般の 場合は、 p ∣ a q p \mid a_q p ∣ a q と ウォーターハウスの 定理(定理 4.21)から a q a_q a q は 次の いずれかである(定理 4.17 と 4.21 は 第4章で 主張と して 述べた もので、ここでは それを 認める)。 a q = 0 a_q = 0 a q = 0 なら n ∣ q + 1 ∣ q 2 − 1 n \mid q + 1 \mid q^2 - 1 n ∣ q + 1 ∣ q 2 − 1 。a q = ± 2 q a_q = \pm 2\sqrt{q} a q = ± 2 q (r r r は 偶数)なら N = ( q ∓ 1 ) 2 N = (\sqrt{q} \mp 1)^2 N = ( q ∓ 1 ) 2 なので n ∣ q ∓ 1 ∣ q − 1 n \mid \sqrt{q} \mp 1 \mid q - 1 n ∣ q ∓ 1 ∣ q − 1 。a q = ± q a_q = \pm\sqrt{q} a q = ± q (r r r は 偶数)なら ( q ± 1 ) N = q q ± 1 (\sqrt{q} \pm 1)N = q\sqrt{q} \pm 1 ( q ± 1 ) N = q q ± 1 は q 3 − 1 q^3 - 1 q 3 − 1 を 割る。 a q = ± p q a_q = \pm\sqrt{pq} a q = ± pq (r r r は 奇数で p = 2 , 3 p = 2, 3 p = 2 , 3 )なら N ( q + 1 ± p q ) = ( q + 1 ) 2 − p q N(q + 1 \pm \sqrt{pq}) = (q + 1)^2 - pq N ( q + 1 ± pq ) = ( q + 1 ) 2 − pq で、これは p = 2 p = 2 p = 2 なら q 2 + 1 q^2 + 1 q 2 + 1 で q 4 − 1 q^4 - 1 q 4 − 1 を 割り、 p = 3 p = 3 p = 3 なら q 2 − q + 1 q^2 - q + 1 q 2 − q + 1 で q 3 + 1 q^3 + 1 q 3 + 1 を、したがって q 6 − 1 q^6 - 1 q 6 − 1 を 割る。いずれの 場合も j ≤ 6 j \leq 6 j ≤ 6 が とれる。 □ \square □
例 5.17 F 67 \mathbb{F}_{67} F 67 上の E : y 2 = x 3 + x E\colon y^2 = x^3 + x E : y 2 = x 3 + x では ∣ E ( F 67 ) ∣ = 68 = 4 ⋅ 17 \lvert E(\mathbb{F}_{67}) \rvert = 68 = 4 \cdot 17 ∣ E ( F 67 )∣ = 68 = 4 ⋅ 17 (第4章 定理 4.18(2)。問題 5.5 も 参照)で、 P = ( 62 , 2 ) P = (62, 2) P = ( 62 , 2 ) は 位数 17 の 点である。 Q = [ 11 ] P = ( 59 , 63 ) Q = [11]P = (59, 63) Q = [ 11 ] P = ( 59 , 63 ) と する。 67 ≡ − 1 ( m o d 17 ) 67 \equiv -1 \pmod{17} 67 ≡ − 1 ( mod 17 ) より k = 2 k = 2 k = 2 。F 67 2 = F 67 ( i ) \mathbb{F}_{67^2} = \mathbb{F}_{67}(i) F 6 7 2 = F 67 ( i ) (i 2 = − 1 i^2 = -1 i 2 = − 1 )上の 自己同型 [ i ] ( x , y ) = ( − x , i y ) [i](x, y) = (-x, iy) [ i ] ( x , y ) = ( − x , i y ) (第3章 例 3.35(1) と 同じ 形の 自己同型)に ついて [ i ] P = ( 5 , 2 i ) ∉ ⟨ P ⟩ [i]P = (5, 2i) \notin \langle P \rangle [ i ] P = ( 5 , 2 i ) ∈ / ⟨ P ⟩ なので、E [ 17 ] ≅ ( Z / 17 Z ) 2 E[17] \cong (\mathbb{Z}/17\mathbb{Z})^2 E [ 17 ] ≅ ( Z /17 Z ) 2 (第3章 定理 3.23)より E [ 17 ] = ⟨ P ⟩ ⊕ ⟨ [ i ] P ⟩ E[17] = \langle P \rangle \oplus \langle [i]P \rangle E [ 17 ] = ⟨ P ⟩ ⊕ ⟨[ i ] P ⟩ で、e 17 ( P , P ) = 1 e_{17}(P, P) = 1 e 17 ( P , P ) = 1 と 非退化性から e 17 ( P , [ i ] P ) ≠ 1 e_{17}(P, [i]P) \neq 1 e 17 ( P , [ i ] P ) = 1 。定義 3.30 の 値は e 17 ( P , [ i ] P ) = 11 − 9 i e_{17}(P, [i]P) = 11 - 9i e 17 ( P , [ i ] P ) = 11 − 9 i , e 17 ( Q , [ i ] P ) = 7 − 35 i e_{17}(Q, [i]P) = 7 - 35i e 17 ( Q , [ i ] P ) = 7 − 35 i で、確かに ( 11 − 9 i ) 11 = 7 − 35 i (11 - 9i)^{11} = 7 - 35i ( 11 − 9 i ) 11 = 7 − 35 i である。な お PARI/GP の ellweilpairing(E, P, Q, n) は 定義 3.30 の e n ( Q , P ) = e n ( P , Q ) − 1 e_n(Q, P) = e_n(P, Q)^{-1} e n ( Q , P ) = e n ( P , Q ) − 1 を 返す流儀なので(第3章 定理 3.31 の 後の 注意)、その 出力は これらの 逆数 11 + 9 i 11 + 9i 11 + 9 i , 7 + 35 i 7 + 35i 7 + 35 i に なる(逆数どうしでも 同じ 関係式 ( 11 + 9 i ) 11 = 7 + 35 i (11 + 9i)^{11} = 7 + 35i ( 11 + 9 i ) 11 = 7 + 35 i が 成り立つ)。
定理 5.18 (アノマラス曲線の ECDLP)∣ E ( F p ) ∣ = p \lvert E(\mathbb{F}_p) \rvert = p ∣ E ( F p )∣ = p (a p = 1 a_p = 1 a p = 1 )を みたす E / F p E/\mathbb{F}_p E / F p を アノマラス曲線 (anomalous curve) と いう。アノマラス曲線の 離散対数問題は log p \log p log p の 多項式時間で 解ける。
1990 年代の 終わりに、セマエフ、佐藤–荒木、スマートが それぞれ独立に 示した。スマートの 方法の 概略を 述べる。
証明の 概略. p ≥ 5 p \geq 5 p ≥ 5 とし、E E E の 係数を Z \mathbb{Z} Z に 持ち上げて、還元が E E E に なる Q p \mathbb{Q}_p Q p 上の 曲線 E \mathcal{E} E を 作る(判別式は p p p 進単数なので、これは 良い 還元を もつ 極小モデルである)。 第6章 の 記号で、還元写像 E ( Q p ) → E ( F p ) \mathcal{E}(\mathbb{Q}_p) \to E(\mathbb{F}_p) E ( Q p ) → E ( F p ) は 全射準同型で 核は E 1 ( Q p ) E_1(\mathbb{Q}_p) E 1 ( Q p ) である(定理 6.13)。z = − x / y z = -x/y z = − x / y に ついて、 U 1 , U 2 ∈ E 1 ( Q p ) U_1, U_2 \in E_1(\mathbb{Q}_p) U 1 , U 2 ∈ E 1 ( Q p ) なら z ( U 1 + U 2 ) ≡ z ( U 1 ) + z ( U 2 ) ( m o d p 2 ) z(U_1 + U_2) \equiv z(U_1) + z(U_2) \pmod{p^2} z ( U 1 + U 2 ) ≡ z ( U 1 ) + z ( U 2 ) ( mod p 2 ) であり(命題 6.17(2))、U ↦ z ( U ) / p m o d p U \mapsto z(U)/p \bmod p U ↦ z ( U ) / p mod p は 単射準同型 E 1 ( Q p ) / E 2 ( Q p ) → F p E_1(\mathbb{Q}_p)/E_2(\mathbb{Q}_p) \to \mathbb{F}_p E 1 ( Q p ) / E 2 ( Q p ) → F p を 与える(系 6.18)。特に [ p ] E 1 ( Q p ) ⊂ E 2 ( Q p ) [p]E_1(\mathbb{Q}_p) \subset E_2(\mathbb{Q}_p) [ p ] E 1 ( Q p ) ⊂ E 2 ( Q p ) で、E 2 ( Q p ) E_2(\mathbb{Q}_p) E 2 ( Q p ) の 点の z z z は p 2 p^2 p 2 で 割り切れる。 R ∈ E ( F p ) R \in E(\mathbb{F}_p) R ∈ E ( F p ) の 持ち上げ R ∈ E ( Q p ) \mathcal{R} \in \mathcal{E}(\mathbb{Q}_p) R ∈ E ( Q p ) を とると、 [ p ] R = O [p]R = O [ p ] R = O より [ p ] R ∈ E 1 ( Q p ) [p]\mathcal{R} \in E_1(\mathbb{Q}_p) [ p ] R ∈ E 1 ( Q p ) である。持ち上げを R + S \mathcal{R} + S R + S (S ∈ E 1 ( Q p ) S \in E_1(\mathbb{Q}_p) S ∈ E 1 ( Q p ) )に 替えても [ p ] S ∈ E 2 ( Q p ) [p]S \in E_2(\mathbb{Q}_p) [ p ] S ∈ E 2 ( Q p ) なので z ( [ p ] R ) m o d p 2 z([p]\mathcal{R}) \bmod p^2 z ([ p ] R ) mod p 2 は 変わらず、 λ ( R ) = z ( [ p ] R ) / p m o d p \lambda(R) = z([p]\mathcal{R})/p \bmod p λ ( R ) = z ([ p ] R ) / p mod p は R R R だけで 決まる。 z z z の m o d p 2 \bmod p^2 mod p 2 での 加法性から λ : E ( F p ) ≅ Z / p Z → F p \lambda\colon E(\mathbb{F}_p) \cong \mathbb{Z}/p\mathbb{Z} \to \mathbb{F}_p λ : E ( F p ) ≅ Z / p Z → F p は 準同型で、 0 0 0 か 同型である。同型なら、 Q = [ m ] P Q = [m]P Q = [ m ] P に ついて λ ( Q ) = m λ ( P ) \lambda(Q) = m\lambda(P) λ ( Q ) = mλ ( P ) より m ≡ λ ( Q ) λ ( P ) − 1 ( m o d p ) m \equiv \lambda(Q)\lambda(P)^{-1} \pmod{p} m ≡ λ ( Q ) λ ( P ) − 1 ( mod p ) と なり、離散対数が 割り算に なる。 λ = 0 \lambda = 0 λ = 0 と なるのは E ( Q p ) \mathcal{E}(\mathbb{Q}_p) E ( Q p ) が 位数 p p p の 点を もつ 特別な 持ち上げの 場合で、その ときは 持ち上げを 取り替える。 p p p 進数の 計算は p p p の 小さな べきを 法と する 精度で 足りる(細部は 省略する)。 □ \square □
以上から、暗号に 使う 曲線は 少なくとも、(i) ベースポイントの 位数 n n n が 素数で 十分 大きい(128 ビットの 安全性には n ≈ 2 256 n \approx 2^{256} n ≈ 2 256 )、(ii) 余因子 h h h が 小さい、(iii) 埋め込み次数が 大きい、(iv) n ≠ p n \neq p n = p 、を みたすように 選ぶ。
5.5 実際に 使われている 曲線
次の 値は 規格に 載っている もので、本章の 執筆に あたり PARI/GP で、 p p p と n n n が 素数である こと、ベースポイント G G G が 曲線上に ある こと、 [ n ] G = O [n]G = O [ n ] G = O 、∣ E ( F p ) ∣ = h n \lvert E(\mathbb{F}_p) \rvert = hn ∣ E ( F p )∣ = 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 ≠ p n \neq p n = p で、埋め込み次数は それぞれ ( n − 1 ) / 6 (n - 1)/6 ( n − 1 ) /6 , ( n − 1 ) / 3 (n - 1)/3 ( n − 1 ) /3 , ( n − 1 ) / 6 (n - 1)/6 ( n − 1 ) /6 と 巨大なので、5.4 節の 攻撃は 当ては まらない。 ρ \rho ρ 法の 手間は 約 2 128 2^{128} 2 128 , 2 128 2^{128} 2 128 , 2 126 2^{126} 2 126 回である(R R R と − R -R − R を 同一視するなどの 改良で 定数倍は 縮むが、桁は ほとんど 変わらない)。
モンゴメリー形と ラダー
B ( A 2 − 4 ) ≠ 0 B(A^2 - 4) \neq 0 B ( A 2 − 4 ) = 0 と して B y 2 = x 3 + A x 2 + x By^2 = x^3 + Ax^2 + x B y 2 = x 3 + A x 2 + x の 形の 曲線を モンゴメリー形 (Montgomery form) と いう(この 小節の A , B A, B A , B は 短い形の 係数とは 別物)。 ( B x , B 2 y ) (Bx, B^2y) ( B x , B 2 y ) で Y 2 = X 3 + A B X 2 + B 2 X Y^2 = X^3 + ABX^2 + B^2X Y 2 = X 3 + A B X 2 + B 2 X に 移り、加法公式は x 3 = B λ 2 − A − x 1 − x 2 x_3 = B\lambda^2 - A - x_1 - x_2 x 3 = B λ 2 − A − x 1 − x 2 , y 3 = λ ( x 1 − x 3 ) − y 1 y_3 = \lambda(x_1 - x_3) - y_1 y 3 = λ ( x 1 − x 3 ) − y 1 (λ \lambda λ は 傾き)に なる。点 R R R の x x x 座標を x R x_R x R と 書く。
命題 5.19 (x x x 座標だけの 公式)モンゴメリー形の 曲線上の 点 P , Q ≠ O P, Q \neq O P , Q = O , P ≠ ± Q P \neq \pm Q P = ± Q に ついて
x P + Q x P − Q = ( x P x Q − 1 x P − x Q ) 2 , x 2 P = ( x P 2 − 1 ) 2 4 x P ( x P 2 + A x P + 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) x P + Q x P − Q = ( x P − x Q x P x Q − 1 ) 2 , x 2 P = 4 x P ( x P 2 + A x P + 1 ) ( x P 2 − 1 ) 2 ([ 2 ] P = O )
が 成り立つ。どちらも B B B と y y y 座標を 含まない。
(加法公式に 代入し B y P 2 = x P 3 + A x P 2 + x P By_P^2 = x_P^3 + Ax_P^2 + x_P B y P 2 = x P 3 + A x P 2 + x P などで 整理する。計算は 省略する。計算機で 確かめられる。) x = X / Z x = X/Z x = X / Z と 書けば 逆元なしの 式に なる。和の 公式には 差 P − Q P - Q P − Q の x x x 座標が 要るので、差が いつも 既知に なるように 計算を 組む。
命題 5.20 (モンゴメリー・ラダー, Montgomery ladder)m = ∑ i = 0 t b i 2 i m = \sum_{i=0}^{t} b_i2^i m = ∑ i = 0 t b i 2 i とし、( R 0 , R 1 ) = ( O , P ) (R_0, R_1) = (O, P) ( R 0 , R 1 ) = ( O , P ) から 始めて i = t , … , 0 i = t, \dots, 0 i = t , … , 0 の 順に、 b i = 0 b_i = 0 b i = 0 なら ( R 0 , R 1 ) ← ( [ 2 ] R 0 , R 0 + R 1 ) (R_0, R_1) \leftarrow ([2]R_0, R_0 + R_1) ( R 0 , R 1 ) ← ([ 2 ] R 0 , R 0 + R 1 ) 、b i = 1 b_i = 1 b i = 1 なら ( R 0 , R 1 ) ← ( R 0 + R 1 , [ 2 ] R 1 ) (R_0, R_1) \leftarrow (R_0 + R_1, [2]R_1) ( R 0 , R 1 ) ← ( R 0 + R 1 , [ 2 ] R 1 ) と する。各段の 後で R 0 = [ m i ] P R_0 = [m_i]P R 0 = [ m i ] P , R 1 = [ m i + 1 ] P R_1 = [m_i + 1]P R 1 = [ m i + 1 ] P (m i m_i m i は 命題 5.1 の 証明の 記号)であり、最後に R 0 = [ m ] P R_0 = [m]P R 0 = [ m ] P と なる。
証明. 段の 始めに ( R 0 , R 1 ) = ( [ u ] P , [ u + 1 ] P ) (R_0, R_1) = ([u]P, [u + 1]P) ( R 0 , R 1 ) = ([ u ] P , [ u + 1 ] P ) なら、段の 後は b i = 0 b_i = 0 b i = 0 で ( [ 2 u ] P , [ 2 u + 1 ] P ) ([2u]P, [2u + 1]P) ([ 2 u ] P , [ 2 u + 1 ] P ) 、b i = 1 b_i = 1 b i = 1 で ( [ 2 u + 1 ] P , [ 2 u + 2 ] P ) ([2u + 1]P, [2u + 2]P) ([ 2 u + 1 ] P , [ 2 u + 2 ] P ) 、すな わち ( [ 2 u + b i ] P , [ 2 u + b i + 1 ] P ) ([2u + b_i]P, [2u + b_i + 1]P) ([ 2 u + b i ] P , [ 2 u + b i + 1 ] P ) である。最初は u = 0 u = 0 u = 0 で、u = m i + 1 u = m_{i+1} u = m i + 1 なら 2 u + b i = m i 2u + b_i = m_i 2 u + b i = m i 。□ \square □
加算 R 0 + R 1 R_0 + R_1 R 0 + R 1 の 差は いつも P P P なので、命題 5.19 に より x x x 座標だけで 計算でき、どの 段でも 2 倍算と 加算を 1 回ずつ 行うので 演算の 並びが m m m に 依存しない。X25519(RFC 7748)は この 方法で [ m ] P [m]P [ m ] P の x x x 座標を 求める。公式は B B B を 含まないので、 B ′ / B B'/B B ′ / B が 平方数でない B ′ y 2 = x 3 + A x 2 + x B'y^2 = x^3 + Ax^2 + x B ′ y 2 = x 3 + A x 2 + x (二次ツイスト , quadratic twist)の 点でも 同じ 計算が 成り立ち、 F p \mathbb{F}_p F p の 各元は E E E か ツイストの 点の x x x 座標に なる(問題 5.6)。 x x x 座標だけを 受け取る 実装は 知らずに ツイスト上で 計算しうるので、ツイストの 位数にも 大きな 素因数が 要る。Curve25519 の ツイストの 位数は 4 n ′ 4n' 4 n ′ (n ′ = 2 253 − 55484635554744707071703875581767296995 n' = 2^{253} - 55484635554744707071703875581767296995 n ′ = 2 253 − 55484635554744707071703875581767296995 は 素数。PARI/GP で 確認)である。
エドワーズ形
標数 ≠ 2 \neq 2 = 2 の 体上で a , d ≠ 0 a, d \neq 0 a , d = 0 , a ≠ d a \neq d a = d と して、 ツイストエドワーズ形 (twisted Edwards form) a x 2 + y 2 = 1 + d x 2 y 2 ax^2 + y^2 = 1 + dx^2y^2 a x 2 + y 2 = 1 + d x 2 y 2 の 曲線には
( x 1 , y 1 ) + ( x 2 , y 2 ) = ( x 1 y 2 + y 1 x 2 1 + d x 1 x 2 y 1 y 2 , y 1 y 2 − a x 1 x 2 1 − d x 1 x 2 y 1 y 2 ) (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) ( x 1 , y 1 ) + ( x 2 , y 2 ) = ( 1 + d x 1 x 2 y 1 y 2 x 1 y 2 + y 1 x 2 , 1 − d x 1 x 2 y 1 y 2 y 1 y 2 − a x 1 x 2 )
で 群構造が 入り(単位元 ( 0 , 1 ) (0, 1) ( 0 , 1 ) 、− ( x , y ) = ( − x , y ) -(x, y) = (-x, y) − ( x , y ) = ( − x , y ) )、u = ( 1 + y ) / ( 1 − y ) u = (1 + y)/(1 - y) u = ( 1 + y ) / ( 1 − y ) , v = u / x v = u/x v = u / x に より モンゴメリー形 B v 2 = u 3 + A u 2 + u Bv^2 = u^3 + Au^2 + u B v 2 = u 3 + A u 2 + u (A = 2 ( a + d ) / ( a − d ) A = 2(a + d)/(a - d) A = 2 ( a + d ) / ( a − d ) , B = 4 / ( a − d ) B = 4/(a - d) B = 4/ ( a − d ) )と 双有理同値で、この 写像は(有限個の 例外点を 除いて)群の 演算を 保つ(ここの d d d は 秘密鍵とは 別物。以上は 主張)。さらに a a a が 平方数で d d d が 平方数でなければ、有理点に 対して 分母は 決して 0 0 0 に ならず、2 倍算や 単位元を 含む すべての 場合に 同じ式が 使える(バーンスタイン–ランゲの 完全な (complete) 加法公式。問題 5.7)。場合分けの ない 公式は、入力に 依存しない 実装に 向く。
署名 Ed25519(RFC 8032)の 曲線 edwards25519 は、 p = 2 255 − 19 p = 2^{255} - 19 p = 2 255 − 19 上で a = − 1 a = -1 a = − 1 (p ≡ 1 ( m o d 4 ) p \equiv 1 \pmod{4} p ≡ 1 ( mod 4 ) より 平方数), d = − 121665 / 121666 d = -121665/121666 d = − 121665/121666 (平方数でない。PARI/GP で 確認)と とった ものである。 A = 486662 A = 486662 A = 486662 , B = − 486664 B = -486664 B = − 486664 で、− 486664 -486664 − 486664 は F p \mathbb{F}_p F p の 平方数なので v v v の 定数倍で B = 1 B = 1 B = 1 に でき、Curve25519 と F p \mathbb{F}_p F p 上双有理同値に なる。ベースポイントの y = 4 / 5 y = 4/5 y = 4/5 は u = ( 1 + 4 / 5 ) / ( 1 − 4 / 5 ) = 9 u = (1 + 4/5)/(1 - 4/5) = 9 u = ( 1 + 4/5 ) / ( 1 − 4/5 ) = 9 に 対応する。
ヒント
実務では 、本章の 公式や パラメータを 自分で 実装せず、検証済みの ライブラリを 使う。受け取った 点の 検査、秘密に 依存しない 計算時間、ナンスの 生成など、数学的に 正しくても 安全で ない 実装の 落とし穴が 多い( 25 第4章 )。推奨される 曲線や 鍵長は 改訂されうるので、最新の 規格を 確認する。
5.6 点の 個数の 計算:シューフの アルゴリズム
暗号に 使う 曲線を 選ぶには ∣ E ( F q ) ∣ \lvert E(\mathbb{F}_q) \rvert ∣ E ( F q )∣ を 正確に 求め、大きな 素数 n n n で 割り切れるかを 調べる 必要が ある。 x x x ごとに 数えると O ( q ) O(q) O ( q ) 回、ベビーステップ・ジャイアントステップ法でも O ( q 1 / 4 ) O(q^{1/4}) O ( q 1/4 ) 回(問題 5.3)の 計算が 要り、 q ≈ 2 256 q \approx 2^{256} q ≈ 2 256 では 使えない。シューフ(1985 年)は、 a q = q + 1 − ∣ E ( F q ) ∣ a_q = q + 1 - \lvert E(\mathbb{F}_q) \rvert a q = q + 1 − ∣ E ( F q )∣ を 小さい 素数 ℓ \ell ℓ を 法と して 求める ことで、 log q \log q log q の 多項式時間の アルゴリズムを 与えた。
補題 5.21 q = p r q = p^r q = p r とし、素数 ℓ ≠ p \ell \neq p ℓ = p に ついて q ℓ ≡ q ( m o d ℓ ) q_\ell \equiv q \pmod{\ell} q ℓ ≡ q ( mod ℓ ) , 0 ≤ q ℓ < ℓ 0 \leq q_\ell < \ell 0 ≤ q ℓ < ℓ と する。 P ∈ E [ ℓ ] ∖ { O } P \in E[\ell] \setminus \lbrace O \rbrace P ∈ E [ ℓ ] ∖ { O } と τ ∈ { 0 , 1 , … , ℓ − 1 } \tau \in \lbrace 0, 1, \dots, \ell - 1 \rbrace τ ∈ { 0 , 1 , … , ℓ − 1 } に ついて、 ϕ q 2 ( P ) + [ q ℓ ] P = [ τ ] ϕ q ( P ) \phi_q^2(P) + [q_\ell]P = [\tau]\phi_q(P) ϕ q 2 ( P ) + [ q ℓ ] P = [ τ ] ϕ q ( P ) が 成り立つための 必要十分条件は τ ≡ a q ( m o d ℓ ) \tau \equiv a_q \pmod{\ell} τ ≡ a q ( mod ℓ ) である。
証明. 第4章 の 関係式 ϕ q 2 − [ a q ] ϕ q + [ q ] = 0 \phi_q^2 - [a_q]\phi_q + [q] = 0 ϕ q 2 − [ a q ] ϕ q + [ q ] = 0 (定理 4.8(2))を P P P に 適用すると、 [ ℓ ] P = O [\ell]P = O [ ℓ ] P = O , ϕ q ( P ) ∈ E [ ℓ ] \phi_q(P) \in E[\ell] ϕ q ( P ) ∈ E [ ℓ ] より ϕ q 2 ( P ) + [ q ℓ ] P = [ a q ] ϕ q ( P ) \phi_q^2(P) + [q_\ell]P = [a_q]\phi_q(P) ϕ q 2 ( P ) + [ q ℓ ] P = [ a q ] ϕ q ( P ) なので、τ ≡ a q \tau \equiv a_q τ ≡ a q なら 成り立つ。逆に 成り立てば [ τ − a q ] ϕ q ( P ) = O [\tau - a_q]\phi_q(P) = O [ τ − a q ] ϕ q ( P ) = O で、ϕ q \phi_q ϕ q は E ( F ‾ q ) E(\overline{\mathbb{F}}_q) E ( F q ) 上の 全単射な 準同型(第3章 命題 3.6)なので ϕ q ( P ) \phi_q(P) ϕ q ( P ) の 位数は ℓ \ell ℓ 、よって ℓ ∣ τ − a q \ell \mid \tau - a_q ℓ ∣ τ − a q 。□ \square □
E [ ℓ ] E[\ell] E [ ℓ ] の 点の 座標は 大きな 拡大体に 入るので、具体的な 点は 使えない。シューフの 方法では、 第3章 の 等分 多項式 ψ ℓ \psi_\ell ψ ℓ (ℓ \ell ℓ が 奇素数なら x x x の 多項式で、根は E [ ℓ ] ∖ { O } E[\ell] \setminus \lbrace O \rbrace E [ ℓ ] ∖ { O } の 点の x x x 座標。第3章 系 3.21)を 使い、環 R ℓ = F q [ x , y ] / ( ψ ℓ ( x ) , y 2 − x 3 − A x − B ) R_\ell = \mathbb{F}_q[x, y]/\bigl(\psi_\ell(x), y^2 - x^3 - Ax - B\bigr) R ℓ = F q [ x , y ] / ( ψ ℓ ( x ) , y 2 − x 3 − A x − B ) の 中で「一般の ℓ \ell ℓ 等分点」( x , y ) (x, y) ( x , y ) に ついて 補題 5.21 の 両辺を 計算する。 ϕ q ( x , y ) = ( x q , y ( x 3 + A x + B ) ( q − 1 ) / 2 ) \phi_q(x, y) = (x^q, y(x^3 + Ax + B)^{(q-1)/2}) ϕ q ( x , y ) = ( x q , y ( x 3 + A x + B ) ( q − 1 ) /2 ) なので、すべて ψ ℓ \psi_\ell ψ ℓ を 法と する 多項式の 計算に なり、 τ = 0 , … , ℓ − 1 \tau = 0, \dots, \ell - 1 τ = 0 , … , ℓ − 1 に ついて 両辺が R ℓ R_\ell R ℓ で 一致するかを 調べれば a q m o d ℓ a_q \bmod \ell a q mod ℓ が 求まる(分母が 可逆でなければ ψ ℓ \psi_\ell ψ ℓ の 因子が 見つかり、それを 使って 続ける。細部は 省略する)。 ℓ = 2 \ell = 2 ℓ = 2 は 別に 扱う(問題 5.4)。
積 L = ∏ ℓ L = \prod \ell L = ∏ ℓ が 4 q 4\sqrt{q} 4 q を 超えるまで ℓ = 2 , 3 , 5 , … \ell = 2, 3, 5, \dots ℓ = 2 , 3 , 5 , … (ℓ ≠ p \ell \neq p ℓ = p )に ついて 求めれば、中国剰余定理で a q m o d L a_q \bmod L a q mod L が わかり、ハッセの 定理(定理 4.7)より ∣ a q ∣ ≤ 2 q < L / 2 \lvert a_q \rvert \leq 2\sqrt{q} < L/2 ∣ a q ∣ ≤ 2 q < L /2 なので a q a_q a q が 決まる。素数定理(チェビシェフの 評価で 足りる)に より ℓ \ell ℓ は O ( log q ) O(\log q) O ( log q ) までで、ψ ℓ \psi_\ell ψ ℓ の 次数は ( ℓ 2 − 1 ) / 2 (\ell^2 - 1)/2 ( ℓ 2 − 1 ) /2 、全体は 筆算の 乗算で O ( ( log q ) 8 ) O((\log q)^8) O (( log q ) 8 ) 回の ビット演算で できる(評価の 細部は 省略する)。エルキースと アトキンの 改良を 加えた SEA アルゴリズム は PARI/GP の ellcard などで 使われ、256 ビットの 曲線でも 普通の 計算機で 点の 個数が 計算できる。
例 5.22 例 5.2 の 曲線では 4 97 ≈ 39.4 4\sqrt{97} \approx 39.4 4 97 ≈ 39.4 である。x 3 + 7 x^3 + 7 x 3 + 7 は F 97 \mathbb{F}_{97} F 97 に 根を もたない( − 7 -7 − 7 は 法 97 で 3 乗数でない)ので a 97 a_{97} a 97 は 奇数。シューフの 方法で(計算機で)求めると a 97 ≡ 1 ( m o d 3 ) a_{97} \equiv 1 \pmod{3} a 97 ≡ 1 ( mod 3 ) , a 97 ≡ 4 ( m o d 5 ) a_{97} \equiv 4 \pmod{5} a 97 ≡ 4 ( mod 5 ) , a 97 ≡ 5 ( m o d 7 ) a_{97} \equiv 5 \pmod{7} a 97 ≡ 5 ( mod 7 ) である。a 97 ≡ 19 ( m o d 30 ) a_{97} \equiv 19 \pmod{30} a 97 ≡ 19 ( mod 30 ) だけでは ∣ a ∣ ≤ 19.7 \lvert a \rvert \leq 19.7 ∣ a ∣ ≤ 19.7 の 候補が 19 19 19 と − 11 -11 − 11 の 2 つ 残るが、 ℓ = 7 \ell = 7 ℓ = 7 を 加えると a 97 ≡ 19 ( m o d 210 ) a_{97} \equiv 19 \pmod{210} a 97 ≡ 19 ( mod 210 ) で a 97 = 19 a_{97} = 19 a 97 = 19 、∣ E ( F 97 ) ∣ = 79 \lvert E(\mathbb{F}_{97}) \rvert = 79 ∣ E ( F 97 )∣ = 79 と なり、例 5.2 と 一致する。
5.7 レンストラの 楕円曲線法
ポラードの p − 1 p - 1 p − 1 法(25 暗号と 符号 第3章 3.4 節)は、N N N の 素因数 p p p に ついて p − 1 p - 1 p − 1 が k = lcm ( 1 , … , B ) k = \operatorname{lcm}(1, \dots, B) k = lcm ( 1 , … , B ) を 割る とき、 gcd ( 2 k − 1 , N ) \gcd(2^k - 1, N) g cd( 2 k − 1 , N ) から p p p を 見つける。群 ( Z / p Z ) × (\mathbb{Z}/p\mathbb{Z})^\times ( Z / p Z ) × の 位数を 使うので、 p − 1 p - 1 p − 1 が 大きな 素因数を もつと 働かない。レンストラは この 群を E ( F p ) E(\mathbb{F}_p) E ( F p ) に 置きかえた。 ∣ E ( F p ) ∣ \lvert E(\mathbb{F}_p) \rvert ∣ E ( F p )∣ は ハッセの 区間の 中で 曲線ごとに 変わるので、うまく いくまで 曲線を 取り替えられる。
N N N を gcd ( N , 6 ) = 1 \gcd(N, 6) = 1 g cd( N , 6 ) = 1 の 合成数、 a , b a, b a , b を gcd ( 4 a 3 + 27 b 2 , N ) = 1 \gcd(4a^3 + 27b^2, N) = 1 g cd( 4 a 3 + 27 b 2 , N ) = 1 と なる 整数と する(この 節では B B B を 素因数の 大きさの 上限に 使うので、短い形の 係数を 小文字で 書く)。 N N N の 各素因数 p p p に ついて E p : y 2 = x 3 + a x + b E_p\colon y^2 = x^3 + ax + b E p : y 2 = x 3 + a x + b は F p \mathbb{F}_p F p 上の 楕円曲線である。 ( Z / N Z ) 2 (\mathbb{Z}/N\mathbb{Z})^2 ( Z / N Z ) 2 の 元と 記号 O O O を「点」と 呼び、点 R R R の p p p を 法と する 還元を R p R_p R p と 書く( O p = O O_p = O O p = O )。点 R 1 = ( x 1 , y 1 ) R_1 = (x_1, y_1) R 1 = ( x 1 , y 1 ) , R 2 = ( x 2 , y 2 ) R_2 = (x_2, y_2) R 2 = ( x 2 , y 2 ) の 疑似加算 R 1 ⊕ R 2 R_1 \oplus R_2 R 1 ⊕ R 2 を 次で 定める(一方が O O O なら 他方を 返す)。
x 1 ≢ x 2 ( m o d N ) x_1 \not\equiv x_2 \pmod{N} x 1 ≡ x 2 ( mod N ) の とき: g = gcd ( x 2 − x 1 , N ) ≠ 1 g = \gcd(x_2 - x_1, N) \neq 1 g = g cd( x 2 − x 1 , N ) = 1 なら g g g (1 < g < N 1 < g < N 1 < g < N )を 出力して 止まる。 g = 1 g = 1 g = 1 なら λ = ( y 2 − y 1 ) ( x 2 − x 1 ) − 1 \lambda = (y_2 - y_1)(x_2 - x_1)^{-1} λ = ( y 2 − y 1 ) ( x 2 − x 1 ) − 1 。
x 1 ≡ x 2 ( m o d N ) x_1 \equiv x_2 \pmod{N} x 1 ≡ x 2 ( mod N ) の とき: g = gcd ( y 1 + y 2 , N ) g = \gcd(y_1 + y_2, N) g = g cd( y 1 + y 2 , N ) と する。 g = N g = N g = N なら O O O を 返し、 1 < g < N 1 < g < N 1 < g < N なら g g g を 出力して 止まる。 g = 1 g = 1 g = 1 なら λ = ( 3 x 1 2 + a ) ( y 1 + y 2 ) − 1 \lambda = (3x_1^2 + a)(y_1 + y_2)^{-1} λ = ( 3 x 1 2 + a ) ( y 1 + y 2 ) − 1 。
x 3 = λ 2 − x 1 − x 2 x_3 = \lambda^2 - x_1 - x_2 x 3 = λ 2 − x 1 − x 2 , y 3 = λ ( x 1 − x 3 ) − y 1 y_3 = \lambda(x_1 - x_3) - y_1 y 3 = λ ( x 1 − x 3 ) − y 1 と して ( x 3 , y 3 ) (x_3, y_3) ( x 3 , y 3 ) を 返す。
補題 5.23 点 R 1 , R 2 R_1, R_2 R 1 , R 2 が、N N N の すべての 素因数 p p p に ついて ( R 1 ) p , ( R 2 ) p ∈ E p ( F p ) (R_1)_p, (R_2)_p \in E_p(\mathbb{F}_p) ( R 1 ) p , ( R 2 ) p ∈ E p ( F p ) を みたすと する。 R 1 ⊕ R 2 R_1 \oplus R_2 R 1 ⊕ R 2 が 因数を 出力せずに 点 R 3 R_3 R 3 を 返すならば、すべての p p p に ついて ( R 3 ) p = ( R 1 ) p + ( R 2 ) p (R_3)_p = (R_1)_p + (R_2)_p ( R 3 ) p = ( R 1 ) p + ( R 2 ) p である。
証明. 一方が O O O なら 明らか。手順 1 で g = 1 g = 1 g = 1 なら、すべての p p p で x 1 ≢ x 2 ( m o d p ) x_1 \not\equiv x_2 \pmod{p} x 1 ≡ x 2 ( mod p ) なので ( R 1 ) p ≠ ± ( R 2 ) p (R_1)_p \neq \pm(R_2)_p ( R 1 ) p = ± ( R 2 ) p で、手順 3 は F p \mathbb{F}_p F p での 加法公式 その ものである。手順 2 では、すべての p p p で x 1 ≡ x 2 x_1 \equiv x_2 x 1 ≡ x 2 と 曲線の 式から y 1 ≡ ± y 2 ( m o d p ) y_1 \equiv \pm y_2 \pmod{p} y 1 ≡ ± y 2 ( mod p ) 。g = N g = N g = N なら、すべての p p p で y 1 ≡ − y 2 y_1 \equiv -y_2 y 1 ≡ − y 2 なので ( R 2 ) p = − ( R 1 ) p (R_2)_p = -(R_1)_p ( R 2 ) p = − ( R 1 ) p で 和は O O O 。g = 1 g = 1 g = 1 なら、すべての p p p で y 1 + y 2 ≢ 0 y_1 + y_2 \not\equiv 0 y 1 + y 2 ≡ 0 なので y 1 ≡ y 2 y_1 \equiv y_2 y 1 ≡ y 2 、( R 1 ) p = ( R 2 ) p (R_1)_p = (R_2)_p ( R 1 ) p = ( R 2 ) p で、y 1 + y 2 ≡ 2 y 1 y_1 + y_2 \equiv 2y_1 y 1 + y 2 ≡ 2 y 1 より λ \lambda λ は 2 倍算の 傾き ( 3 x 1 2 + a ) / ( 2 y 1 ) (3x_1^2 + a)/(2y_1) ( 3 x 1 2 + a ) / ( 2 y 1 ) に 一致する。 □ \square □
定理 5.24 (楕円曲線法で 因数が 見つかる 理由) P = ( x 0 , y 0 ) P = (x_0, y_0) P = ( x 0 , y 0 ) を y 0 2 ≡ x 0 3 + a x 0 + b ( m o d N ) y_0^2 \equiv x_0^3 + ax_0 + b \pmod{N} y 0 2 ≡ x 0 3 + a x 0 + b ( mod N ) を みたす点、 k ∈ N k \in \mathbb{N} k ∈ N と する。 N N N の 素因数 p , p ′ p, p' p , p ′ で、P p P_p P p の 位数は k k k を 割るが P p ′ P_{p'} P p ′ の 位数は k k k を 割らない ものが あると する。この とき、二進法の 加算と 2 倍算を 疑似加算に 置きかえて [ k ] P [k]P [ k ] P を 計算すると、途中で N N N の 非自明な 約数が 出力される。
証明. 因数が 出力されなかったとすると、補題 5.23 を 二進法の 各段に 当てはめて(命題 5.1 の 帰納法)、最後の 点 R R R は すべての 素因数 ℓ \ell ℓ に ついて R ℓ = [ k ] P ℓ R_\ell = [k]P_\ell R ℓ = [ k ] P ℓ を みたす。 R p = [ k ] P p = O R_p = [k]P_p = O R p = [ k ] P p = O だが、( Z / N Z ) 2 (\mathbb{Z}/N\mathbb{Z})^2 ( Z / N Z ) 2 の 元の 還元は O O O でないので R = O R = O R = O 。一方 R p ′ = [ k ] P p ′ ≠ O R_{p'} = [k]P_{p'} \neq O R p ′ = [ k ] P p ′ = O より R ≠ O R \neq O R = O と なり、矛盾する。 □ \square □
∣ E p ( F p ) ∣ \lvert E_p(\mathbb{F}_p) \rvert ∣ E p ( F p )∣ を 割る 素数べきが すべて B B B 以下なら、k = lcm ( 1 , … , B ) k = \operatorname{lcm}(1, \dots, B) k = lcm ( 1 , … , B ) に ついて P p P_p P p の 位数は k k k を 割る。 ∣ E p ( F p ) ∣ \lvert E_p(\mathbb{F}_p) \rvert ∣ E p ( F p )∣ が ハッセの 区間で「ランダムな 整数のように ふるまう」と いう(証明されていない)仮定のもとで B B B と 曲線の 数を 最適に 選ぶと、 N N N の 最小の 素因数 p p p を 見つける 期待時間は 法 N N N の 演算 exp ( ( 2 + o ( 1 ) ) log p log log p ) \exp\bigl((\sqrt{2} + o(1))\sqrt{\log p \log\log p}\bigr) exp ( ( 2 + o ( 1 )) log p log log p ) 回程度に なる。手間が 最小の 素因数の 大きさで 決まるので、大きな 数から 比較的小さい 素因数を 見つけるのに 向いている(同じ 大きさの 2 つの 素数の 積である RSA の 法には 数体ふる い法が 使われる)。
例 5.25 N = 2065513 = 1019 ⋅ 2027 N = 2065513 = 1019 \cdot 2027 N = 2065513 = 1019 ⋅ 2027 と する。 1018 = 2 ⋅ 509 1018 = 2 \cdot 509 1018 = 2 ⋅ 509 , 2026 = 2 ⋅ 1013 2026 = 2 \cdot 1013 2026 = 2 ⋅ 1013 なので p − 1 p - 1 p − 1 法は B < 509 B < 509 B < 509 では 働かない(実際 gcd ( 2 2520 − 1 , N ) = 1 \gcd(2^{2520} - 1, N) = 1 g cd( 2 2520 − 1 , N ) = 1 )。曲線 y 2 = x 3 + a x + 1 y^2 = x^3 + ax + 1 y 2 = x 3 + a x + 1 と 点 P = ( 0 , 1 ) P = (0, 1) P = ( 0 , 1 ) を a = 1 , 2 , 3 , … a = 1, 2, 3, \dots a = 1 , 2 , 3 , … の 順に 試し、 k = lcm ( 1 , … , 10 ) = 2520 k = \operatorname{lcm}(1, \dots, 10) = 2520 k = lcm ( 1 , … , 10 ) = 2520 と する。 a = 1 , 2 a = 1, 2 a = 1 , 2 では 因数は 見つからない。 a = 3 a = 3 a = 3 では
∣ E ( F 1019 ) ∣ = 1032 = 2 3 ⋅ 3 ⋅ 43 , ord ( P 1019 ) = 172 , ∣ E ( F 2027 ) ∣ = 2040 = 2 3 ⋅ 3 ⋅ 5 ⋅ 17 , ord ( P 2027 ) = 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 ∣ E ( F 1019 )∣ = 1032 = 2 3 ⋅ 3 ⋅ 43 , ord ( P 1019 ) = 172 , ∣ E ( F 2027 )∣ = 2040 = 2 3 ⋅ 3 ⋅ 5 ⋅ 17 , ord ( P 2027 ) = 10
で、10 ∣ 2520 10 \mid 2520 10 ∣ 2520 , 172 ∤ 2520 172 \nmid 2520 172 ∤ 2520 だから 定理 5.24 が 使える。実際、 2520 = 100111011000 2 2520 = 100111011000_2 2520 = 10011101100 0 2 に 沿って [ 315 ] P = ( 1007897 , 707423 ) [315]P = (1007897, 707423) [ 315 ] P = ( 1007897 , 707423 ) まで 進み、これを 2 倍しようと すると 2 ⋅ 707423 2 \cdot 707423 2 ⋅ 707423 の 逆元が 要るが、 707423 = 349 ⋅ 2027 707423 = 349 \cdot 2027 707423 = 349 ⋅ 2027 なので gcd = 2027 \gcd = 2027 g cd= 2027 が 出力される。法 2027 では [ 315 ] P 2027 = [ 5 ] P 2027 = ( 478 , 0 ) [315]P_{2027} = [5]P_{2027} = (478, 0) [ 315 ] P 2027 = [ 5 ] P 2027 = ( 478 , 0 ) が 位数 2 の 点なので、その 2 倍で 分母が 消えたのである(法 1019 では [ 315 ] P 1019 = ( 106 , 237 ) [315]P_{1019} = (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 年)は、F p 2 \mathbb{F}_{p^2} F p 2 上の 超 特異楕円曲線の 間の、次数が 小さい 素数(ふつうは 2 と 3)の べきの 秘密の 同種写像を 使う 鍵共有で、秘密の 同種写像に よるねじれ点の 像も 公開する。これにもと づく SIKE は NIST の 耐量子暗号の 公募で 第 4 ラウンドの 候補だった。2022 年、キャストリックと デクルは、公開される ねじれ点の 像を 利用して 秘密鍵を 古典計算機で 効率よく 復元する 攻撃を 発表し(2 つの 楕円曲線の 積を 出発点と する、2 次元の アーベル多様体の 間の 同種写像を 使う)、攻撃は その 後さらに 改良された。SIDH・SIKE は これで 破られた。
CSIDH (キャストリック、ランゲ、マルティンデール、パニー、レネス、2018 年)は、F p \mathbb{F}_p F p 上で 定義された 自己準同型の なす環が Z [ − p ] \mathbb{Z}[\sqrt{-p}] Z [ − p ] である 超 特異楕円曲線の 集合への、イデアル類群の 作用を 使う ディフィー–ヘルマン型の 鍵共有である。ねじれ点の 像を 公開しないので 2022 年の 攻撃は 当ては まらないが、可換な 群作用なので 量子計算機に よる 準指数時間の 攻撃(クーパーバーグの アルゴリズム)が あり、安全な パラメータの 大きさに ついては 議論が 続いている。
まとめ
二進法は [ m ] P [m]P [ m ] P を 2 log 2 m 2\log_2 m 2 log 2 m 回以下の 群演算で 計算し、ヤコビ座標なら 途中で 逆元が 要らない。
ECDH・エルガマル暗号・ECDSA の 正しさは [ a ] ∘ [ b ] = [ a b ] [a] \circ [b] = [ab] [ a ] ∘ [ b ] = [ ab ] と G G G の 位数から 従う。ECDSA の ナンスを 使い回すと、一次式を 解くだけで 秘密鍵が 復元される。
汎用的な 攻撃は O ( n ) O(\sqrt{n}) O ( n ) 回の 群演算を 要し( ρ \rho ρ 法は 約 π n / 2 \sqrt{\pi n/2} π n /2 段)、ポーリッヒ–ヘルマン法に より 難しさは 位数の 最大の 素因数で 決まる。
埋め込み次数 k k k が 小さいと ヴェイユ対で ECDLP が F q k × \mathbb{F}_{q^k}^\times F q k × に 移り(超 特異なら k ≤ 6 k \leq 6 k ≤ 6 )、アノマラス曲線の ECDLP は 多項式時間で 解ける。
実際の 曲線は、素数位数が 大きい・余因子が 小さい ・ 埋め込み次数が 大きい・アノマラスでない、を みたす。
モンゴメリー形の ラダーは 演算の 並びが 秘密に 依存せず、ツイストエドワーズ形は 完全な 加法公式を もちうる。
シューフの アルゴリズムは E [ ℓ ] E[\ell] E [ ℓ ] 上の ϕ q 2 − a q ϕ q + q = 0 \phi_q^2 - a_q\phi_q + q = 0 ϕ q 2 − a q ϕ q + q = 0 から a q m o d ℓ a_q \bmod \ell a q mod ℓ を 求め、中国剰余定理と ハッセの 定理で a q a_q a q を 決める。
楕円曲線法は、ある 素因数で P P P の 位数が k k k を 割り別の 素因数で 割らない とき 必ず 因数を 見つけ、手間は 最小の 素因数の 大きさで 決まる。
ショアの アルゴリズムは 量子計算機で ECDLP を 解く。SIDH は 2022 年に 破られたが、CSIDH は その 攻撃を 受けない。
演習問題
問題 5.1 ★ m = 2520 m = 2520 m = 2520 と する。(1) 二進法での 2 倍算と 加算の 回数を 求めよ。(2) 2520 = 2 11 + 2 9 − 2 5 − 2 3 2520 = 2^{11} + 2^9 - 2^5 - 2^3 2520 = 2 11 + 2 9 − 2 5 − 2 3 を 使い、 − P -P − P が ただで 求まる ことを 利用すると、回数は どうなるか。
解答
(1) 2520 = 2 11 + 2 8 + 2 7 + 2 6 + 2 4 + 2 3 = 100111011000 2 2520 = 2^{11} + 2^8 + 2^7 + 2^6 + 2^4 + 2^3 = 100111011000_2 2520 = 2 11 + 2 8 + 2 7 + 2 6 + 2 4 + 2 3 = 10011101100 0 2 で t = 11 t = 11 t = 11 , w ( m ) = 6 w(m) = 6 w ( m ) = 6 なので、命題 5.1 より 2 倍算 11 回、加算 5 回。
(2) 桁 1 , 0 , 1 , 0 , 0 , 0 , − 1 , 0 , − 1 , 0 , 0 , 0 1, 0, 1, 0, 0, 0, -1, 0, -1, 0, 0, 0 1 , 0 , 1 , 0 , 0 , 0 , − 1 , 0 , − 1 , 0 , 0 , 0 を 上から 使い、各段で 2 倍してから 桁が 1 1 1 なら P P P を、− 1 -1 − 1 なら − P -P − P を 足すと、2 倍算 11 回、加算 3 回に なる。 0 0 0 でない 桁が 隣り合わない この 展開を NAF (non-adjacent form) と いい、 0 0 0 でない 桁の 割合は 平均で 約 1 / 3 1/3 1/3 である(二進展開では 約 1 / 2 1/2 1/2 )。
問題 5.2 ★ ★ ECDSA で ナンスを k 2 = k 1 + 1 k_2 = k_1 + 1 k 2 = k 1 + 1 と 選んだと する。ハッシュ値 z 1 , z 2 z_1, z_2 z 1 , z 2 の 署名 ( r 1 , s 1 ) (r_1, s_1) ( r 1 , s 1 ) , ( r 2 , s 2 ) (r_2, s_2) ( r 2 , s 2 ) から、s 2 r 1 ≢ s 1 r 2 ( m o d n ) s_2r_1 \not\equiv s_1r_2 \pmod{n} s 2 r 1 ≡ s 1 r 2 ( mod n ) ならば
d ≡ ( s 1 z 2 − s 1 s 2 − s 2 z 1 ) ( s 2 r 1 − s 1 r 2 ) − 1 ( m o d n ) d \equiv (s_1z_2 - s_1s_2 - s_2z_1)(s_2r_1 - s_1r_2)^{-1} \pmod{n} d ≡ ( s 1 z 2 − s 1 s 2 − s 2 z 1 ) ( s 2 r 1 − s 1 r 2 ) − 1 ( mod n )
で 秘密鍵が 求まる ことを 示せ。例 5.8 の 曲線で、 z 1 = 31 z_1 = 31 z 1 = 31 の 署名 ( 32 , 9 ) (32, 9) ( 32 , 9 ) と z 2 = 56 z_2 = 56 z 2 = 56 の 署名 ( 65 , 40 ) (65, 40) ( 65 , 40 ) に 適用せよ。
解答
s 1 k 1 ≡ z 1 + r 1 d s_1k_1 \equiv z_1 + r_1d s 1 k 1 ≡ z 1 + r 1 d , s 2 ( k 1 + 1 ) ≡ z 2 + r 2 d s_2(k_1 + 1) \equiv z_2 + r_2d s 2 ( k 1 + 1 ) ≡ z 2 + r 2 d の 第 2 式に s 1 s_1 s 1 を 掛けて 第 1 式を 代入すると、 s 2 ( z 1 + r 1 d ) + s 1 s 2 ≡ s 1 z 2 + s 1 r 2 d s_2(z_1 + r_1d) + s_1s_2 \equiv s_1z_2 + s_1r_2d s 2 ( z 1 + r 1 d ) + s 1 s 2 ≡ s 1 z 2 + s 1 r 2 d 、すな わち ( s 2 r 1 − s 1 r 2 ) d ≡ s 1 z 2 − s 1 s 2 − s 2 z 1 (s_2r_1 - s_1r_2)d \equiv s_1z_2 - s_1s_2 - s_2z_1 ( s 2 r 1 − s 1 r 2 ) d ≡ s 1 z 2 − s 1 s 2 − s 2 z 1 。数値例では 右辺 504 − 360 − 1240 = − 1096 ≡ 10 504 - 360 - 1240 = -1096 \equiv 10 504 − 360 − 1240 = − 1096 ≡ 10 、係数 1280 − 585 = 695 ≡ 63 1280 - 585 = 695 \equiv 63 1280 − 585 = 695 ≡ 63 、63 ⋅ 74 = 4662 ≡ 1 ( m o d 79 ) 63 \cdot 74 = 4662 \equiv 1 \pmod{79} 63 ⋅ 74 = 4662 ≡ 1 ( mod 79 ) より d ≡ 10 ⋅ 74 ≡ 29 d \equiv 10 \cdot 74 \equiv 29 d ≡ 10 ⋅ 74 ≡ 29 (実際この 署名は k 1 = 10 k_1 = 10 k 1 = 10 , k 2 = 11 k_2 = 11 k 2 = 11 で 作った)。ナンスは 既知の 関係を もってもいけない。
問題 5.3 ★ ★ (1) 離散対数 m m m が 0 ≤ m < W 0 \leq m < W 0 ≤ m < W に あると わかっている とき、 O ( W ) O(\sqrt{W}) O ( W ) 回の 群演算で m m m を 求めよ。(2) P ∈ E ( F q ) P \in E(\mathbb{F}_q) P ∈ E ( F q ) の 位数が 4 q 4\sqrt{q} 4 q より 大きいとき、 ∣ E ( F q ) ∣ \lvert E(\mathbb{F}_q) \rvert ∣ E ( F q )∣ を O ( q 1 / 4 ) O(q^{1/4}) O ( q 1/4 ) 回の 群演算で 決定できる ことを 示せ。
解答
(1) M = ⌈ W ⌉ M = \lceil \sqrt{W} \rceil M = ⌈ W ⌉ と して 定理 5.9 と 同じ ことを 行う。 m = i M + j m = iM + j m = i M + j (0 ≤ j < M 0 \leq j < M 0 ≤ j < M )なら i ≤ ( W − 1 ) / M < M i \leq (W - 1)/M < M i ≤ ( W − 1 ) / M < M なので 必ず 一致が 見つかる。
(2) N = ∣ E ( F q ) ∣ N = \lvert E(\mathbb{F}_q) \rvert N = ∣ E ( F q )∣ , L = ⌈ q + 1 − 2 q ⌉ L = \lceil q + 1 - 2\sqrt{q} \rceil L = ⌈ q + 1 − 2 q ⌉ , W = ⌊ 4 q ⌋ + 1 W = \lfloor 4\sqrt{q} \rfloor + 1 W = ⌊ 4 q ⌋ + 1 と おくと、ハッセの 定理より N = L + t N = L + t N = L + t , 0 ≤ t < W 0 \leq t < W 0 ≤ t < W 。[ N ] P = O [N]P = O [ N ] P = O より [ t ] P = − [ L ] P [t]P = -[L]P [ t ] P = − [ L ] P なので、(1) で 解 t t t を O ( q 1 / 4 ) O(q^{1/4}) O ( q 1/4 ) 回の 演算で 見つける。2 つの 解の 差は P P P の 位数の 倍数で、絶対値は 4 q 4\sqrt{q} 4 q 以下なので 0 0 0 。よって N = L + t N = L + t N = L + t が 決まる。
問題 5.4 ★ ★ q q q を 奇数、 E : y 2 = x 3 + A x + B E\colon y^2 = x^3 + Ax + B E : y 2 = x 3 + A x + B を F q \mathbb{F}_q F q 上の 楕円曲線と する。(1) a q a_q a q が 偶数である ことと、 x 3 + A x + B x^3 + Ax + B x 3 + A x + B が F q \mathbb{F}_q F q に 根を もつ ことと、 gcd ( x q − x , x 3 + A x + B ) ≠ 1 \gcd(x^q - x, x^3 + Ax + B) \neq 1 g cd( x q − x , x 3 + A x + B ) = 1 が 同値である ことを 示せ。(2) 例 5.13 と 例 5.2 の 曲線で 確かめよ。
解答
(1) q + 1 q + 1 q + 1 は 偶数なので ∣ E ( F q ) ∣ = q + 1 − a q ≡ a q ( m o d 2 ) \lvert E(\mathbb{F}_q) \rvert = q + 1 - a_q \equiv a_q \pmod{2} ∣ E ( F q )∣ = q + 1 − a q ≡ a q ( mod 2 ) 。有限アーベル群の 位数が 偶数である ことと 位数 2 の 元を もつ ことは 同値(コーシーの 定理)で、位数 2 の 点は ( c , 0 ) (c, 0) ( c , 0 ) (c c c は x 3 + A x + B x^3 + Ax + B x 3 + A x + B の F q \mathbb{F}_q F q での 根)である。 x q − x = ∏ c ∈ F q ( x − c ) x^q - x = \prod_{c \in \mathbb{F}_q}(x - c) x q − x = ∏ c ∈ F q ( x − c ) なので、gcd ≠ 1 \gcd \neq 1 g cd = 1 は 根を もつ ことと 同値。
(2) 例 5.13 は 位数 108 で、 80 3 + 4 ⋅ 80 + 2 = 512322 = 4974 ⋅ 103 80^3 + 4 \cdot 80 + 2 = 512322 = 4974 \cdot 103 8 0 3 + 4 ⋅ 80 + 2 = 512322 = 4974 ⋅ 103 より x = 80 x = 80 x = 80 が 根である( ( 80 , 0 ) = [ 54 ] P (80, 0) = [54]P ( 80 , 0 ) = [ 54 ] P は、例 5.13 の 位数 4 の 点 P ′ = [ 27 ] P P' = [27]P P ′ = [ 27 ] P の 2 倍で、位数 2 の 点)。例 5.2 は 位数 79 が 奇数で、 x 3 + 7 x^3 + 7 x 3 + 7 は F 97 \mathbb{F}_{97} F 97 に 根を もたない。
問題 5.5 ★ ★ p ≡ 3 ( m o d 4 ) p \equiv 3 \pmod{4} p ≡ 3 ( mod 4 ) を 素数、 E : y 2 = x 3 + x E\colon y^2 = x^3 + x E : y 2 = x 3 + x と する。(1) ∣ E ( F p ) ∣ = p + 1 \lvert E(\mathbb{F}_p) \rvert = p + 1 ∣ E ( F p )∣ = p + 1 を、点を 数えて 直接示せ(第4章 定理 4.18(2) の 特別な 場合である)。(2) p + 1 p + 1 p + 1 を 割る 素数 n > 2 n > 2 n > 2 に ついて 埋め込み次数は 2 である ことを 示し、この 曲線を ECDLP にもと づく 暗号に 使うべきでない 理由を 述べよ。
解答
(1) f ( x ) = x 3 + x f(x) = x^3 + x f ( x ) = x 3 + x と おく。 − 1 -1 − 1 は 法 p p p で 平方剰余でない( 04-algebra 第1章 系 1.50(2))ので f ( x ) = 0 ⟺ x = 0 f(x) = 0 \iff x = 0 f ( x ) = 0 ⟺ x = 0 で、x = 0 x = 0 x = 0 から 点が 1 個。 x ≠ 0 x \neq 0 x = 0 は { x , − x } \lbrace x, -x \rbrace { x , − x } の ( p − 1 ) / 2 (p - 1)/2 ( p − 1 ) /2 組に 分かれ、 f ( − x ) = − f ( x ) ≠ 0 f(-x) = -f(x) \neq 0 f ( − x ) = − f ( x ) = 0 だから f ( x ) , f ( − x ) f(x), f(-x) f ( x ) , f ( − x ) の ちょうど 一方が 平方数で、各組から 点が 2 個出る。 O O O を 加えて 1 + ( p − 1 ) + 1 = p + 1 1 + (p - 1) + 1 = p + 1 1 + ( p − 1 ) + 1 = p + 1 。
(2) n ∣ p + 1 ∣ p 2 − 1 n \mid p + 1 \mid p^2 - 1 n ∣ p + 1 ∣ p 2 − 1 なので k ≤ 2 k \leq 2 k ≤ 2 。k = 1 k = 1 k = 1 なら n ∣ ( p + 1 ) − ( p − 1 ) = 2 n \mid (p + 1) - (p - 1) = 2 n ∣ ( p + 1 ) − ( p − 1 ) = 2 と なり矛盾。よって k = 2 k = 2 k = 2 で、定理 5.15 に より ECDLP は F p 2 × \mathbb{F}_{p^2}^\times F p 2 × の 離散対数問題に 帰着され、準指数時間の 方法で 攻撃できる。例 5.17 は この 場合である。
問題 5.6 ★ ★ p p p を 奇素数、 E : B y 2 = x 3 + A x 2 + x E\colon By^2 = x^3 + Ax^2 + x E : B y 2 = x 3 + A x 2 + x と E ′ : B ′ y 2 = x 3 + A x 2 + x E'\colon B'y^2 = x^3 + Ax^2 + x E ′ : B ′ y 2 = x 3 + A x 2 + x を モンゴメリー形の 曲線で、 B ′ / B B'/B B ′ / B は F p \mathbb{F}_p F p の 平方数でないとする。(1) f ( u ) = u 3 + A u 2 + u ≠ 0 f(u) = u^3 + Au^2 + u \neq 0 f ( u ) = u 3 + A u 2 + u = 0 ならば、x = u x = u x = u の 点を E E E と E ′ E' E ′ の 一方だけが ちょうど 2 個も つことを 示せ。(2) ∣ E ( F p ) ∣ + ∣ E ′ ( F p ) ∣ = 2 p + 2 \lvert E(\mathbb{F}_p) \rvert + \lvert E'(\mathbb{F}_p) \rvert = 2p + 2 ∣ E ( F p )∣ + ∣ E ′ ( F p )∣ = 2 p + 2 を 示し、5.5 節の Curve25519 の 値( 8 n + 4 n ′ 8n + 4n' 8 n + 4 n ′ )と 比べよ。
解答
(1) x = u x = u x = u の 点は、 E E E では y 2 = f ( u ) / B y^2 = f(u)/B y 2 = f ( u ) / B 、E ′ E' E ′ では y 2 = f ( u ) / B ′ y^2 = f(u)/B' y 2 = f ( u ) / B ′ の 解に 対応する。 F p × \mathbb{F}_p^\times F p × の 平方数は 指数 2 の 部分群で、 f ( u ) / B ′ = ( f ( u ) / B ) ( B / B ′ ) f(u)/B' = (f(u)/B)(B/B') f ( u ) / B ′ = ( f ( u ) / B ) ( B / B ′ ) , B / B ′ B/B' B / B ′ は 平方数でないので、ちょうど 一方が 平方数であり、その 側で 解が 2 個、他方で 0 個。
(2) f ( u ) = 0 f(u) = 0 f ( u ) = 0 なら 両方に 点 ( u , 0 ) (u, 0) ( u , 0 ) が 1 個ずつある。どの u u u でも 個数の 和は 2 なので、アフィンの 点の 和は 2 p 2p 2 p 、O O O を 加えて 2 p + 2 2p + 2 2 p + 2 。Curve25519 では n = 2 252 + c n = 2^{252} + c n = 2 252 + c , n ′ = 2 253 − c ′ n' = 2^{253} - c' n ′ = 2 253 − c ′ で c ′ = 2 c + 9 c' = 2c + 9 c ′ = 2 c + 9 が 成り立つので、 8 n + 4 n ′ = 2 256 + 8 c − 4 c ′ = 2 256 − 36 = 2 p + 2 8n + 4n' = 2^{256} + 8c - 4c' = 2^{256} - 36 = 2p + 2 8 n + 4 n ′ = 2 256 + 8 c − 4 c ′ = 2 256 − 36 = 2 p + 2 と なり一致する。
問題 5.7 ★ ★ ★ K K K を 標数 ≠ 2 \neq 2 = 2 の 体、 d ∈ K d \in K d ∈ K を 平方数でない 元と する。 ( x 1 , y 1 ) (x_1, y_1) ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_2, y_2) ( x 2 , y 2 ) が x 2 + y 2 = 1 + d x 2 y 2 x^2 + y^2 = 1 + dx^2y^2 x 2 + y 2 = 1 + d x 2 y 2 の K K K 有理点ならば、1 ± d x 1 x 2 y 1 y 2 ≠ 0 1 \pm dx_1x_2y_1y_2 \neq 0 1 ± d x 1 x 2 y 1 y 2 = 0 である ことを 示せ。また、 a a a が 平方数の ツイストエドワーズ形 a x 2 + y 2 = 1 + d x 2 y 2 ax^2 + y^2 = 1 + dx^2y^2 a x 2 + y 2 = 1 + d x 2 y 2 でも 同じことが 成り立つことを 導け。
解答
ε = d x 1 x 2 y 1 y 2 = ± 1 \varepsilon = dx_1x_2y_1y_2 = \pm 1 ε = d x 1 x 2 y 1 y 2 = ± 1 と 仮定すると、 x 1 , y 1 , x 2 , y 2 ≠ 0 x_1, y_1, x_2, y_2 \neq 0 x 1 , y 1 , x 2 , y 2 = 0 で ε 2 = 1 \varepsilon^2 = 1 ε 2 = 1 。曲線の 式から
d x 1 2 y 1 2 ( x 2 2 + y 2 2 ) = d x 1 2 y 1 2 ( 1 + d x 2 2 y 2 2 ) = d x 1 2 y 1 2 + ε 2 = x 1 2 + y 1 2 dx_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 d x 1 2 y 1 2 ( x 2 2 + y 2 2 ) = d x 1 2 y 1 2 ( 1 + d x 2 2 y 2 2 ) = d x 1 2 y 1 2 + ε 2 = x 1 2 + y 1 2
で、ε x 1 y 1 = d x 1 2 y 1 2 x 2 y 2 \varepsilon x_1y_1 = dx_1^2y_1^2x_2y_2 ε x 1 y 1 = d x 1 2 y 1 2 x 2 y 2 だから(複号同順)
( x 1 ± ε y 1 ) 2 = x 1 2 + y 1 2 ± 2 ε x 1 y 1 = d x 1 2 y 1 2 ( x 2 ± y 2 ) 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 ( x 1 ± ε y 1 ) 2 = x 1 2 + y 1 2 ± 2 ε x 1 y 1 = d x 1 2 y 1 2 ( x 2 ± y 2 ) 2
x 2 + y 2 ≠ 0 x_2 + y_2 \neq 0 x 2 + y 2 = 0 なら d = ( ( x 1 + ε y 1 ) / ( x 1 y 1 ( x 2 + y 2 ) ) ) 2 d = \bigl((x_1 + \varepsilon y_1)/(x_1y_1(x_2 + y_2))\bigr)^2 d = ( ( x 1 + ε y 1 ) / ( x 1 y 1 ( x 2 + y 2 )) ) 2 が 平方数に なり矛盾するので x 2 + y 2 = 0 x_2 + y_2 = 0 x 2 + y 2 = 0 、同様に x 2 − y 2 = 0 x_2 - y_2 = 0 x 2 − y 2 = 0 。標数 ≠ 2 \neq 2 = 2 より x 2 = 0 x_2 = 0 x 2 = 0 と なり矛盾する。 a = c 2 a = c^2 a = c 2 なら ( x , y ) ↦ ( c x , y ) (x, y) \mapsto (cx, y) ( x , y ) ↦ ( c x , y ) で X 2 + y 2 = 1 + ( d / a ) X 2 y 2 X^2 + y^2 = 1 + (d/a)X^2y^2 X 2 + y 2 = 1 + ( d / a ) X 2 y 2 に 移り、 d / a d/a d / a は 平方数でなく、 d x 1 x 2 y 1 y 2 = ( d / a ) X 1 X 2 y 1 y 2 dx_1x_2y_1y_2 = (d/a)X_1X_2y_1y_2 d x 1 x 2 y 1 y 2 = ( d / a ) X 1 X 2 y 1 y 2 なので 前半に 帰着する。
問題 5.8 ★ ★ 例 5.25 の N N N で 曲線 a = 1 a = 1 a = 1 (y 2 = x 3 + x + 1 y^2 = x^3 + x + 1 y 2 = x 3 + x + 1 , P = ( 0 , 1 ) P = (0, 1) P = ( 0 , 1 ) )を 考える。 P 1019 P_{1019} P 1019 の 位数は 1052 = 2 2 ⋅ 263 1052 = 2^2 \cdot 263 1052 = 2 2 ⋅ 263 、P 2027 P_{2027} P 2027 の 位数は 1025 = 5 2 ⋅ 41 1025 = 5^2 \cdot 41 1025 = 5 2 ⋅ 41 である。k = lcm ( 1 , … , B ) k = \operatorname{lcm}(1, \dots, B) k = lcm ( 1 , … , B ) の とき、定理 5.24 で 因数が 見つかる ことが 保証される 最小の B B B を 求めよ。 B ≥ 263 B \geq 263 B ≥ 263 では どうか。
解答
lcm ( 1 , … , B ) \operatorname{lcm}(1, \dots, B) lcm ( 1 , … , B ) が 5 2 5^2 5 2 で 割り切れるのは B ≥ 25 B \geq 25 B ≥ 25 、41 41 41 で 割り切れるのは B ≥ 41 B \geq 41 B ≥ 41 の ときなので 1025 ∣ k ⟺ B ≥ 41 1025 \mid k \iff B \geq 41 1025 ∣ k ⟺ B ≥ 41 。同様に 1052 ∣ k ⟺ B ≥ 263 1052 \mid k \iff B \geq 263 1052 ∣ k ⟺ B ≥ 263 。よって 41 ≤ B ≤ 262 41 \leq B \leq 262 41 ≤ B ≤ 262 なら 定理 5.24( p = 2027 p = 2027 p = 2027 , p ′ = 1019 p' = 1019 p ′ = 1019 )の 仮定が みたされ、 B ≤ 40 B \leq 40 B ≤ 40 では どちらの 位数も k k k を 割らないので、最小の B B B は 41 41 41 。B ≥ 263 B \geq 263 B ≥ 263 では 両方の 位数が k k k を 割るので 仮定が みたされず、定理は 何も 保証しない。ただし定理は 十分条件に すぎず、途中の 加算で 2 点の x x x 座標が たまたま 一方の 素因数だけを 法と して 一致したり、2 倍する 点の y y y 座標が 一方の 素因数だけを 法と して 0 0 0 に なったりすれば、因数が 出力される(計算機で 実行すると、 B = 41 B = 41 B = 41 では 2027 2027 2027 が、B = 47 B = 47 B = 47 では 途中で 1019 1019 1019 が 見つかる)。