わからん。

楕円曲線暗号 (ECC) の数学的基礎

楕円曲線暗号の安全性は、有限体上の楕円曲線がなす群における離散対数問題 (Elliptic Curve Discrete Logarithm Problem, ECDLP) の困難性に根拠を置いています。


1. 楕円曲線上の群構造

まず、体 上で定義されるワイエルシュトラス方程式

(ただし、)の解 と、無限遠点 を元とする集合を考えます。

この集合には、幾何的な加算を定義することで、 を単位元とするアーベル群を構成できます。

  • 単位元: 無限遠点
  • 加算 (): 異なる2点 を通る直線が曲線と交わるもう1つの点をとし、そのx軸に対する対称点を とすると、 と定義します。
  • 2倍算 (): 点 における接線が曲線と交わるもう1つの点をとし、そのx軸に対する対称点を とすると、 と定義します。
  • 逆元 (): 点 の逆元は、x軸に対して対称な点 です。

2. 有限体への適用

暗号で実際に用いるのは、実数体 ではなく、位数 は素数)の有限体(素体) です。
方程式は で考えられ、曲線上の点の集合 もまた有限アーベル群をなします。この群の位数を位数 (order) と呼びます。

スカラー倍算 () は、この群における加算を 回繰り返す操作です。

このスカラー倍算は、バイナリ法(Double-and-Add) などを用いれば効率的に計算できます。


3. 離散対数問題 (ECDLP)

ECDLPとは、ベースポイントとなる生成元 と、スカラー倍算の結果である点 が与えられたときに、整数 を求める問題です。

  • 秘密鍵: 整数
  • 公開鍵: 点

から を計算するのは容易ですが、 から を求めるのは非常に困難です。これがECCの安全性の根幹です。


P-256 (secp256r1) の具体的なパラメータ

P-256は、secp256r1 とも呼ばれる具体的な曲線の規格です。以下のパラメータで定義されます。

1. 素体

  • 素数 : 256ビットの素数で、特定の構造を持つメルセンヌ素数に近い形をしています。

    この特殊な形により、 の計算(特に剰余算)を高速に行うことができます。

2. 曲線の係数

  • 係数 :
  • 係数 : NISTが公開している特定の256ビットの整数。

これにより、曲線の方程式は となります。

3. 群のパラメータ

  • 生成元 (ベースポイント) : 曲線上の特定の点
  • 位数 : によって生成される巡回部分群の位数。 も256ビットの素数です。
    (16進数)
    秘密鍵 は、 の範囲からランダムに選ばれます。

ECDSA のアルゴリズム

ECDSAは、この群構造を利用して署名を生成・検証します。

  • : ハッシュ関数 (SHA-256など)
  • : 署名対象メッセージのハッシュ値 を整数に変換したもの。

署名生成

  1. 秘密鍵 を用意する。
  2. 一時的な秘密鍵(nonce) を、 の範囲からランダムに生成する。
  3. スカラー倍算を行い、点 を計算する。
  4. を計算する。 なら を選び直す。
  5. を計算する。 なら を選び直す。
  6. 署名はペア となる。

注意: の値は絶対に再利用してはならず、推測不可能でなければなりません。 が漏洩・重複すると、署名から秘密鍵 が算出されてしまいます。

署名検証

  1. 公開鍵 を用意する。
  2. を計算する。
  3. を計算する。
  4. を計算する。
  5. が成立すれば、署名は正当である。

この検証が成立する理由は、

となり、署名時に計算した点と一致するためです。