i春秋"巅峰极客"2020密码学部分详解

一、tryecc

1.1 题目信息

附件是一个sage脚本与一个文本文件,Gitee备份在此

1.2 分析

\(E_{1}: y^{2}\equiv x^{3}+ax+c\ \textrm{mod}\ N ; E_{2}: y^{2}\equiv x^{3}+ax+b\ \textrm{mod}\ N\)
我们总结一下已知量和未知量:

已知 未知
N,C,P1,P2,P3,P4 A,B,m1,m2
那么已知\(P_{1}(x_{1},y_{1}),P_{2}(x_{2},y_{2})\)就可以计算出\(a,b\)
$
y_{1}^{2}\equiv x_{1}^{3}+a\cdot x_{1}+c\ \textrm{mod}\ N \
y_{2}^{2}\equiv x_{2}^{3}+a\cdot x_{2}+b\ \textrm{mod}\ N \
a=[y_{1}{2}-x_{1}-c]\cdot x_{1}^{-1}\ \textrm{mod}\ N \
b=y_{2}{2}-x_{2}-a\cdot x_{2}\ \textrm{mod}\ N \
$

好在\(x_{1}\)在模\(N\)下有逆,于是\(a,b\)就可以解出,到此得到了\(E_{1},E_{2}\)

\(P_{3}=m_{1}\cdot P_{2}\ in\ E_{2},P_{4}=m_{2}\cdot P_{2}\ in\ E_{2}\)

丢到sgae里面去解离散对数,结果发现解不出来!

但是发现N不是素数,用yafu分解一下N,发现N是两个素数的乘积,记为\(N=p\cdot q\),那么椭圆曲线\(E_{2}\)可重写为
\(E_{2}: y^{2}\equiv x^{3}+ax+b\ \textrm{mod}\ p\cdot q\),这样\(E_{2}\)上的点也满足下面两个等式:
\( E_{p}: y^{2}\equiv x^{3}+ax+b\ \textrm{mod}\ p \\ E_{q}: y^{2}\equiv x^{3}+ax+b\ \textrm{mod}\ q \)

\(E_{2}\)上的点同时在\(E_{p}\)\(E_{q}\)上(试了一下,我们可以求解\(P_{3},P_{4}\)在椭圆曲线\(E_{p},E_{q}\)上关于基点\(P_{2}\)的离散对数)
\(P_{3}=m_{1}\cdot P_{2}\ in\ E_{2}\) 则有
\( P_{3}=m_{1}\cdot P_{2}\ \ in\ E_{p} \\ P_{3}=m_{1}\cdot P_{2}\ \ in\ E_{q} \)

那是不是意味着我们解出\(P_{3}\)在椭圆曲线\(E_{p}\)上关于基点\(P_{2}\)的离散对数就是\(m_{1}\)呢?非也!我们解出的只是\(m_{1}\ \textrm{mod}\ order_{E_{p}}(P_{2})\),即\(m_{1}\)模了\(P_{2}\)在椭圆曲线\(E_{p}\)上的阶之后的值!

要想解出\(M_{1}\),需要将\(P_{3}\)在椭圆曲线\(E_{p},E_{q}\)上关于基点\(P_{2}\)的离散对数结合起来!
\( m_{1}\equiv s_{p}(1)\ \textrm{mod}\ order_{E_{p}}(P_{2}) \\ m_{1}\equiv s_{q}(1)\ \textrm{mod}\ order_{E_{q}}(P_{2}) \)
这里\(s_{p}(1),s_{q}(1)\)分别是\(P_{3}\)在椭圆曲线\(E_{p},E_{q}\)上关于基点\(P_{2}\)的离散对数;

使用中国剩余定理解上述方程组即可解出\(m_{1}\),同理解出\(m_{2}\)

1.3 解题

上述链接中的solve.sage为解题的脚本;程序运行结果如下(运行时间有点长,稍微等一下):

$ sage solve.sage
  ***   Warning: increasing stack size to 2000000.
flag{de7a89ab1d074ef3930fb3054c0e3ac8}

后记

一直在等师傅们关于密码学题目的writeup,结果一直没有找到;就只能把自己唯一做出来的一道题目的writeup写一下。

posted @ 2020-10-09 17:15  _Mind  阅读(572)  评论(2编辑  收藏  举报