ECC初探

Posted mr-small

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的程序代码就可以求出答案。






以上是关于ECC初探的主要内容,如果未能解决你的问题,请参考以下文章

Go-ecc加密解密详解与代码

Go-ecc数字签名详解与代码

HALCON - 如何在 halcon 中读取低分辨率 ECC200 数据代码?

shader开发_4.Surface shader初探

如何给小学生讲清楚ECC椭圆曲线加密

ECC 中的 SAP 零售功能