楕円曲線

楕円曲線の歴史は非常に長くて、第二世紀で既にDiophantusの本に記載されています。暗号学に楕円曲線を利用するのは20世紀の話です。

数学の楕円曲線

楕円曲線は y2=x3+ax+by^2=x^3+ax+b で表現されます。

注意すべき点は、 Δ=4a3+27b20\Delta = 4a^3+27b^2 \neq 0 が必要であります。

楕円曲線自体は滑らかで、 a,ba,b の値でさまざまな形になりますが、暗号学で楕円曲線を利用する場合は、有限体上の楕円曲線の点の集合を利用します。

有限体上の楕円曲線の整数点の集合 (Elliptic Curve over Finite Fields)

暗号学で利用するときは精度を重視するため、整数有限体上の楕円曲線を利用します。 p>3p>3 を素数とする。有限体 FpF_p 上の楕円曲線 EE: y2=x3+ax+b(modp)y^2=x^3+ax+b \pmod p の点の集合は下記の性質を満たします:

群の性質

元 (Element)

y2=x3+ax+b(modp)y^2=x^3+ax+b \pmod p の解 (x,y)Zp×Zp(x,y) \in \mathbb Z_p \times \mathbb Z_p 全体の集合

単位元 (Identity Element)

無限遠点(point at infinity) OO PEP \in E について、 P+O=O+P=PP+O=O+P=P と定義する

逆元 (Inverse Element)

(x,y)E(x,y) \in E についての逆元を (x,y)(x, -y) とする

加算

P=(x1,y1),Q(x2,y2)P=(x_1, y_1),Q(x_2,y_2)EE 上の点とする もし x1=x2x_1 = x_2 かつ y1=y2y_1 = -y_2 ならば P+Q=OP+Q=O でなければ R=P+Q=(x3,y3)Zp×ZpR= P+Q=(x_3,y_3) \in \mathbb Z_p \times \mathbb Z_p とする: x3=λ2x1x2(modp)y3=λ(x1x3)y1(modp)λ={y2y1x2x1(modp)if PQ3x12+a2y1(modp)if P=Q\begin{aligned} x_3 &= \lambda^2 - x_1 - x_2 \pmod{p} \\ y_3 &= \lambda(x_1 - x_3) - y_1 \pmod{p} \\ \lambda &= \begin{cases} \frac{y_2 - y_1}{x_2 - x_1} \pmod{p} & \text{if } P \neq Q \\[1ex] \frac{3x_1^2 + a}{2y_1} \pmod{p} & \text{if } P = Q \end{cases} \end{aligned}

二倍算

P=(x1,y1),Q=(x2,y2)E,Q=2P=P+PP=(x_1,y_1),Q=(x_2,y_2) \in E, Q=2P=P+P の場合は若干特殊で {x2=(3x12+a2y1)22x1)y2=y1+(3x1+a2y1)(x2x1)\begin{aligned} \begin{cases} x_2 &= (\frac{3x_1^2+a}{2y_1)^2 - 2x_1})\\ y_2&=y_1+(\frac{3x_1+a}{2y_1})(x_2-x_1) \end{cases} \end{aligned} で計算します

スカラー倍算

P=(x1,y1),Q=(x2,y2)E,Q=nP=P+P+...+Pn回P=(x_1,y_1), Q=(x_2,y_2) \in E, Q=nP=\underbrace{P+P+...+P}_\text{n回} の場合、スカラー倍算と呼びます。 P,QEP,Q \in E が知っている上で、 Q=nPQ=nP を満たす nn を求める問題を、楕円曲線離散対数問題と呼びます。 P+P+...+Pn回\underbrace{P+P+...+P}_\text{n回}PPnn 回足し算するより、 nn22の倍数に変改して加算した方が効率的です 例 P+P+...+Pn回\underbrace{P+P+...+P}_\text{n回}n=7n=7 の場合:

n=1+2+4=20+21+2221P=20P+20P=P+P=2P22P=21P+21P=2P+2P=4P\begin{aligned} n &=1+2+4=2^0+2^1+2^2 \\ 2^1P &=2^0P+2^0P=P+P=2P \\ 2^2P &=2^1P+2^1P=2P+2P=4P \end{aligned} Q=nP=(20+21+22)P=20P+21P+22P=P+2P+4P=7P\begin{aligned} Q &=nP =(2^0+2^1+2^2)P \\ &=2^0P+2^1P+2^2P \\ &=P+2P+4P=7P \end{aligned}で計算できます

マルチスカラー倍算

P1,...,PnP_1,...,P_n を楕円曲線の点、 x1,...,xnx_1,...,x_n を有限体の点としたとき Q=x1P1+...+xnPnQ=x_1P_1+...+x_nP_n を求めることをマルチスカラー倍算と呼びます。 SNARKなどで頻繁的に利用されているが、計算量は多いです。効率化に関する研究は現在進行形です。

参考資料

https://zenn.dev/herumi/articles/ecc-multi-scalar-multiplication

https://tex2e.github.io/blog/crypto/point-of-elliptic-curve-over-GF

https://andrea.corbellini.name/ecc/interactive/modk-add.html

Last updated