楕円曲線暗号について調査していたら、楕円曲線 (y^3 = x^2 + a*x + b) の特性が興味深かったので、まとめてみました。
わかりやすくするため、a=-1 固定でbの値をだんだん大きくしてみました。
b = -0.4
右の曲線がだんだん膨らみ、左に小さな島ができます。
b = 0.3849…
もとの曲線のくっつきます。判別式D=4*a^3+27*b^2がD=0
b = 0.5
そして最後に曲線に島が飲み込まれていきます。
なんか生物的で面白いです。
これだけでなく、楕円加算という曲線と直線の3つの交点(接線の場合は2点)を加算と見立てる演算があります。
これをExcelで演算してみました。(加算を34回順次行い、演算ごとに結果を描画することによって曲線上の点であることを確認)
B列:x, C列:y, D列:直線の傾きL、E列:演算誤差(ゼロになること)の確認(y^2-x^3+x)
L=(y2-y2)/(x2-x2) ※はじめの一点は接線の傾きなので微分でもとめる(L=(3*x^2+a)/(2*y) )
P(x1,y1), Q(x2,y2), R(x3, y3)として
P + Q = R
x3=L^2-x1-x2
y3=L*(x1-x3)-y1
※最初だけ、P + P = Q (x1=x2,y=1=y2とする)
P,Q,R,Sの点について、下記サイトで描画してみました。
https://www.desmos.com/calculator/zvix1zzdjm
加算結果はY軸対象の点に置き換えるのがルールのようです。
楕円曲線について、ちょっとは理解が深まりました。