Elliptic Curve Form

2021-08-01

Intro

最近做題目時,打開題目看到一個高次曲線,還有一個函數實作點的加法,雖然知道八成是橢圓曲線的變種,但完全不知道要怎麼處理,所以寫了這篇文章搜集橢圓曲線不同形式之間的轉換方法。

形式們

Form name Equation
最常用的 \(y^2 = x^3 + ax + b\)
Weierstrass \(y^2 + axy + cy = x^3 + bx^2 + dx + e\)
projective \(y^2z = x^3 + axz^2 + bz^3\)
Jacobian \(y^2 = x^3 + axz^4 + bz^6\)
Montgomery \(by^2 = x^3 + ax^2 + x\)
Edward \(x^2 + y^2 = c^2(1 + dx^2y^2)\)
Twisted Edward \(ax^2 + y^2 = 1 + dx^2y^2\)
Huff \(ax(y^2 - 1) = by(x^2 - 1)\)

我們的目標是把所有其他curve變成「最常用的」或是 Weiestrass,因為這兩種曲線可以直接塞進 sage 裡面跑。另外,Edward 系列也有 projective 版本,但大同小異。

Projective

對於一個 projective 的點 \((x, y, z)\),他會對應到橢圓曲線的點 \((\frac{x}{z}, \frac{y}{z})\),然後參數不變。

Jacobian

跟 projective 很像,一個點 \((x, y, z)\) 會對應到橢圓曲線的 \((\frac{x}{z^2}, \frac{y}{z^3})\),然後參數不變。

Montgomery

把 Montgomery 的式子除上 \(b^3\)

\[\left(\frac{y}{b}\right)^2 = \left(\frac{x}{b}\right)^3 + \frac{a}{b}\left(\frac{x}{b}\right)^2 + \frac{1}{b^2}\left(\frac{x}{b}\right)\]

這樣就變成 Weiestrass form 了,所以 Montgomery 的點 \((x, y)\) 會對應到 \((\frac{x}{b}, \frac{y}{b})\)

Edward

這是 Twisted Edward curve 的一個特例,我們可以把原式除上 \(c^2\) 然後改寫成

\[\left(\frac{x}{c}\right)^2 + \left(\frac{y}{c}\right)^2 = 1 + dc^4\left(\frac{x}{c}\right)^2\left(\frac{y}{c}\right)^2\]

這是 Twisted Edward 中 \(a = 1\) 的特例。

Twisted Edward

我們可以它轉換成 Weiestrass curve:

\[y^2 = x^3 + 2(a + d)x^2 + (a - d)^2x\]

且一個點 \((x, y)\) 會被轉換成 \(((a - d)\frac{1 + y}{1 - y}, (a - d)\frac{2(1 + y)}{x(1 - y)})\)有興趣的人可以推推看

參考資料

Huff

我們可以它轉換成 Weiestrass curve:

\[y^2 = x^3 + (a + b)x^2 + abx\]

且一個點 \((x, y)\) 會被轉換成 \((\frac{bx - ay}{y - x}, \frac{b - a}{y - x})\)有興趣的人可以推推看

參考資料同 Twisted Edward

Script

有機會的話或許可以寫個 python 任意轉換這些東西。

Conclusion

雖然還是有題目連 curve 都不給,要用加法公式自己判斷,但有了這個表再去查也方便許多,祝大家再也不會看到完全不知道在幹嘛的曲線!