ImageinaryCTF 2023 Crypto

本文详细介绍了ImageinaryCTF2023加密挑战的解决过程,涉及arctan函数的使用来还原m,通过矩阵运算和格子解法求解问题。此外,还解释了如何处理大数分解问题,利用数学关系式简化计算,以及在无法直接应用常见加密算法时的解题策略。最后,提到了一个未解决的题目sus,探讨了基于群论的解题思路和多项式环的概念。
摘要由CSDN通过智能技术生成

ImageinaryCTF 2023 Crypto

出了两个中等难度

tan

题目

tan(m).n(1024)

还原m

先用内置函数arctan还原一个初始解 ϕ \phi ϕ

周期性得
m = k ∗ π + ϕ m=k*\pi+\phi m=kπ+ϕ
满足这个关系,我一开始也是用格子解的,忘记给第一行加平衡向量了。就稍微弄的有点复杂,先把小数均扩大为整数,因为有小量误差,然后求解二元cop。也算是出了。格子还是不熟练呀,总之就是理解不到位,脚本小子当多了。

贴一下格解法
M = ( 1 ϕ 1 π 1 ) ( − m 1 k ) ∗ M = ( 0 , 1 , k ) M=\begin{pmatrix}1&&\\\phi&1&\\\pi&&1\end{pmatrix}\\ \begin{pmatrix}-m&1&k\end{pmatrix}*M=(0,1,k) M= 1ϕπ11 (m1k)M=(0,1,k)
第一行做平衡,相当于最大的满足等式,从而出现目标解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

这个就比较简单,但是没有烂掉

已知 e s l o w , n , c e_{slow},n,c eslow,n,c

e s l o w = e f a s t + A ∗ p h i A : 683 b i t s p h i : 2048 b i t s e f a s t : 1024 b i t s e_{slow}=e_{fast}+A*phi\\A:683bits\\phi:2048bits\\e_{fast}:1024bits eslow=efast+AphiA:683bitsphi:2048bitsefast:1024bits

这里很明显

A = e s l o w / / n + 1 ,可以直接解出来 A=e_{slow}//n+1,可以直接解出来 A=eslow//n+1,可以直接解出来

继续变换

e s l o w / / A = e f a s t / / A + n − ( p + q ) + 1 n − e s l o w / / A ≈ p + q − e f a s t / / A e_{slow}//A=e_{fast}//A+n-(p+q)+1\\ n-e_{slow}//A\approx p+q-e_{fast}//A eslow//A=efast//A+n(p+q)+1neslow//Ap+qefast//A

这里 e f a s t / / A e_{fast}//A efast//A相比于其他值显得很小,所以可得到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
q = p 2 + p + 1 n = p ∗ ( p 2 + p + 1 ) ∗ r q=p^2+p+1\\ n=p*(p^2+p+1)*r q=p2+p+1n=p(p2+p+1)r
r是p3一样大小,很明显这里cop什么的都用不了

比赛的时候啥都想到了,包括关键的式子
p 3 − 1 = ( p − 1 ) ∗ ( p 2 + p + 1 ) p^3-1=(p-1)*(p^2+p+1) p31=(p1)(p2+p+1)
然后在构建一个群,它的阶为 p 3 − 1 p^3-1 p31这里卡住了
假设群 G 的阶为 ( p 3 − 1 ) q = g n = g p ∗ ( p 2 + p + 1 ) ∗ r q 的阶为 p − 1 ,后续总有利用点 假设群G的阶为(p^3-1)\\ q=g^n=g^{p*(p^2+p+1)*r}\\ q的阶为p-1,后续总有利用点 假设群G的阶为(p31)q=gn=gp(p2+p+1)rq的阶为p1,后续总有利用点
看了wp,突然就想到了,degree为3的多项式商环的阶不就是p^3-1

狠狠学习

有了这个,求解思路就很清晰了
f ( x ) = x 3 + a ∗ x 2 + b ∗ x + c R = Z n [ x ] / f ( x ) K = F p [ x ] / f ( x ) f(x)=x^3+a*x^2+b*x+c\\ \mathbb{R}=\mathbb{Z}_n[x]/f(x)\\ \mathbb{K}=\mathbb{F}_p[x]/f(x) f(x)=x3+ax2+bx+cR=Zn[x]/f(x)K=Fp[x]/f(x)
随机生成多项式f(x),多项式环K的阶即为(p^3-1)。

对于环K上的任意元素a,an 的order为p-1,所以an系数为(u,0,0)这样的形式。

所以对环R上的任意元素经过n次方操作后的一次项或者二次项的系数gcd一下就得到p

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值