Math World Lab

楕円曲線暗号(ECC)と代数幾何学の最前線

ビットコインとApple端末の鍵を守る曲線 — 点の加算群と離散対数問題の不可逆性

ECC Secp256k1 y²=x³
この単元の発見をシェア
3行要約(Key Takeaways / AIOサマリー)
1
ビットコイン、イーサリアム、AppleのTouch ID/Face ID(Secure Enclave)、現代のHTTPS/TLSの安全性を支える最強の公開鍵暗号
2
楕円曲線 y2=x3+ax+by^2 = x^3 + ax + b 上で、接線を引き第三の交点を xx 軸反転させる幾何学的操作が数学的な『群(可換群)』を形成する
3
『点 PP を kk 回足した点 Q=kPQ = kP を計算するのは簡単だが、PP と QQ から秘密鍵 kk を逆算することはスーパーコンピュータでも不可能(楕円曲線離散対数問題)』という不可逆性を暗号化に利用している

なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値

Purpose & Motivation

なぜ生まれたのか?

従来のRSA暗号が3072ビットもの長大な鍵を必要とするのに対し、楕円曲線暗号はわずか256ビットで同等以上の安全性を誇り、スマホのバッテリー消費や通信量を激減させました。抽象的で難解とされる現代数学の『代数幾何・アーベル群』が、いかに現実世界のデジタル経済とプライバシーを守る最強の盾になっているかを学べます。

身につく武器・思考力

代数曲線上の幾何学的群演算の直感、有限体($\mathbb{F}_p$)上の離散数学の基礎、ECDSA(楕円曲線電子署名)の仕組み理解

実社会・ITでの活躍現場

  • •Bitcoin・Ethereumブロックチェーンのトランザクション署名(secp256k1曲線)
  • •iPhoneやMacのハードウェア暗号化チップ(Apple Secure Enclave, NIST P-256曲線)
  • •次世代Webプロトコル(TLS 1.3 / HTTPS / SSH)の鍵交換アルゴリズム(X25519 / Ed25519)
  • •パスキー(Passkeys / FIDO2)による生体認証ログインの公開鍵基盤

Layer 1 — 直感・シミュレーター

点 PP の位置スライダーを動かしてみてください。『2倍算(2P)』では点 PP で引いた接線が曲線と交わり、その交点を xx 軸に対称反転させた赤い点 2P2P が求まります。『2点加算(P + Q)』では割線によって P+QP + Q が生成されます。この加算を何万回も繰り返すと、点が曲線上のどこへ飛んでいくか追跡不能になる不可逆性を体感できます。

P交点 R'2P (加算結果)
ECC公開鍵暗号の加算群(接線とx軸反転)
点 P の x 座標-1.80
直感チェック!ミニクイズ

楕円曲線暗号において、秘密鍵 k と基準点 G から公開鍵 Q = kG を計算するのは容易だが、Q と G から k を求めるのが極めて困難である数学的性質を何と呼ぶか?

Layer 2 — 定義・受験・証明

定義

**ワイエルシュトラス標準形の楕円曲線(Elliptic Curve)**とは、標数が2でも3でもない体上で定義される非特異な三次代数曲線 y2=x3+ax+by^2 = x^3 + ax + b (判別式 4a3+27b2≠04a^3 + 27b^2 \ne 0)である。無限遠点 O\mathcal{O} を単位元として、曲線上の点の集合はアーベル群(可換群)をなす。

公式・数理モデル

y2=x3+ax+b接線の傾き (P=Q):λ=3x12+a2y1割線の傾き (P≠Q):λ=y2−y1x2−x1加算合成則: x3=λ2−x1−x2,y3=λ(x1−x3)−y1y^2 = x^3 + ax + b \text{接線の傾き } (P = Q): \lambda = \frac{3x_1^2 + a}{2y_1} \text{割線の傾き } (P \ne Q): \lambda = \frac{y_2 - y_1}{x_2 - x_1} \text{加算合成則: } x_3 = \lambda^2 - x_1 - x_2, \quad y_3 = \lambda(x_1 - x_3) - y_1

証明・導出

**接線と楕円曲線の交点からの2倍算の代数的導出** 点 P(x1,y1)P(x_1, y_1) における接線の方程式は:

y−y1=λ(x−x1)  ⟹  y=λx+(y1−λx1)y - y_1 = \lambda (x - x_1) \implies y = \lambda x + (y_1 - \lambda x_1)

ここで微分の公式より λ=dydx=3x12+a2y1\lambda = \frac{dy}{dx} = \frac{3x_1^2 + a}{2y_1} である。

これを楕円曲線の方程式 y2=x3+ax+by^2 = x^3 + ax + b に代入すると:

(λx+c)2=x3+ax+b  ⟹  x3−λ2x2+(a−2λc)x+(b−c2)=0(\lambda x + c)^2 = x^3 + ax + b \implies x^3 - \lambda^2 x^2 + (a - 2\lambda c) x + (b - c^2) = 0

これは xx に関する3次方程式である。 この接線は点 PP で重解(2つの根 x1,x1x_1, x_1)を持つため、根と係数の関係(3つの根の和が λ2\lambda^2)より:

x1+x1+x3′=λ2  ⟹  x3′=λ2−2x1x_1 + x_1 + x_3' = \lambda^2 \implies x_3' = \lambda^2 - 2x_1

第三の交点の yy 座標は y3′=y1+λ(x3′−x1)y_3' = y_1 + \lambda(x_3' - x_1) となる。 群論の幾何学的定義(3つの同一直線上の点の和は単位元 P+P+R′=OP + P + R' = \mathcal{O})に従い、群の加算結果 2P2P はこの点 R′R' を xx 軸に対称反転させた点とする:

x2P=x3′=λ2−2x1,y2P=−y3′=λ(x1−x2P)−y1x_{2P} = x_3' = \lambda^2 - 2x_1, \quad y_{2P} = -y_3' = \lambda(x_1 - x_{2P}) - y_1

となり、加算公式が代数的に厳密に導かれる(Q.E.D.)。

押さえておきたいポイント

  • 実際の暗号では実数上ではなく、巨大な素数 pp で割った余りの有限体 Fp\mathbb{F}_p 上で計算されるため、点は散らばったグリッド状になる
  • 公開鍵 Q=d⋅GQ = d \cdot G はベースポイント GG に秘密鍵 dd をスカラー倍算したものであり、バイナリ法(Double-and-Add)により O(log⁡d)O(\log d) で高速計算できる
  • RSAの2048ビットと同等の安全性を、ECCはわずか256ビットの鍵長で達成できる
参照基準・学習指導要領との対応

本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。

Layer 3 — 工学応用・現場実装

secp256k1曲線による公開鍵生成(Double-and-Addアルゴリズム)

Bitcoinで用いられるsecp256k1楕円曲線上のスカラー倍算により、秘密鍵(整数)から公開鍵座標を導出するPythonコードです。

1import secrets
2
3# secp256k1 パラメータ y^2 = x^3 + 7 (mod p)
4p = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
5a = 0
6b = 7
7# ベースポイント G
8Gx = 0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
9Gy = 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8
10G = (Gx, Gy)
11
12def point_add(P, Q):
13 """有限体上の楕円曲線加算 P + Q"""
14 if P is None: return Q
15 if Q is None: return P
16 x1, y1 = P
17 x2, y2 = Q
18 if x1 == x2 and y1 != y2: return None
19 if P == Q:
20 lam = (3 * x1 * x1 + a) * pow(2 * y1, p - 2, p) % p
21 else:
22 lam = (y2 - y1) * pow(x2 - x1, p - 2, p) % p
23 x3 = (lam * lam - x1 - x2) % p
24 y3 = (lam * (x1 - x3) - y1) % p
25 return (x3, y3)
26
27def scalar_multiply(k, point):
28 """バイナリ法 (Double-and-Add) によるスカラー倍算 k * P"""
29 result = None
30 current = point
31 while k > 0:
32 if k & 1:
33 result = point_add(result, current)
34 current = point_add(current, current)
35 k >>= 1
36 return result
37
38# 秘密鍵の生成(256ビット乱数)
39private_key = secrets.randbelow(p)
40# 公開鍵の算出 Q = private_key * G
41public_key = scalar_multiply(private_key, G)
42
43print(f"秘密鍵 (Private Key): {hex(private_key)}")
44print(f"公開鍵 X (Public X): {hex(public_key[0])}")
45print(f"公開鍵 Y (Public Y): {hex(public_key[1])}")

次に学ぶならコレ!おすすめトピック

この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元

数理モデル・概念が近い関連トピック

"PASS"c=mᵉ%n
関連度高工学応用

RSA暗号と素数の秘密(公開鍵暗号)

「掛け算は簡単だが、素因数分解は極めて困難」という非対称性を利用した現代暗号の金字塔

"PASS"c=mᵉ%n
関連度高工学応用

ブロックチェーンとハッシュ関数の数学

一方向関数と合同算術で「改ざん不可能な鎖」と「計算コストの証明」を作る仕組み

関連度高工学応用

電子署名の数学(一方向性関数と検証)

秘密鍵で「署名」し公開鍵で「検証」する、法演算のべき乗が生む非対称性

同じレベルで次に挑戦したいトピック

同レベル推薦大学数学

固有値・固有ベクトル

行列で変換しても「向きが変わらない」特別な方向

同レベル推薦大学数学

フーリエ変換と周波数分解

どんなに複雑な波も、単純なサイン波の重ね合わせに分解できる

同レベル推薦大学数学

ベイズの定理(条件付き確率と事前・事後確率)

新たな情報や証拠(エビデンス)を得て「確信度」を更新する確率論

工学・実社会での応用先でつながるトピック

工学・実践連携小学校・算数

最小公倍数・最大公約数

数直線に並ぶ倍数と、ユークリッドの互除法で公約数を探る

xy122436
工学・実践連携中学数学

関数の概念と対応表

「1つの入力にはただ1つの出力」というルールを対応表で確かめる

🎂🎂MATCH!わずか23人で 50.7%
工学・実践連携中学数学

誕生日問題(直感に反する確率のパラドックス)

「わずか23人で50%以上が同じ誕生日?」人間の直感がバグる組み合わせ爆発の謎

あなたの数学力をさらに伸ばす

数学の弱点診断や算数パズルに挑戦してみませんか?

簡単な質問に答えてあなたにぴったりの学習ロードマップを発見したり、直感を試すパズルで数の面白さを体験できます。