ComSec作业五:椭圆曲线

在这里插入图片描述

一、

x的取值范围是0-6,mod 7的二次剩余是1,2,4, 1 = 1 m o d 7 1=1mod7 1=1mod7, 4 = 2 2 m o d 7 4=2^2mod7 4=22mod7. 2 = 3 2 m o d 7 2=3^2mod7 2=32mod7

x0123456
y 2 = x 3 + 2 x + 4 y^2=x^3+2x+4 y2=x3+2x+41466335
是否为二次剩余YYNNNNN
Y1,62,5

(所以 E 7 ( 2 , 1 ) 的 所 有 点 为 ( 0 , 1 ) ( 0 , 6 ) ( 1 , 2 ) ( 1 , 5 ) 以 及 无 穷 远 点 E_7(2,1)的所有点为(0,1)(0,6)(1,2)(1,5)以及无穷远点 E7(2,1)0,10,61,21,5

二、

  1. P=(3,5),-P=(3,-5), − 5 m o d 7 = 2 -5mod7=2 5mod7=2,-P=(3,2)
  2. Q=(2,5),-Q=(2,-5), − 5 m o d 7 = 2 -5mod7=2 5mod7=2,-Q=(2,2)
  3. R=(5,0),-R=(5,0)

三、

p = 11 , a = 1 , b = 7 p=11,a=1,b=7 p=11,a=1,b=7,

因为有
x R = ( λ 2 − x P − x Q ) m o d p x_R=(\lambda^2-x_P-x_Q)mod p xR=(λ2xPxQ)modp

y R = ( λ ( x P − x R ) − y P ) m o d p y_R=(\lambda(x_P-x_R)-y_P)modp yR=(λ(xPxR)yP)modp

λ = y Q − y P x Q − x P m o d p , 若 P ≠ Q \lambda=\frac{y_Q-y_P}{x_Q-x_P}modp,若P\neq Q λ=xQxPyQyPmodpP=Q

λ = 3 x P 2 + a 2 y P m o d p , 若 P = Q \lambda=\frac{3x_P^2+a}{2y_P}modp,若P = Q λ=2yP3xP2+amodpP=Q

G = ( 3 , 2 ) , λ = 3 ∗ 3 ∗ 3 + 1 2 ∗ 2 m o d 11 = 7 G=(3,2),\lambda=\frac{3*3*3+1}{2*2}mod11=7 G=(3,2),λ=22333+1mod11=7

x 3 = 7 2 − 3 − 3 = 10 ( m o d 11 ) y 3 = ( 7 ∗ ( 3 − 10 ) − 2 ) = 4 ( m o d 11 ) x_3=7^2-3-3=10(mod11) y_3=(7*(3-10)-2)=4(mod11) x3=7233=10(mod11)y3=(7(310)2)=4(mod11)

G2G3G4G5G6G7G8G9G10G11G12G13G
(3,2)(10,4)(1,8)(5,4)(4,8)(7,7)(6,8)(6,3)(7,4)(4,3)(5,7)(1,3)(10,7)
λ \lambda λ758164246185
def getLambda(x1, y1, x2, y2, a, p):
    if x1 == x2 and y1 == y2:
        return ((3 * x1 * x1 + a) / (2 * y1)) % p
    else:
        t1 = y2 - y1
        t2 = x2 - x1
        while t2 < 0:
            t2 += p
        while t1 < 0:
            t1 += p
        return fracMod(t1,t2,p)

def fracMod(x,y,p):
    for i in range(p):
        if y*i % p == x:
            return i
def getX(alpha, x1, x2, p):
    return (alpha ** 2 - x1 - x2) % p


def getY(alpha, x1, x3, y3, p):
    return (alpha * (x1 - x3) - y1) % p


if __name__ == '__main__':
    x1 = 3
    y1 = 2
    x2 = 3
    y2 = 2
    n = 13
    a = 1
    p = 11
    for i in range(2, n+1):
        alpha = getLambda(x1, y1, x2, y2, a, p)
        x3 = getX(alpha, x1, x2, p)
        y3 = getY(alpha, x1, x3, y1, p)
        print("lambda:", alpha)
        print(f"{i}G", x3, y3)
        x1 = x3
        y1 = y3

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值