python 椭圆曲线加法_椭圆曲线上点的运算

https://aaron67.cc/2020/09/26/ec-point-operation/

对定义在有限域上的椭圆曲线

E

=

(

p

,

a

,

b

,

G

,

n

,

h

)

E = (p, a, b, G, n, h)

E

=

(

p

,

a

,

b

,

G

,

n

,

h

)

y

2

x

3

+

a

x

+

b

(

m

o

d

p

)

y^2 \equiv x^3 + ax + b \pmod{p}

y

2

x

3

+

a

x

+

b

(

m

o

d

p

)

本文将通过代码计算下面两个问题:

已知曲线上的点

P

=

(

x

P

,

y

P

)

P = (x_P, y_P)

P

=

(

x

P

,

y

P

)

Q

=

(

x

Q

,

y

Q

)

Q = (x_Q, y_Q)

Q

=

(

x

Q

,

y

Q

)

,求点

R

=

P

+

Q

R = P + Q

R

=

P

+

Q

已知整数

k

k

k

,求点

K

=

k

G

K = k \cdot G

K

=

k

G

比特币使用的椭圆曲线由

Secp256k1

标准定义,我们可以事先声明好这些参数,并实现一些基础方法。

import collections

EllipticCurve = collections.namedtuple('EllipticCurve', 'name p a b g n h')

curve = EllipticCurve(

name='Secp256k1',

p=0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f,

a=0,

b=7,

g=(0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798, 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8),

n=0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141,

h=1,

)

def on_curve(point):

"""Returns True if the given point lies on the elliptic curve."""

if point is None:

# None represents the point at inf

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
椭圆曲线加法乘法是密码学中常用的加密算法,Python中也提供了相应的库来实现这些操作。下面简单介绍一下如何使用Python实现椭圆曲线加法乘法。 1. 加法运算 椭圆曲线加法的基本原理是将两个相加得到第三个。具体实现过程如下: 首先定义一个椭圆曲线的类,包括曲线参数a、b和模数p,以及的坐标x和y。 ```python class EllipticCurve: def __init__(self, a, b, p): self.a = a self.b = b self.p = p class Point: def __init__(self, x, y): self.x = x self.y = y ``` 接下来,实现椭圆曲线上的加法运算。如果两个相同,则需要进行的倍乘运算。如果两个不同,则需要计算斜率k,然后根据斜率和的坐标计算第三个的坐标。 ```python def add(self, P, Q): if P == None: return Q if Q == None: return P if P.x == Q.x and P.y != Q.y: return None if P.x == Q.x: k = (3 * P.x * P.x + self.a) * pow(2 * P.y, -1, self.p) % self.p else: k = (Q.y - P.y) * pow(Q.x - P.x, -1, self.p) % self.p x3 = (k * k - P.x - Q.x) % self.p y3 = (k * (P.x - x3) - P.y) % self.p return self.Point(x3, y3) ``` 2. 乘法运算 椭圆曲线乘法的基本原理是将一个倍乘得到另一个。具体实现过程如下: 首先定义一个椭圆曲线的类,包括曲线参数a、b和模数p,以及的坐标x和y。 ```python class EllipticCurve: def __init__(self, a, b, p): self.a = a self.b = b self.p = p class Point: def __init__(self, x, y): self.x = x self.y = y ``` 接下来,实现椭圆曲线上的倍乘运算。通过不断相加同一个实现倍乘运算。 ```python def mul(self, n, P): R = None while n > 0: if n % 2 == 1: R = self.add(R, P) P = self.add(P, P) n = n // 2 return R ``` 以上就是Python实现椭圆曲线加法乘法的基本方法。需要注意的是,在实际应用中,需要选择合适的曲线参数和模数,以确保算法的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值