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

数学の楕円曲線
楕円曲線は y2=x3+ax+b で表現されます。
注意すべき点は、 Δ=4a3+27b2=0 が必要であります。
楕円曲線自体は滑らかで、 a,b の値でさまざまな形になりますが、暗号学で楕円曲線を利用する場合は、有限体上の楕円曲線の点の集合を利用します。
有限体上の楕円曲線の整数点の集合 (Elliptic Curve over Finite Fields)
暗号学で利用するときは精度を重視するため、整数有限体上の楕円曲線を利用します。 p>3 を素数とする。有限体 Fp 上の楕円曲線 E: y2=x3+ax+b(modp) の点の集合は下記の性質を満たします:
元 (Element)
y2=x3+ax+b(modp) の解 (x,y)∈Zp×Zp 全体の集合
単位元 (Identity Element)
無限遠点(point at infinity) O P∈E について、 P+O=O+P=P と定義する
逆元 (Inverse Element)
(x,y)∈E についての逆元を (x,−y) とする
加算
P=(x1,y1),Q(x2,y2) を E 上の点とする もし x1=x2 かつ y1=−y2 ならば P+Q=O でなければ R=P+Q=(x3,y3)∈Zp×Zp とする: x3y3λ=λ2−x1−x2(modp)=λ(x1−x3)−y1(modp)=⎩⎨⎧x2−x1y2−y1(modp)2y13x12+a(modp)if P=Qif P=Q
二倍算
P=(x1,y1),Q=(x2,y2)∈E,Q=2P=P+P の場合は若干特殊で {x2y2=(2y1)2−2x13x12+a)=y1+(2y13x1+a)(x2−x1) で計算します
スカラー倍算
P=(x1,y1),Q=(x2,y2)∈E,Q=nP=n回P+P+...+P の場合、スカラー倍算と呼びます。 P,Q∈E が知っている上で、 Q=nP を満たす n を求める問題を、楕円曲線離散対数問題と呼びます。 n回P+P+...+PP を n 回足し算するより、 n を2の倍数に変改して加算した方が効率的です 例 n回P+P+...+Pn=7 の場合:
n21P22P=1+2+4=20+21+22=20P+20P=P+P=2P=21P+21P=2P+2P=4P Q=nP=(20+21+22)P=20P+21P+22P=P+2P+4P=7Pで計算できます
マルチスカラー倍算
P1,...,Pn を楕円曲線の点、 x1,...,xn を有限体の点としたとき Q=x1P1+...+xnPn を求めることをマルチスカラー倍算と呼びます。 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