secp256k1真的是一个领域吗?

2024-09-28 15:36:01 发布

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

我知道我的代数已经过时了,但是下面的方法不是一个恒等运算:将GF的一个元素乘以场的基数(模)?我编写了一个程序来验证它,但无法:

from ecpy.curves import Curve, Point  # I use Python 2.7

def bin256(num):
  """binary conversion, returns a binary string, MSB first and LSB last"""
  return '{:0256b}'.format(num)

def ec_multiply(P, d):
  """double-and-add algo. Index decreasing, same naming as Wikipedia:
     P is a point on the curve
     d is a long
     returns P*d"""
  Q = None
  for bit in map(int, bin256(d)):
    if Q is not None:
      Q = Q + Q
    if bit:
      if Q is None:
        Q = P
      else:
        Q = Q + P
  return Q

def main():
  """Picks a random point on secp256k1 and multiply it by the modulus 
     of secp256k1 and print the result."""
     cv = Curve.get_curve('secp256k1')
     N = Point(0x65d5b8bf9ab1801c9f168d4815994ad35f1dcb6ae6c7a1a303966b677b813b00,
               0xe6b865e529b8ecbf71cf966e900477d49ced5846d7662dd2dd11ccd55c0aff7f, cv)
  MODULUS = 2**256 - 2**32 - 2**9 - 2**8 - 2**7 - 2**6 - 2**4 - 1

  Q = ec_multiply(N, MODULUS)
  print 'Q: %064x %064x' % (Q.x, Q.y)

if __name__ == '__main__':
  main()

但我有不同的观点:

^{pr2}$

应为{cd1>}。

知道为什么在secp256k1中乘以模不起作用吗?提前谢谢。

注意事项:

  • 我使用的是python椭圆曲线库ecpy,它可以正常工作,我已经在另一个库(py峈ecc,pure python)上进行了测试,得到了一致的结果。在
  • secp256k1上的乘法使用double-and-add-from Wikipedia,其中的索引是递减的,因为我从MSB开始。在
  • 我使用this excellent paper来解释关于EC的一切以及如何实现它们。在

Tags: andthefromnoneifismaindef