CryptoCTF 2024
Author:堇姬
Rank: 29th
Warm-up 🤑
Welcome! 👋
Crtl+c
Crtl+v
CCTF{Harn3sS_Y0ur_CrYptO9rAphy_Pr0wEs5_💪_⚡_💥_🔥!}
Easy 😁
Alibos
source code
1 | from Crypto.Util.number import * |
output.txt
1 | pkey = 8582435512564229286688465405009040056856016872134514945016805951785759509953023638490767572236748566493023965794194297026085882082781147026501124183913218900918532638964014591302221504335115379744625749001902791287122243760312557423006862735120339132655680911213722073949690947638446354528576541717311700749946777 |
分析
給了你
簡單的移項,直接計算就可以了(要注意右邊他pad了很多的1要刪掉)
1 | def pad(m, d): |
script
1 | from Crypto.Util.number import * |
CCTF{h0M3_m4De_cRyp70_5ySTeM_1N_CryptoCTF!!!}
Mashy
source code
1 | #!/usr/bin/env python3 |
分析
輸入八組的
要求
並且
1 | a483b30944cbf762d4a3afc154aad825 -> emelinjulca |
當下還真沒看出來這要怎麼解,後來才知道
所以就只是要找八組碰撞的來解
解法
https://github.com/cr-marcstevens/hashclash
直接拿八組送就可以了
CCTF{mD5_h4Sh_cOlL!Si0N_CrYp7o_ch41lEnGe!!!}
Medium 🤔
Bada
1 | ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ |
分析
對所有a b滿足
給定
f(1,1)跟f(x,y),要求x跟y
這題其實很簡單
因為我們可以知道
如果設成這樣可以得
得證
script
1 | from pwn import * |
CCTF{BADA_iZ_4_K0r3An_5!ngeR!!}
RM2
source code
1 | import sys |
流程
我們需要先輸入一組(p,q)
1024 bits的質數。
e = 65537
n = p × q
並產生了一個64 bytes 隨機字串,並拆成兩半m1、m2,來做加密
印出
分析
一開始使用getprime來隨機生成質數,當你把產生的p-1
、q-1
、2p+1
、2q+1
丟入factorDB是沒辦法全部分解的。
仔細分析後可以採用一個策略:
如果(p-1)/2
和(q-1)/2
是個質數,模數可以分解為2*2*((p-1)/2)*((q-1)/2)
,那可以發現p、q
是個safe prime。
因為p=2k+1
、q=2k+1
,這裡k
是個質數
另外有個東西叫做Sophie Germain prime就滿足後面的p
是個質數,2p+1
是個質數
https://en.wikipedia.org/wiki/Safe_and_Sophie_Germain_primes
總之這題就是要找到同時滿足他是safe prime又是Sophie Germain prime
所以可以先生成safe prime再看看他是不是Sophie Germain prime
報錯可以看
https://blog.csdn.net/kulala082/article/details/68484314
1 | import gensafeprime |
找到
1 | 179038869479476343977624700131648035601030062609971358083068495264644773504891672033533628862180996104202480213255611201971674539999191838522787167917937277791863007890816459071795930442010669455816651153734397964768807485960692876685651034343992232617890851248047651749184487885382752475267482617769156174759 |
找到後直接搞就行了
script
1 | from Crypto.Util.number import * |
1 | ┃ Now, send us the secret string to get the flag: |
CCTF{i_l0v3_5UpeR_S4fE_Pr1m3s!!}
JOE-19
source code
1 | #!/usr/bin/env sage |
output.txt
1 | n = 8098851734937207931222242323719278262039311278408396153102939840336549151541408692581651429325092535316359074019383926520363453725271849258924996783681725111665666420297112252565291898169877088446887149672943461236879128453847442584868198963005276340812322871768679441501282681171263391133217373094824601748838255306528243603493400515452224778867670063040337191204276832576625227337670689681430055765023322478267339944312535862682499007423158988134472889946113994555274385595499503495488202251032898470224056637967019786473820952632846823442509236976892995505554046850101313269847925347047514591030406052185186963433 |
分析
想法就是直接枚舉,512bits大概是154、155 digits。
1 | from sage.all import e, is_prime |
輸出了,找到一個,接下來就一直枚舉,拿到四個就解了(上面的腳本要在微調成155,才可以拿到其他的)
1 | 7728751393377105569802455757436190501772466214587592374418657530064998056688376964229825501195065837843125232135309371235243969149662310110328243570065781 |
1 | from Crypto.Util.number import * |
非預期解
這題的n在賽中後來可以用factorDB直接分解
CCTF{ASIS_h1r3_7aL3nT5_t0_cO1La8orAt3_!N_Crypto_CTF!}