Cryptoverse CTF 2023 WriteUps
這次自己在 nyahello
隊伍中稍微解了幾題,主要包含了
crypto 中幾個相對難的題目。
Crypto
LFSR Explorer
1 | from Crypto.Util.number import * |
有兩個 LFSR,直接逆回去即可。
1 | with open("output.txt", "rb") as f: |
Knapsack vs. Backpack
1 | from Crypto.Util.number import * |
前半是 0/1 背包,讓 copilot 直接幫我寫。後半是 merkle-hellman backpack,直接用 LLL 解 subset sum 出答案。
1 | from sage.all import * |
Fractional Flag
1 | from Crypto.Util.number import getPrime, inverse, bytes_to_long |
有三個類 RSA public key,對於
以
以
所以可以得到
而拿
所以拿
1 | from sage.all import * |
PicoChip 1
1 | from itertools import groupby |
這題有個 prime generator 會 leak side channel
的資訊,可以透過它生出的 html 回推 power
,而
power
又能回推 states
,因此可以透過什麼時候在
FALLBACK
來判斷一些
還原
1 | from sage.all import crt, lcm, reduce |
PicoChip 2
1 | from Crypto.Util.number import * |
和前面幾乎一樣,不過這次 N 已知且 p,q 都是 512 bits 的,所以大概是用一樣的方法還原然後 coppersmith 之類的。
我拿實際參數來側發現我能得到
- 256 bits 對於 coppersmith 有點緊
- 因為我的方法無法判斷 power trace 中哪段是 p 哪段是 q,所以 crt 送進去的參數是對所以還要想辦法去 error
- 類似上面的原因,我也不能確定
主要是要先注意到
再來是
最後 error 的部分我是透過把
1 | from Crypto.Util.number import * |
Misc
OJail
ocaml 的 jail (?),連上去直接 Sys.command "sh";;
就拿
shell 了。
*Minecraft's Deadly Dilemma
賽中沒能解掉這題
1 | from io import BytesIO |
簡單來說他有兩張 64x64 的圖片 pickaxe
和
sword
,然後要找到一張圖讓
L2Norm(img - pickaxe) > L2Norm(img - sword)
,並且
sqrt(L1Norm(img - pickaxe)) < 474
。
我的作法是直接上 pytorch 用 backpropagation 來找,loss 部分亂弄一下就出來了。
1 | from io import BytesIO |