Cryptography

如何獲得任何新曲線的生成器 G 點?

  • November 16, 2018

我有這個比特幣曲線:

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。

  1. G 是組中的一個點,當添加到自身時會在組中產生另一個點。因此,它可以通過重複添加(生成器)生成所有其他點。如果組中元素的數量是素數,則每個點都具有此屬性並且可以用作生成器(通過拉格朗日定理)。

2)只需使用曲線方程。y^2 = x^3 + 7=> y = modsqrt(x^3 + 7)(一切都是mod P)

G 只是從最大子組中任意選擇的一個點(在 secp256k1 的情況下,只有一個子組)。

如果 G 以嚴格的方式選擇,以表明它不是構造的,以便您知道相對於其他點的離散對數,則稍微更可取。

例如 x=1 在您的曲線上,因此您可以使用 {1, 2455109838632409200075678375825088630665501513214133143088640413693816705352929} 作為您的生成器。

引用自:https://bitcoin.stackexchange.com/questions/81039