ECC初探

为了学习一下ECC加密,练习了unctf2019的一道题目,不算难但是可以很好的学习一下ECC加密的流程,题目主要是AES+ECC,但是重点还是ECC的加密。
下载文件后我们得到一个ecc.sage

E=EllipticCurve(GF(15424654874903),[16546484,4548674875])
G=E(6478678675, 5636379357093)
k=???????
K=k*G
#K=(2854873820564,9226233541419)
aes_key=???????
x=aes_key
M=E.lift_x(x)

r=?????????
C1=M+r*K
x1,y1=C1.xy()
C2=r*G
x2,y2=C2.xy()
print 'C1(%d,%d),C2(%d,%d)'%(x1,y1,x2,y2)

#output:
C1(6860981508506,1381088636252),C2(1935961385155,8353060610242)

这里可以参考ctfwiki上面的ecc代码进行爆破,但是注意一个点:
我们要求解出M,由C1-(C2k)=M+rK-rGk=M(G*k=K)
参考代码如下

E=EllipticCurve(GF(15424654874903),[16546484,4548674875])
G=E(6478678675, 5636379357093)
c1 = E([6860981508506,1381088636252])
c2 = E([1935961385155,8353060610242])

X = G

for i in range(1, 40000000):
    if X == pub:
        secret = i
        print "[+] secret:", i
        break
    else:
        X = X + G
        print i

m = c1 - (c2 * secret)

print "[+] x:", m[0]
print "[+] y:", m[1]
print "[+] x+y:", m[0] + m[1]

结果

这里的secret就是k,x也就是aes_key,将其带入aes的程序代码就可以求出答案。

posted @ 2020-11-08 10:26  Mr_small  阅读(508)  评论(0编辑  收藏  举报