深刻的让我意识到了自己搜索能力的不足+数学菜鸡
fl@g
源码
1 | from Crypto.Util.number import * |
排列组合,需要注意一下 flag
和 f14G
,FLAG
和 f14G
是不能进行组合的
所以一共就 九种组合
flag
、f14G
、FLAG
、7!@9
、flag 和 FLAG
、flag 和 7!@9
、FLAG 和 7!@9
、f14G 和 7!@9
、flag 和FLAG和7!@9
这其实就是一个容斥定理
容斥原理核心的计数规则可以记为一句话:奇加偶减
所以:
1 | f = factorial(63)*4 - factorial(60)*4 + factorial(57) |
exp:
1 | import libnum |
easy_random
源码
1 | import random |
移步我的另一篇博客:
MT19937 实战 | W’Blog (wbuildings.github.io)
Meet me in the summer
源码
1 | from random import choice, randint |
先求N
原理:
My-CTF-Challenges/ImaginaryCTF/Round 26/no_modulus/README.md at master · maple3142/My-CTF-Challenges · GitHub
对于
$enc_i = 65537^{m_i} \bmod N $
我们总可以找到一组线性组合
令
构建格子:
K 取足够大即可
$a_i$有正有负,甚至负数居多,所以
会是个有理数,可用分数$\frac{x}{y}$表示,那么就存在:
$\frac{x}{y} \equiv1 \pmod N => x-y \equiv 0 \pmod N$
找到两个 a 就有 $N = \gcd(x_0-y_0,x_1-y_1)$
1 | with open('output.txt','r') as f: |
根据 p 的构造方式,可知 p -1 光滑,可以分解 N
1 | import gmpy2 |
求 secret的低位
密码学学习笔记 之 knapsack | Van1sh的小屋 (jayxv.github.io)
因为 p-1 光滑,所以对于解决 dlp 问题 有利,既如此,此题我们可以通过 dlp 将 乘法背包 映射 成 加法背包,需要注意的是,取对数之后模数应该变为 p-1
随便取一个生成元 g ,两边取对数
就是我们常见的加法背包了
构造格子,优化:
1 | a = [810922431519561, 446272766988725, 167807402211751, 137130339017755, 214986582563833, 141074297736993, 1116944910925939, 827779449967114, 887541522977945, 698795918391810, 180874459256817, 42309568567278, 148563974468327, 43541894027392, 369461465628947, 226728238060977, 902554563386031, 369980733296039, 495826170604031, 202556971656774, 1124261777691439, 533425503636189, 393536945515725, 242107802161603, 506637008093239, 846292038115984, 686372167052341, 923093823276073, 557898577262848, 719859369760663, 51513645433906, 946714837276014, 24336055796632, 302053499607130, 970564601798660, 1082742759743394, 499339281736843, 13407991387893, 667336471542364, 38809146657917, 29069472887681, 420834834946561, 1044601747029985, 854268790341671, 918316968972873, 737863884666895, 1036231016223653, 792781009835942, 142149344663288, 828341073371968, 186470549619656, 279923049419811, 487848895651491, 737257307326881, 1065005635075133, 628186519179693, 554767859759026, 606623194910240, 497855707815081, 88176594691403, 278020899501967, 440746393631841, 921270589876795, 800698974218498, 437669423813782, 717945417305277, 191204872168085, 791101652791845, 772875127585562, 174750251898037] |
再求secret的高位
这次使用 中间相遇攻击 (MITM),顺带学习了波字典的用法
这是一种思想,并不固定于某个板子,,移步
中间相遇攻击 - MITM - CTF Wiki (ctf-wiki.org)
练习题: (2024国赛 hash)
2024CISCN | DexterJie’Blog
同上:
记
那么 $rb = t_1*t_2 \bmod q $
我们可以通过验证 $rb*t_2^{-1}$ 是否等于 $t_1$ 来进行 中间相遇攻击
$rb*t_2^{-1}=t_1 \bmod q$
1 | from tqdm import * |
AES
1 | from hashlib import md5 |
Faas
源码
1 | from Crypto.Util.number import * |
什么?这题要花六百块才能拿到flag!?
听话,花钱的flag咱不要
算了,标记一下,万一以后有需求呢
GitHub - eniac/faas: Factoring as a Service
reference
WKCTF2024 | Zimablue’ Blog
WKCTF | DexterJie’Blog