わからん。
楕円曲線暗号 (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など)
- : 署名対象メッセージのハッシュ値 を整数に変換したもの。
署名生成
- 秘密鍵 を用意する。
- 一時的な秘密鍵(nonce) を、 の範囲からランダムに生成する。
- スカラー倍算を行い、点 を計算する。
- を計算する。 なら を選び直す。
- を計算する。 なら を選び直す。
- 署名はペア となる。
注意: の値は絶対に再利用してはならず、推測不可能でなければなりません。 が漏洩・重複すると、署名から秘密鍵 が算出されてしまいます。
署名検証
- 公開鍵 を用意する。
- を計算する。
- を計算する。
- 点 を計算する。
- が成立すれば、署名は正当である。
この検証が成立する理由は、
となり、署名時に計算した点と一致するためです。