Before all
打給賀,挖勾來水幾ㄆㄧ文啊,沒,最近應該會重回頻繁更新之路(?)
這次在 THJCC 出了三道題目,lIne, F&S Farm 兩道 Insane 難度以及一個 DAES(預設是 HARD 就隨手出個 MitM,結果好像太小看大家(和 LLM)了)。
特別來題解一下兩道 Insane 吧,不然都沒高中生要念 Crypto 了 qWq (沒有高中生做出來,公開組解出人數分別是 3/2,特別感謝 Chisheng Chen 和 papa9995 特別捧場 qq)
解這兩題分別需要的相關知識都可以在 CryptoHack 的 Lattices 和 ECC 兩個章節學到!
*題目設計雖然說防破台,但認真 Google 跟 GPT 其實都是有機會解出來的,希望下次有人挑戰成功我的 Crypto :P
lIne
給定就是一個參數比未知數大很多的複數平面線性方程,但只給一條:
1 | from random import getrandbits |
首先,對於實數的 Case,其實當兩邊量級不同的時候可以參考一種叫做 LLL 的算法進行解題。
想懶人包一點可以直接看我去年在完全新手向(今年不再是)的 NoHackNoCTF 出的題目:https://blog.whale-tw.com/2024/11/17/nhnc-2024-wp/#Lion-RSA
再來,剩下其實就是一條複數平面的方程終究是帶兩個參數的,簡單的觀察(在 IrisCTF 2025 (Write Up Link)其實有很類似的題目),可以發現經由線性變換能把它直接換成兩條算式,最後再一口氣拿這兩條壓 LLL 就可以約束出解了 … 嗎(?)
沒有,我很故意的讓浮點數大小超出精度,所以對於 1.37668712938916E+16*I
這一項要爆搜後兩位(一百組),每次都找 LLL 才能解決!
*為方便解題,我直接送了 flag md5 給選手比對 :P
Solve Script
1 | from random import getrandbits |
F&S Farm
牛牛都在用 ECC 對話了呢 (x)
題目:
1 | from Crypto.Util.number import bytes_to_long |
這道題目的 ECC 運算跟一般的 $y^2=x^3+ax+b$ 不太一樣,或許你有能力直接看出,也可能查文獻,或乾脆一點 Chat GPT 問一問應該都會得知這是一種叫做 Jocabian Form 的曲線!
有興趣認真研究的可以看看這兩篇:
https://en.wikipedia.org/wiki/Jacobian_curve
https://eprint.iacr.org/2014/1014.pdf
懶人包:他的曲線模式是 $y^2 = x^3 + axz^4 + bz^6$,然後 $(x, y, z)$ 會對應到 $(\frac{x}{z^2}, \frac{y}{z^3})$
EZ!
接下來轉換完就是去找找這條曲線的洞,本來是要算嵌入度過小做 MoV Attack:
看完這邊 https://risencrypto.github.io/WeilMOV/
懶人包:反正這種東西他可以被算成一種 order 比較好算的另一種群($F_{p^k}$)的運算,所以 DLP 很好解
最後的 Solve Script,其中使用的座標是我經過 $(\frac{x}{z^2}, \frac{y}{z^3})$ 變換的,記得除法是對於整數同餘 $p$ 的乘法群所以除法其實是乘以模逆元 pow(z, q, -1) 的概念 :P
1 | p=62879100257270410351378827582399744186567306643585504679294001019813699019068488434060287 |
P.S. 因為我 ORDER Factor 後最大的是 $10^{15}$,好像有個叫做 Chisheng Chen 的人說:啊還是夠 Smooth 啊,Pohlig-Hellman 走起(