一、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}^{3}-c]\cdot x_{1}^{-1}\ \textrm{mod}\ N \\ b=y_{2}^{2}-x_{2}^{3}-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寫一下。