为什么比特币椭圆曲线上的这个特殊点逆看起来不属于那个椭圆曲线?

2024-04-19 23:28:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个属于Secp256k1曲线的点:

P(x,y) = (0xeac136e97ce6bf3e2bceb65d906742f7317b6518c54c64353c43dcc36688c47,
          0x477bc56ad656f92ce7ad2e832ced54eb923ee3ca6b35938da81eb91b926e9075)

我有点p的倒数:

P(x,-y) = (0xeac136e97ce6bf3e2bceb65d906742f7317b6518c54c64353c43dcc36688c47,
           0xcac32ca278717b5313c1a919437275f5d4aacaa2cdf0fa65c6a1bbff59603a8f)

下面是我在Python中的“测试”

x = 0xeac136e97ce6bf3e2bceb65d906742f7317b6518c54c64353c43dcc36688c47

y = 0x477bc56ad656f92ce7ad2e832ced54eb923ee3ca6b35938da81eb91b926e9075

_y = 0xcac32ca278717b5313c1a919437275f5d4aacaa2cdf0fa65c6a1bbff59603a8f

F = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f

检查点(x,y)是否真的位于比特币的椭圆曲线上:

>>> pow(y, 2, F) ==  ((pow(x, 3) + 7) % F)
True

检查点(x,-y)是否真的是点(x,y)的逆模F:

>>> (y*_y) % F
1

检查点(x,-y)是否在比特币的椭圆曲线上:

>>> pow(_y, 2, F) ==  ((pow(x, 3) + 7) % F)
False

有人能告诉我我做错了什么吗?椭圆曲线上的点逆也应属于该曲线。你知道吗


Tags: falsetrue检查点曲线椭圆secp256k1倒数pow
1条回答
网友
1楼 · 发布于 2024-04-19 23:28:46

你对-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

相关问题 更多 >