Cryptography
如何獲得任何新曲線的生成器 G 點?
我有這個比特幣曲線:
y^2 = x^3 + 7
但有限域 Fp 被修改為:
n=115792089237316195423570985008687907853269984665640564039457584007908834675927
1-什麼是G點?
2-如何獲得任何 X 值的 Y 座標?
我正在使用此C#程式碼從X獲取Y , 但它僅適用於原始比特幣曲線。
public BigInteger mod(BigInteger num, BigInteger by) { BigInteger res = num % by; if (res < 0) { res += by; } return res; } public BigInteger EC_GetY(BigInteger x, bool modIt, BigInteger n) { BigInteger n_OVER_FOUR = (n + 1) / 4; BigInteger alpha = mod(BigInteger.Pow(x, 3) + 7, n); BigInteger beta = BigInteger.ModPow(alpha, n_OVER_FOUR, n);//SqRtN BigInteger Y = beta; if (!modIt) { return Y; } Y = n - beta; return Y; }
你不能只改變 N。N 是有限群中元素的數量。您可以選擇一個接近 2^256(或您想要的任意多位)的新(素數)P,並得到一個結果 N。
- G 是組中的一個點,當添加到自身時會在組中產生另一個點。因此,它可以通過重複添加(生成器)生成所有其他點。如果組中元素的數量是素數,則每個點都具有此屬性並且可以用作生成器(通過拉格朗日定理)。
2)只需使用曲線方程。
y^2 = x^3 + 7
=>y = modsqrt(x^3 + 7)
(一切都是mod P)
G 只是從最大子組中任意選擇的一個點(在 secp256k1 的情況下,只有一個子組)。
如果 G 以嚴格的方式選擇,以表明它不是構造的,以便您知道相對於其他點的離散對數,則稍微更可取。
例如 x=1 在您的曲線上,因此您可以使用 {1, 2455109838632409200075678375825088630665501513214133143088640413693816705352929} 作為您的生成器。