為什麼Secp256K1的基點G似乎不在橢圓曲線上?
據我了解,這些是橢圓曲線上Secp256K1的基點G的座標,採用十六進制和十進制格式。
十六進制
Gx = (79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798)
Gy = (483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8)
十進制
Gx = (55066263022277343669578718895168534326250603453777594175500187360389116729240)
Gy = (32670510020758816978083085130507043184471273380659243275938904335757337482424)
我不明白的是,如果我在下面的相應方程(y² = x³ + 7)中輸入這些值,似乎 G 點根本不在曲線上。但它應該,對吧?那我錯了什麼?
(32670510020758816978083085130507043184471273380659243275938904335757337482424)² 不等於 (55066263022277343669578718895168534326250603453777594175500187360389116729240)³ + 7
secp256k1 曲線在 x 和 y 座標上定義,它們是有限域 GF(2^256 - 2^32 - 977) 的成員,或者換句話說,它們的運算僅在考慮模 1157920892373161954235709850086879078532699846656405640394575846307 時才成立。
55066263022277343669578718895168534326250603453777594175500187360389116729240 ^ 3 - (32670510020758816978083085130507043184471273380659243275938904335757337482424 ^ 2 + 7)是完全1442042049659660869506300006036683750029629333882594701370927246876626245108435922902327776681700708714008192087431130951749952236093997894375239788520937倍115792089237316195423570985008687907853269984665640564039457584007908834671663。
有限域數學和橢圓曲線不使用“正常運算”。例如,添加兩個有限域元素 a 和 b 並不像 a + b 那樣簡單。它實際上是 (a+b)%Prime,其中 prime 是有限域的大小,這確保了 CLOSED 屬性的含義。這表示如果 a 在集合中並且 b 在集合中,則 a + b 也在集合中。乘法也是如此,這就是我們在這裡所擁有的。a b=(a b)%素數
所以對於 gx 和 gy,你可以使用 (gy^2) % (2^256 - 2^32 - 977) = ((gx^3) + 7) % (2^256 - 2^32 - 977)。這些實際上是相等的。