什么是椭圆曲线上的加法

椭圆曲线图形示例

在这里插入图片描述
注意,椭圆曲线随着你参数的不同,有不同的形态,这里仅是一种示例,详细的关于椭圆曲线的知识可以后附扩展知识连接

椭圆曲线上的加法

椭圆曲线上的加法不是我们通常意义上的数值加法,而是一种特殊的几何运算。在椭圆曲线密码学中,我们将椭圆曲线上的点进行组合,这种组合遵循特定的规则,称为“椭圆曲线上的点加法”。

具体来说,椭圆曲线上的点加法规则如下:

  1. 如果两个点 P 和 Q 是不同的,那么我们可以连接 P 和 Q,得到一条直线。这条直线将与椭圆曲线相交于第三个点 R’。然后我们将 R’
    关于 X 轴对称,得到 R。最后,R 就是 P 和 Q 相加的结果(P + Q = R)。
  2. 如果两个点 P 和 Q 是相同的(P = Q),我们可以在椭圆曲线上找到 P 点的切线。这条切线将在椭圆曲线上与另一个点 R’
    相交。同样地,我们将 R’ 关于 X 轴对称,得到 R。那么 R 就是 P 和 Q 相加的结果(P + Q = R)。
  3. 如果两个点 P 和 Q 在同一条竖直线上,那么 P + Q 的结果被定义为“无穷远点”,记作
    O。这个点在椭圆曲线上不存在,但在椭圆曲线密码学中起着特殊的作用。事实上,对于任何椭圆曲线上的点 P,都有 P + O = P。

扩展了解

https://picture.iczhiku.com/weixin/message1630701446534.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值