楕円曲線暗号 — 曲線上の足し算が作る、短くて強い鍵
RSA は「大きな数の素因数分解の難しさ」を鍵にしていました。楕円曲線暗号(ECC)は、まったく別の難しさ — 曲線上の点を何回足したか(スカラー倍の逆算)の困難性 — を鍵にします。同じ安全性をはるかに短い鍵で実現できるため、スマホ・IoT・ブロックチェーンの標準になりました。まずは「点の足し算」という不思議な演算から動かして掴みます。
1. 楕円曲線と「点の足し算」
楕円曲線とは y² = x³ + ax + b という形の曲線です(4a³+27b² ≠ 0 で滑らか)。この曲線上の点には、幾何的に定義された足し算を入れられます。ルールはこうです:2点 P, Q を通る直線を引くと、曲線と必ずもう1点 R で交わる。その R をx軸で反転した点を P + Q と定めます。
下のデモで a, b と2点 P, Q を動かしてください。直線 → 第3交点 R → x軸反転 → P+Q、という作図が描かれます。P = Q のとき(チェックON)は直線が接線になり、これが「2P」の計算になります。
2. 有限体の上へ — 整数だけの離散版とスカラー倍
暗号で使うのは、なめらかな実数の曲線ではなく、有限体 Fp 上の曲線です。座標を「mod p の整数」に限定すると、曲線は連続な線ではなく散らばった格子点の集まりになります。足し算のルール(直線と反転)は同じ式のまま mod p で計算します。
ここで鍵になるのがスカラー倍 kG = G + G + … + G(k回)。下のデモで k を動かすと、点 kG が曲線上をまったく予測できない順序で飛び回るのが見えます。この「規則性のなさ」こそが暗号の強さの源です。
3. なぜ鍵が短くて済むのか — RSA との比較
RSA を破る素因数分解には準指数時間の巧妙なアルゴリズム(数体ふるい法)が存在します。一方 ECDLP には、そうした「近道」が今のところ見つかっていません。攻撃コストが鍵長に対して素直に(指数的に)伸びるため、同じ安全性をずっと短い鍵で達成できます。下のスライダーで安全性レベルを変え、必要な鍵長の差を見てください。
| 項目 | RSA-3072 | ECC(256ビット曲線) |
|---|---|---|
| 安全性レベル | 約128ビット | 約128ビット(同等) |
| 公開鍵サイズ | 約384バイト | 約32〜64バイト |
| 署名サイズ | 約384バイト | 約64バイト |
| 鍵生成コスト | 重い(大きな素数探し) | 軽い(乱数×スカラー倍1回) |
| 署名生成の速さ | 遅い | 速い |
| 署名検証の速さ | 速い(小さな公開指数) | やや遅い |
| 主な採用例 | 従来のTLS証明書・既存資産 | スマホ・IoT・TLS 1.3・ビットコイン/イーサリアム |
鍵と署名が小さいことは、通信量・保存領域・電力が限られるスマホや IoT 機器で決定的に効きます。ブロックチェーンが ECC(secp256k1 など)を採用するのも、全取引に署名が付き、それが恒久的にチェーンへ刻まれるため、署名の小ささがそのまま容量とコストの節約になるからです。
4. ECDH と ECDSA — 実運用での使われ方
ECC は魔法の暗号アルゴリズムそのものではなく、「鍵となる難問」を提供する土台です。その上に、用途別のプロトコルが載ります。
- ECDH(鍵共有):DH鍵交換を楕円曲線上で行う版。アリスが aG、ボブが bG を公開し、共有秘密 abG を各自で計算する。TLS 1.3 の鍵交換はこれ(ECDHE)が主役。
- ECDSA(電子署名):電子署名を楕円曲線で実現する版。秘密鍵 d(スカラー)と公開鍵 Q = dG を使い、メッセージのハッシュに署名する。
いずれも「Q = dG から d は求められない(ECDLP)」という一方向性の上に成り立っています。攻撃と防御の章で見た認証(攻撃と防御)と組み合わせて、はじめて安全な通信になります。
5. まとめと限界
- 点の足し算:直線と第3交点、x軸反転。曲線上の点は群をなす。
- 有限体上のスカラー倍:kG はダブル&アッドで高速、逆算(ECDLP)は √n で絶望的。この非対称が鍵。
- 短くて強い:128ビット安全性が RSA 3072 に対し ECC 256 で済む。スマホ・IoT・ブロックチェーンの標準。
- 使われ方:ECDH(鍵共有)と ECDSA/EdDSA(署名)。認証と組み合わせて安全になる。