ImageinaryCTF 2023 Crypto
出了两个中等难度
tan
题目
tan(m).n(1024)
还原m
先用内置函数arctan还原一个初始解$\phi$
周期性得
满足这个关系,我一开始也是用格子解的,忘记给第一行加平衡向量了。就稍微弄的有点复杂,先把小数均扩大为整数,因为有小量误差,然后求解二元cop。也算是出了。格子还是不熟练呀,总之就是理解不到位,脚本小子当多了。
贴一下格解法
第一行做平衡,相当于最大的满足等式,从而出现目标解k
c = -0.7578486465144361653056740883647981074157721568235263947812770328593706155446273431983003083023944193451634501133844062222318380912228469321984711771640337084400211818130699382144693337133198331117688092846455855532799303682791981067718891947573941091671581719597626862194794682042719495503282817868258547714
c = arctan(c)
pie=pi.n(1024)
L = matrix(QQ, [[1, 0, 0], [c, 1, 0], [pie, 0, 1]])
L[:, 0] *= 2**1024
k=int(L.LLL()[0][-1])
long_to_bytes(int(k*pie+c))
Wasteful
这个就比较简单,但是没有烂掉
已知
这里很明显
继续变换
这里相比于其他值显得很小,所以可得到p+q的近似解,通过z3求解,得到p的近似解,然后就是cop已知p高位的那一套
exp也不贴了,看个解题思路就行
SUS
没出,觉得很nb,来复现一下
题目
def sus(sz, d):
while True:
p = getPrime(sz)
pp = sum([p**i for i in range(d)])
if isPrime(pp):
return p, pp
sus(512,3)
r=getPrime(512*3)
n=p*q*r
目标分解n
r是p^3^一样大小,很明显这里cop什么的都用不了
比赛的时候啥都想到了,包括关键的式子
然后在构建一个群,它的阶为$p^3-1$这里卡住了
看了wp,突然就想到了,degree为3的多项式商环的阶不就是p^3-1
狠狠学习
有了这个,求解思路就很清晰了
随机生成多项式f(x),多项式环K的阶即为(p^3-1)。
对于环K上的任意元素a,a^n^ 的order为p-1,所以a^n^系数为(u,0,0)这样的形式。
所以对环R上的任意元素经过n次方操作后的一次项或者二次项的系数gcd一下就得到n