Learning cyber security by playing and enjoying CTFs

Cyber Security関係の雑記帳です。表明されているお気持ちなどは全て個人的なものであり、筆者が所属もしくは関係する組織・団体の意向とは一切関係ありません。

happy new yeaR with an eaSy wArmup challenge

 本ブログをご覧のみなさま、本年もよろしくお願いいたします。

 本年は元日から甚大な災害・事故が重なっておりますが、明日以降の平穏無事を祈念し、急遽 Crypto の Warmup 問題を用意しました。*1

 なお、チャレンジされる方には恐れ入りますが以下の点にご留意お願い申し上げます:

  • フラグの形式は、flag{[\x20-\x7e]+} です。
  • 本問を解くことによって新たな知識を得た場合、それを悪用してはいけません。
  • 本問の Writeup は大歓迎ですが、直接フラグを示さないでください。*2
  • 細心の注意を作って作成しましたが、「解けない、もしくは解が複数ある」「そもそも○○がおかしい」「 自分が過去に作成した問題と酷似している」等の苦情がある場合は、X(https://twitter.com/EdwowMath)の DM で受け付けます。

 それでは、以下の chall.py と output.txt からフラグを求めてください。

chall.py

from Crypto.Util.number import *
import base64
import os
from  secret import flag

m = os.urandom(192-len(flag)//2) + flag + os.urandom(192-len(flag)//2)
m1, m2 = bytes_to_long(base64.b64encode(m[:len(m)//2])), bytes_to_long(base64.b64encode(m[len(m)//2:]))

p = getPrime(1024)
q = getPrime(1024)
r = getPrime(1024)
s = getPrime(1024)
if r < s:
  r, s = s, r

n1 = p * q
n2 = r * s

assert m1 < n1
assert m2 < n2

t = pow(m1, 1337, p) # hint1
u = pow(r, 2, m2) # hint2

e = 65537
c1 = pow(m1, e, n1)
c2 = pow(m2, e, n2)

print(f"n1= {n1}")
print(f"n2= {n2}")
print(f"e = {e}")
print(f"c1= {c1}")
print(f"c2= {c2}")
print(f"t = {t}")
print(f"u = {u}")

output.py

n1= 15809496692858732982029318916886443698018329313416244505168727101526760837481485692935245827437202505642012177919953210848373397250350067724766690192394917312235256663531028907338229419467526966077607404564236427846428039096404432709422078112254762291290890238853303587226062945238093326111972489330442491151394665071920422614656205153712663294452261079726274037556931808434465077016116074187887255453624017964983173059642924285479225547222268331658355264856561415402723526570002024456897365027946463891276101044785842444335375422242665383776224434150818644688524333381462662553855504758742651809411664415600965400303
n2= 17115530611961160733153409824989287056785780004379110481633980342227390244104381082915422954478665505239222142118817040228722129863379293444023972874469464581707788859033741554383695588574234529024472481693783952738008661625339688186626716219824813486682492148488148407946217534792835789909537916813395399438603494969187678927959416080093302003295130391244688185942734332845365768773668725322925712822065933966110756250220087244334234019881306333830954070028681685411924277830547973277446733903156129322946731848120251258079372193139441460590216066997707947128218816481980866867772926164827369821949326122602695783127
e = 65537
c1= 11055974447944030017336276693630027855956048299480774982463891925655164429888363185213456926698466616381534082920464959333596735561856128283567282898315565016215727283281771346481557245287068860101506330575764934755079218707033738588722398910946929444534575546426554637474997049669306046998620553174720870449574648731088592015628298014309508900581406827014805701283061502823393889081984060821654899393535566500749131793697860269709145722687226076495598793892025133680780336520377723886324291733775227836076198765882499031743357483688688558585873204486693228840354226275858648539668651225339126426781973009229222198958
c2= 5291207119719393369591722644523057924425411596104482792588219328819353689201501358914889041765393168263653449554451790466409130681236623635900284468113826851653094193132168591240124610916294229338484490572785127091653581610295855068346716038581359833784211005987668736275812449922493150962178627300520851990907279522767365670591934206414641691877585781687591698639176030533867063058646519944766740601350838030776257546847516424708828239287105800656146264169543305965714213345423163777083196354014289471040123627296322325174314461021198718186024326927646927993160729137964301193213968281576950680575626970258104096792
t = 60411685103027501120676843032190037387637292177367929037509821428844248796849456435383401683253775805773879751322110658321341833579808940429214091992705969492704201869641117784115029944210999759973150666214923131630236838833609945450268350945291909413044630419433914205252978362525757777640906763990537394676
u = 8187598495480156683891536809355726298612612705667433280784981214113919518324439015412245670013618449134012588847473573270743269741745499442008889748810786877285580879706591715825859870512941092906482068461001412222170469419037940406574443463074109741197349483868665047549833500994992461890835188010042959982495131124007285310725364546596405872784135952867325365040285831332591838572559064293720630546084252111985351920745633852177297717241429666793373904312442571229993974933952369588144751802538896966305557607119413285029310434769813416519222128952117361981812741587291123111986807113665882392818707730410853202933

 今年は年初からいろいろ忙しく、CTF を プレイできるのは 2 月末 か 3 月くらいからになりそうですが、引き続き対戦いただければと思います。

*1:Crypto ガチ勢には簡単すぎるかもしれませんが。

*2:常設 CTF の Writeup と同様です。