本科组挺离谱的,睡醒被第二十名拉开一大截
1.TH_Curve
题目
1 | from Crypto.Util.number import * |
对照点加的公式,是Twisted Hessian Curves
有一道 Hessian Curves 的例题
https://blog.maple3142.net/2023/07/09/cryptoctf-2023-writeups/#barak
多了个 a
1 | import gmpy2 |
记
曲线本身是个多项式
1 | p = 10297529403524403127640670200603184608844065065952536889 |
EllipticCurve_from_cubic
需要三个变量才能构造
1 | d=8817708809404273675545317762394593437543647288341187200 |
曲线转换后再代入点:
1 | from Crypto.Util.number import * |
点在曲线中的转换:
1 | E = EllipticCurve(GF(p), [a4,a6]) |
2.BabyCurve
1 | #!/usr/bin/env python |
差点舍本逐末,因为a,b很小,直接在源码的基础上爆破c,d 就很方便,然后是ECC中的离散对数问题
1 | #!/usr/bin/env python |
求解以base为底,a的对数;ord为base的阶,可以缺省,operation可以是'+'与 '*',默认为'*';bounds是一个区间(ld,ud),需要保证所计算的对数在此区间内。
1 | #通用的求离散对数的方法 |
3.RSA_loss
1 | from Crypto.Util.number import * |
试了一下直接正常爆破 k*n 不可行
bcactf-4.0/rsa-is-broken/rsa-broken-sol.py at main · BCACTF/bcactf-4.0 (github.com)
1 | import libnum |
已知 头DASCTF{
,尾 }
,中间未知,需要未知的位数小于 n 才能做,所以我们还需要将未知部分拆分成两份,一部分爆破,一部分用于求解
1 | from Crypto.Util.number import * |
4.TheoremPlus
1 | from Crypto.Util.number import * |
测试发现这就是算素数个数的,但要-2
1 | def decode_e(e): |
找到——Python 埃拉托色尼筛法 – 寻找质数
Python 埃拉托色尼筛法 – 寻找质数|极客教程 (geek-docs.com)
然后费马小定理分解 n
1 | def sieve_of_eratosthenes(n): |
除了 埃拉托色尼筛法 找素数之外
sage中可以用 prime_pi(703440151)
函数来输出703440151
中有多少个素数