简单做一下比赛记录。
[签到]Vigenere
题目描述:
1 | 19世纪末,无法破译的密码被应用于一场大规模内战,它在20世纪初期更是被认为是无法被转化的密码。后来,人们走到了21世纪,有着更高的算力,这种无法破译的密码也被高算力轻松攻破,你的任务便是使用你的高算力,跨越历史的长河,攻破这份密文! |
题目:
1 | Gn taj xirly gf Fxgjuakd, oe igywnd mt tegbs mnrxxlrivywd sngearbsw wakksre. Bs kpimj gf tank, it bx gur bslenmngn th jfdetagur mt ceei yze Ugnled Lystel tx Amxwaca gjmtrtq. |
直接用维吉尼亚爆破网站就可以得到明文:
1 | On the first of February, we intend to begin unrestricted submarine warfare. In spite of this, it is our intention to endeavour to keep the United States of America neutral. |
签到,确信!
题目描述:
1 | 都坤叭是兄弟,我怎么会骗你呢! |
题目:
1 | from Crypto.Util.number import * |
改编自ImaginaryCTF的sus一题,增加了多项式的度,但是原理上没有任何差异,具体解释之前有写过:
Crypto趣题-RSA(一) | 糖醋小鸡块的blog (tangcuxiaojikuai.xyz)
exp:
1 | from Crypto.Util.number import * |
easyLattice
题目描述:
1 | 这是真签到 |
题目:
1 | from Crypto.Util.number import * |
题目基于NTRU,给出如下关系式:
以及h和p的值,要求解出作为flag的f值。同时知道f是47字节,g是128字节。
可以看出,f和g在模p下依然算小量,所以用格规约的思路是不会变的,依然是移项构造出等式:
然后造出如下格:
这个格具有的线性关系是:
可以看出目标向量中g远小于f,所以需要配平一下,为了能更精确的使两者数量级相等,可以利用flag是”S”开头的这一特点,其最高位是0而第七位是1,从而更精确确定要配的系数。
exp:
1 | from Crypto.Util.number import * |
铜匠
题目描述:
1 | 三年二班的皮郜伟同学,他的理想是做一名铜匠,为此他决定深入学习关于铜匠的知识 |
题目:
1 | from Crypto.Util.number import * |
题目基于p高位泄露,不同的是泄露的是p的112个五进制高位,实测一下可以知道512bit的p一定是221个五进制位,所以其实未知的只有109个五进制位,结合以前做过的题目知道,就算只知道256bit都是可以爆破出来的,所以这题有了更多的信息,就肯定也可以爆破。
然后由于不确定p和q的大小关系,所以beta稳妥一些取0.49,同时考虑到速度问题和上界问题,epsilon取0.01依然最合适,然后按如下方式算界:
可以大概算出大概会差两个五进制位,所以就爆破两个五进制低位就能copper出来。事实上爆破一位也可以。
exp:
1 | from Crypto.Util.number import * |
SuperbRSA
题目描述:
1 | CRYPTO真的很难吗?Ö_O不会吧不会吧!,一定要相信自己咩~ |
题目:
1 | #user:mumu666 |
题目给出了两组密文:
e1和e2的gcd是5,所以可以共模攻击得到m^5模n下的值,而由于题目保证了m^5小于n所以可以开五次方得到m。
exp:
1 | from Crypto.Util.number import * |
[进阶]2024_New_Setback
题目描述:
1 | 新的一年,我们总要有一个新的起点🕛,你们说对吧🎉! |
题目:
1 | #user:mumu666 |
题目给了一条曲线:
然后给了曲线上的两点P、Q的坐标,以及两个倍点坐标:
要求出作为flag两部分的m1、m2。
这是扭曲爱德华兹曲线在a=1时的方程,而这种曲线向Weierstrass曲线的映射之前也出现过:
Crypto趣题-曲线 | 糖醋小鸡块的blog (tangcuxiaojikuai.xyz)
所以,如果可以求出曲线方程的所有参数,就可以映射到ECC上去求DLP,而观察到坐标都不是特别大,说明p也不大,DLP应该挺容易求。又因为题目提供了四个点,所以可以用四个点的坐标去造四个多项式,然后groebner求出c、d和p。
然而求出来会发现有点小问题,就是映射回去时发现有些值模p下的逆元并不存在,分解发现p还含有3和7两个因子,但可以验证,给出的四个点其实也在模(p/3/7)的曲线上,所以可以直接取去除了小因子的p当模数,然后映射到ECC上求DLP。
exp:
1 | from Crypto.Util.number import * |
[进阶]easy_or_baby_RSA?
题目描述:
1 | 众所周知,easy是真易贼,baby是真卑鄙 |
题目:
1 | from Crypto.Util.number import * |
题目的RSA有两个地方不太一样:
- $n = p^5q^3$
- d是1380bit的小素数(相对于2048bit的n来说)
可以想见直接利用ed=1在模p^4q^2下copper界完全不够,所以思路应该是根据p^rq^s去找论文。找到论文过后发现其实是一个很标准的论文题,要做的事情是:
- 根据论文里的copper写出要求small_roots的多项式
- 对着论文改造格的多项式
但是实际上这题是根据一道原题dasfactor改的,而且原题正好前段时间才有师傅问过我,所以直接拿板子打就结束了。由于d是1380bit,所以m要取40,sage10.2大概会跑50min左右。
exp:
1 | from Crypto.Util.number import * |
gggcccddd
题目描述:
1 | 灯灯灯,signin兽进化!gggcccddd兽! 进化中(50%),进化失败 |
题目:
1 | from Crypto.Util.number import * |
题目给了两组数据:
可以看出是线性明文攻击,求两个多项式的GCD可以求出公共根m,由于e是65537,度比较大,所以用HGCD效果会好很多,大概30s以内就能跑出来。
不过直接硬求gcd,一两个小时应该也能搞定,还可以接受。
exp:
1 | from Crypto.Util.number import * |
babyRSA
题目描述:
1 | 树木想要一个baby题目,不说了。。那就来个吧! |
题目:
1 | p = random_prime(1<<512) |
题目给了四组已知数据,分别是1、2、3、4代入如下多项式的值:
同时还给了flag代入多项式的值,要求解出flag来。其中,多项式系数满足LCG的递推关系,只是LCG的a、b、初始x都未知,所以也需要求。
由于多项式系数都满足LCG,所以实际上方程涉及的变量只有a、b、x三个,因此四个方程来做groebner或者resultant完全足够。求出a、b、x后就可以直接对代入flag值的多项式求根得到flag。
exp:
1 | from Crypto.Util.number import * |
做这题的时候闹了点乌龙,以为每调一次f(i),h()都会继续递推6次,所以groebner了半天都是[1]。但其实f并不是一个函数,而只是个多项式名称,所以对于1、2、3、4各自的f,系数都完全一样。