为什么比特币椭圆曲线上的这个特殊点看起来不属于那个椭圆曲线?
Why this particular point inverse on bitcoin's elliptic curve looks like it doesn't belong to that elliptic curve?
我有这个点属于 Secp256k1 曲线:
P(x,y) = (0xeac136e97ce6bf3e2bceb65d906742f7317b6518c54c64353c43dcc36688c47,
0x477bc56ad656f92ce7ad2e832ced54eb923ee3ca6b35938da81eb91b926e9075)
我有P点的逆:
P(x,-y) = (0xeac136e97ce6bf3e2bceb65d906742f7317b6518c54c64353c43dcc36688c47,
0xcac32ca278717b5313c1a919437275f5d4aacaa2cdf0fa65c6a1bbff59603a8f)
这是我在 Python
中的 "tests"
x = 0xeac136e97ce6bf3e2bceb65d906742f7317b6518c54c64353c43dcc36688c47
y = 0x477bc56ad656f92ce7ad2e832ced54eb923ee3ca6b35938da81eb91b926e9075
_y = 0xcac32ca278717b5313c1a919437275f5d4aacaa2cdf0fa65c6a1bbff59603a8f
F = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f
检查 Point(x,y) 是否真的在比特币的椭圆曲线上:
>>> pow(y, 2, F) == ((pow(x, 3) + 7) % F)
True
检查 Point(x,-y) 是否真的是 Point(x,y) 的逆 mod F:
>>> (y*_y) % F
1
检查 Point(x, -y) 是否在比特币的椭圆曲线上:
>>> pow(_y, 2, F) == ((pow(x, 3) + 7) % F)
False
谁能告诉我我做错了什么?因为椭圆曲线上的逆点也应该属于那条曲线。
你-y
的计算有误。您计算了 y
的 乘法 倒数。使用 _y
的定义,您可以检查 y *_y % F
的计算结果是否为 1
。
相反,-y = F-y
在这种情况下:
>>> _y = F-y
>>> hex(_y)
'0xb8843a9529a906d31852d17cd312ab146dc11c3594ca6c7257e146e36d916bba'
>>> pow(_y, 2, F) == ((pow(x, 3) + 7) % F)
True
我有这个点属于 Secp256k1 曲线:
P(x,y) = (0xeac136e97ce6bf3e2bceb65d906742f7317b6518c54c64353c43dcc36688c47,
0x477bc56ad656f92ce7ad2e832ced54eb923ee3ca6b35938da81eb91b926e9075)
我有P点的逆:
P(x,-y) = (0xeac136e97ce6bf3e2bceb65d906742f7317b6518c54c64353c43dcc36688c47,
0xcac32ca278717b5313c1a919437275f5d4aacaa2cdf0fa65c6a1bbff59603a8f)
这是我在 Python
中的 "tests"x = 0xeac136e97ce6bf3e2bceb65d906742f7317b6518c54c64353c43dcc36688c47
y = 0x477bc56ad656f92ce7ad2e832ced54eb923ee3ca6b35938da81eb91b926e9075
_y = 0xcac32ca278717b5313c1a919437275f5d4aacaa2cdf0fa65c6a1bbff59603a8f
F = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f
检查 Point(x,y) 是否真的在比特币的椭圆曲线上:
>>> pow(y, 2, F) == ((pow(x, 3) + 7) % F)
True
检查 Point(x,-y) 是否真的是 Point(x,y) 的逆 mod F:
>>> (y*_y) % F
1
检查 Point(x, -y) 是否在比特币的椭圆曲线上:
>>> pow(_y, 2, F) == ((pow(x, 3) + 7) % F)
False
谁能告诉我我做错了什么?因为椭圆曲线上的逆点也应该属于那条曲线。
你-y
的计算有误。您计算了 y
的 乘法 倒数。使用 _y
的定义,您可以检查 y *_y % F
的计算结果是否为 1
。
相反,-y = F-y
在这种情况下:
>>> _y = F-y
>>> hex(_y)
'0xb8843a9529a906d31852d17cd312ab146dc11c3594ca6c7257e146e36d916bba'
>>> pow(_y, 2, F) == ((pow(x, 3) + 7) % F)
True