Misay's blog

Back

写在前面#

放假来的第一场大型在线赛,来复现一下Crypto方向的三道题,感谢群里的随意师傅与Painting师傅给我相关指点

NepSign#

题面

题面给了我们一个SM3的签名系统

密钥生成#

先生成一组48个32位的私钥sksk,然后进行255次SM3哈希得到公钥,即

pk=SM3(sk,255)pk=SM3(sk,255)

签名#

根据我们传入的明文mm计算它的哈希MM,转换出一个48整数的Step数组,根据这个来计算我们的签名

qq=SM3(sk,step)qq=SM3(sk,step)

可知这里的qqqq会是一个含有48个元素的数组

验签#

传入明文mm和签名qqqq,先计算stepstep,然后去验证是否有

pk==SM3(qq,step)pk==SM3(qq,step)

漏洞#

注意我们生成签名的过程,stepstep是完全可控的,我们可以随机生成mm,来让某一个位的stepstep取到0,那么我们的

sk==pksk==pk

就获得了这里的私钥,我们如法炮制即可获得48个私钥 然后就随便签名了,

exp

成功签到

LatticeBros#

题干

  1. 第一部分

根据已有的根α\alpha来恢复极小多项式,我们想求

f(x)=x3+a2x2+a1x+a0f(x)=x^3+a_2x^2+a_1x+a_0

可以构造格

(1,a2,a1,a0)(100α3010α2001α0001)=(1,a2,a1,0)(1,a_2,a_1,a_0)\begin{pmatrix}1&0&0&\alpha^3\\0&1&0&\alpha^2\\0&0&1&\alpha\\0&0&0&1\end{pmatrix}=(1,a_2,a_1,0)

这边可以给格子的最后一列乘一个常数CC来消去α\alpha小数点的影响,测试取C=106C=10^6即可

exp

  1. 第二部分

LHNP问题

给出30个式子

ai≡ti⋅α−βi  mod  pa_i\equiv t_i\cdot\alpha-\beta_i\;mod\;p

其中βi\beta_i是30比特小量,我们要恢复出α\alpha

可以把方程写成

βi=ti⋅α−ai+kip\beta_i= t_i\cdot\alpha-a_i+k_ip

构造有理格

M=[pp⋱pt1t2⋯tnKp−a1−a2⋯−anK]M = \begin{bmatrix} p & & & & \\ & p & & & \\ & & \ddots & & \\ & & & p & \\ t_{1} & t_{2} & \cdots & t_{n} & \frac{K}{p} &\\ -a_{1} & -a_{2} & \cdots & -a_{n} & & K \end{bmatrix}

有

(k1,k2,⋯ ,α,1)M=(β1,β2,⋯ ,Kαp,K)(k_1,k_2,\cdots,\alpha,1)M=(\beta_1,\beta_2,\cdots,\frac{K\alpha}{p},K)

KK取2302^{30} ,是βi\beta_i的上界

MM的行列式大致是

det(M)=p29K2det(M)=p^{29}K^{2}

最小向量上界为

32(det(M))132=32p3032K132\sqrt{32}(det(M))^{\frac{1}{32}}=\sqrt{32}p^{\frac{30}{32}}K^{\frac{1}{32}}

大约能有200比特,足够规约找到这里最小的向量

exp如下

这一步的LLL操作我们可以找出正确的Kαp\frac{K\alpha}{p},特别注意我们这边规约出的值是负数,那就直接计算后对pp取模,而不要取绝对值!

ezRSA2#

题面

我们生成的dd大约是N13N^{\frac{1}{3}},和经典的Boneh-Durfee的攻击界限N0.292N^{0.292}有点差距,但是给了dd模一系列小素数的结果,也就是说我们还能恢复一些dd的比特

我们设所有的小素数的积是MM,我们由hint能恢复出

d≡d0  mod  Md\equiv d_0\;mod\;M

写成等式

d=d0+xMd=d_0+xM

我们再带入这里的私钥式子

ed≡1  mod  ϕed\equiv1\;mod\;\phi

也有

e(d0+xM)−1=k(N−(p+q)+1)e(d_0+xM)-1=k(N-(p+q)+1)

令

s=p+qs=p+q

这里有三个未知数kk ss xx,我们可以左右模一个eMeM,就能得到

ed0−1≡k(N−s+1)  mod  eMed_0-1\equiv k(N-s+1)\;mod\;eM

这里我们要解的ss大致1025位,kk大约300位,相对2300位的eMeM都相当小

打一发二元coppersmith即可,

exp

NepCTF2025
https://www.zt2misay2.cn/blog/nepctf2025
Author Misay
Published at 2025年8月6日