TMUCTF 2021 Writeup
はじめに
9/8-9/10で開催されていたTMUCTF 2021にソロで参加したので、解いた問題のWriteupを書きます。初心者+残り数時間での参加だったので、まともに解けたのは3問だけです。
Common Factor (52 solves)
from Crypto.Util.number import *
from functools import reduce
def encrypt(msg, n):
enc = pow(bytes_to_long(msg), e, n)
return enc
e = 65537
primes = [getPrime(2048) for i in range(5)]
n = reduce(lambda a, x: a * x, primes, 1)
print(n)
x1 = primes[1] ** 2
x2 = primes[2] ** 2
x3 = primes[1] * primes[2]
y1 = x1 * primes[2] + x2 * primes[1]
y2 = x2 * (primes[3] + 1) - 1
y3 = x3 * (primes[3] + 1) - 1
print(x2 + x3 + y1)
print(y2 + y3)
with open('flag', 'rb') as f:
flag = f.read()
print(encrypt(flag, n))
2870378965838324591930716372043943202857808446139955114178972466357197191646555386310681233993639582571871810351336802365212612829432807326876330070965674249357286034347008657883629500396346167749508691814871533203247809103597516756034759095100637453841622270471713637175966387708675681650825362129940918643196769504213592200456774778948694877618977617011530883570013644245183319361244368215398610979149060320165814554577615652211730789657513270358973557241707978338139984414979470166202562114202380919071164176972055791789476453657467515306951139381362369978138151345609568127199377878026652554062731521632501476705069316208464363846111869669167682507916421047852441782552255491492824812854004513204360809331798274954243569021433963906972169417423418831314860109084130511234616069241809687828168649890352090249712449906176079861456197001597695071378819897916782564243557316380779536239285819430145429214343617897807321057453881231873109668847371444981597545948164776111805671836878974593063507806022594658899187647227705150195530817678931698098259376629125579883657290675365061062988342506737677539253213873486072882314916722654639439974767729667348308089822272618812141734747518190918131475394008358752485820114352585363697943409142405397187811488425763607870435598703473283558863875082511735753198985761770194691897333996772347209579690094484306582887604607085834235579991339081114877411129747659636913741732353593602493602935647498099959376575507080043282822039059772712513621914435714472997174303938650778721067511657786410145042462581432379653230157438512241441297394613009093982995995721488753402291657942043365728675978004538612865075473060797997060824242663659400972803009150895091065010288979279208343727383126907536910816233381252213949988179391769784859432462536001028414576853626404313552019318821609411415846740546897494827049963081729773556670009694396655902808674253954003664489541274216766985514320658655385155404804471285629385163182065527325960787883285164384400671878810956747078706832300082761043350763868511932582950753204256098035119847645083342729287063167616495769840389702639642784779646124394274187760742667519368210034941587941073935227051959905320338654629277413407444919186684576561532634097854731829455621571431402040561443044139818425476711378475625762558700335148767065032908314020963523681108498054768101383636397920349166462138683843364568104852099786972138269207828354678771871957631305996408564918629611147162610100969994085549017653854895147761379806516965159036735885697873629236958604838297316909096866364056640064200671318939446575088736134834054178902097259981395846912668763412552618135586399374878369079393695944896480784503275721233694160817424918386850099538763638119036532611566641652505437494379272489263685110137046574303306123483008690943610001403933721637756187395490525025216826398321326468190996213618276820580272764947465497924136451423383678199000687060571477421196675667167891260178408652655959836575935636974063946514718181746525031519883430143656783652516536859306736796341726896446635046579279623124614077795247335483809777
12189833951051730908370223331850919218243946952509718500560332838832804241963905158328421240593088009803147267463017892895712859666255758374859924227795693977692365712139787589267299790301022569583587926463070427550028215313969101326713297706315888193599192042874908901003626554054277955414415385731879026734954423731345798786722561845058120971545040892322209486011914785265062492920550158388814114563652053556586072198675716423094480300266767587890740892336081818352390563087579428787330255230317293748493589325405374600751428190100372051406745392483110379355174892921101536441200795867134576643519454074015675127266952070892796128379921598800605300182483946129377809823776730697790309647647190307296418381398693697240748290194721934318854836676911877413259621512269954316351093519057413607079769428640924051837599266617014518297183874986708528679104069884291849234025193207298171674607085234765320663128701647504631036578515249726222498212335082588627266250272379931767054363936707282364911659508871646177814796817889070190457673852047527357122774587607849820636184925240369923701314690600711989307878295308586902537853388274176578719581752448488589031302166298788451585838083076238353895213222535414766363665801955518856592943846521495707362179018672726109435436743723238172556767198562368516144637629110267835795311939660130673691902395560229758574266655957155862216872908603510940031334166746559195296408939506394470132257044581183533463281253397503463926598923844457702097679565967501579961386522021817780961888842972793029114864422478835769322906292819387383748603289494044561725080616097794190650081867485792883883943744138857860775053197775476414639386004107927910470986208356664914803636501181816689051948285860692212458532201937837589900582214489550639269506433713180672869129866286880957012266595540883727015907677897402607614096813204000
10685466258462426438601930063854796559353071021872734112422666943995273083147678402485604005469990666166510724614508657976179169486278649913444601773228981194010779012945440827279478889951033722845969569487499109114807920422465585370352647531485228491726069752258604141544095143726497561287074963919306162501333879324320431815063767836881722714585596416818455332140968159290951800146179728839649549885714902391429304093259377977040947324691472037003260741076844850530123289350979761389302226559515709663477520315215796685387805223395013156063533568746725754875786890572455450963004254041206457627272694223378868063657567852741748730175173641019445706089775572094353061394171203735646557579595881047090069929263278434116703002648581646489410683234908239597741887334283851760107425225954878508549100715448112116790430791154066542690753466803004681805878269979001221299212426591974298670638899337600244969172572955344326969720268282445856163235666525453179028071857247486445419793906307197739042430106158187925914823345884448535360673122213977744765084269696399126350806729338388901052234851028732099724640679744428962810579433414095277730427540297789173682400086721025827804724736734372677509987948167038979141434755652392244734118982644329505761227780128318076798321983092557417882569724665849318066642854479540185619304472196160849810402529549850401440730174222018187759986936759639741288629098555521157461858554745777119186003733147607872641752914478401134544544581877108606144844955497062864711396338329584713840695858914573229254445387595034317081334732222156791041901660170883047145528155203729023944309061959449827690809614300474069217485344927501901373264278607167662413547572497683805087479857076246143962932587232903893219862365333270757997373558132982228573327073639550742090562057353483860863787775987229835303262050707215194078693398663198
1295564702637495685309272079895645034267002212576577351176786924725825901033456751565363132227845395192636014504044948379030468685845611242265523726539023437126669783303765124723915472786629678436713048730755297486348344599742142845784560313837239832937917360379066282667491918054529416764918515780567145928364634646722930481542026187360739697820492335622597715014255829089436910724972509085963133800806856075152036053630879580926838241308921405124424958500485001162000846198656477271924822124768722799190195854806533587717469450248664509344104461703840455934612539385694033634268205463024167234754553081069919678171898669570723347606172526826003367647892759191360901723076962059024693433937573808414595918813154817183122218324304727720231993955442001953029300266308755291774280607633683770298830407751731984235360718897231362141728129903067324174378760053260419744395257753779565716943029464080442902252184316484343234160161564121269883788523966796266675498603214422442299610994620373055814615356464754724264668947373104292350153322562799134518201535870142301501474217531998628211638040128486684200215958700680344308113382908656637378359217107811764695801417920230331446471475336055801665419851805385433677261916024902543165187462517860936690178095112472342793009281361928879367602088695738746822374043544415398979893735410561210643701354068887205774369902436302903034048756740583183966251194450689131063910079690811851244607443172434856486129471747053074648343069627212505795579741010868965206480675568896896528625130571758075102146302306655426190892962618128161759734724982773347245232038629926619247273436934947196867813659364951484832193239178102156204300353342841972762595259292048840326449938071520689839586933982775979336248771535685895403976612898604059800532915376510948151614460338199157528220842025853852584958511622657382701623309639101678362821929006062524756352592131742510350318470015268920615837821556797760508924258618057921324240995910743034414956163701330735308503014893515707188853735706296571253748889626515245648558769422283608966241496382223293119306642490794180175154686106323945765280777140420938641267467633112805720348438191023736935327334544026698324629536721807051447503613438954736205208639453193587326470160505597834244792859179593877840449441035962707113092034561698560285482507381177956117498938436596192528337690808299050972992206796450167499247505347105318901580848542927515381051973057219542622235114029773502036331075236848879130640275120244541018979621405480997745366565533911987665660584132852855158311718515145400486762846976972483867689062569575052791463761762637757579908921446285546575036947648139847182684615282524513693899858284291993167395096893612172061860682116974864364966362118833708791957224527084022917788839602167742342150067548893185747653708657029597051779997866982601553339504636518951723213334104705177572536156329378433835224612846933662252315126902599937489337158843870992464520248466088492159756466651557918397098886626028193224320040156124777562920457488126430654110240828124538167742484933802988652725530546987842196376
prime[1]
, prime[2]
, prime[3]
をそれぞれ
となる。そして、出力される値を
となる。これらを整理すると、
であるから、
が成り立つ。ここで、
となり、
from Crypto.Util.number import long_to_bytes, GCD, isPrime
e = 65537
n = 2870378965838324591930716372043943202857808446139955114178972466357197191646555386310681233993639582571871810351336802365212612829432807326876330070965674249357286034347008657883629500396346167749508691814871533203247809103597516756034759095100637453841622270471713637175966387708675681650825362129940918643196769504213592200456774778948694877618977617011530883570013644245183319361244368215398610979149060320165814554577615652211730789657513270358973557241707978338139984414979470166202562114202380919071164176972055791789476453657467515306951139381362369978138151345609568127199377878026652554062731521632501476705069316208464363846111869669167682507916421047852441782552255491492824812854004513204360809331798274954243569021433963906972169417423418831314860109084130511234616069241809687828168649890352090249712449906176079861456197001597695071378819897916782564243557316380779536239285819430145429214343617897807321057453881231873109668847371444981597545948164776111805671836878974593063507806022594658899187647227705150195530817678931698098259376629125579883657290675365061062988342506737677539253213873486072882314916722654639439974767729667348308089822272618812141734747518190918131475394008358752485820114352585363697943409142405397187811488425763607870435598703473283558863875082511735753198985761770194691897333996772347209579690094484306582887604607085834235579991339081114877411129747659636913741732353593602493602935647498099959376575507080043282822039059772712513621914435714472997174303938650778721067511657786410145042462581432379653230157438512241441297394613009093982995995721488753402291657942043365728675978004538612865075473060797997060824242663659400972803009150895091065010288979279208343727383126907536910816233381252213949988179391769784859432462536001028414576853626404313552019318821609411415846740546897494827049963081729773556670009694396655902808674253954003664489541274216766985514320658655385155404804471285629385163182065527325960787883285164384400671878810956747078706832300082761043350763868511932582950753204256098035119847645083342729287063167616495769840389702639642784779646124394274187760742667519368210034941587941073935227051959905320338654629277413407444919186684576561532634097854731829455621571431402040561443044139818425476711378475625762558700335148767065032908314020963523681108498054768101383636397920349166462138683843364568104852099786972138269207828354678771871957631305996408564918629611147162610100969994085549017653854895147761379806516965159036735885697873629236958604838297316909096866364056640064200671318939446575088736134834054178902097259981395846912668763412552618135586399374878369079393695944896480784503275721233694160817424918386850099538763638119036532611566641652505437494379272489263685110137046574303306123483008690943610001403933721637756187395490525025216826398321326468190996213618276820580272764947465497924136451423383678199000687060571477421196675667167891260178408652655959836575935636974063946514718181746525031519883430143656783652516536859306736796341726896446635046579279623124614077795247335483809777
z1 = 12189833951051730908370223331850919218243946952509718500560332838832804241963905158328421240593088009803147267463017892895712859666255758374859924227795693977692365712139787589267299790301022569583587926463070427550028215313969101326713297706315888193599192042874908901003626554054277955414415385731879026734954423731345798786722561845058120971545040892322209486011914785265062492920550158388814114563652053556586072198675716423094480300266767587890740892336081818352390563087579428787330255230317293748493589325405374600751428190100372051406745392483110379355174892921101536441200795867134576643519454074015675127266952070892796128379921598800605300182483946129377809823776730697790309647647190307296418381398693697240748290194721934318854836676911877413259621512269954316351093519057413607079769428640924051837599266617014518297183874986708528679104069884291849234025193207298171674607085234765320663128701647504631036578515249726222498212335082588627266250272379931767054363936707282364911659508871646177814796817889070190457673852047527357122774587607849820636184925240369923701314690600711989307878295308586902537853388274176578719581752448488589031302166298788451585838083076238353895213222535414766363665801955518856592943846521495707362179018672726109435436743723238172556767198562368516144637629110267835795311939660130673691902395560229758574266655957155862216872908603510940031334166746559195296408939506394470132257044581183533463281253397503463926598923844457702097679565967501579961386522021817780961888842972793029114864422478835769322906292819387383748603289494044561725080616097794190650081867485792883883943744138857860775053197775476414639386004107927910470986208356664914803636501181816689051948285860692212458532201937837589900582214489550639269506433713180672869129866286880957012266595540883727015907677897402607614096813204000
z2 = 10685466258462426438601930063854796559353071021872734112422666943995273083147678402485604005469990666166510724614508657976179169486278649913444601773228981194010779012945440827279478889951033722845969569487499109114807920422465585370352647531485228491726069752258604141544095143726497561287074963919306162501333879324320431815063767836881722714585596416818455332140968159290951800146179728839649549885714902391429304093259377977040947324691472037003260741076844850530123289350979761389302226559515709663477520315215796685387805223395013156063533568746725754875786890572455450963004254041206457627272694223378868063657567852741748730175173641019445706089775572094353061394171203735646557579595881047090069929263278434116703002648581646489410683234908239597741887334283851760107425225954878508549100715448112116790430791154066542690753466803004681805878269979001221299212426591974298670638899337600244969172572955344326969720268282445856163235666525453179028071857247486445419793906307197739042430106158187925914823345884448535360673122213977744765084269696399126350806729338388901052234851028732099724640679744428962810579433414095277730427540297789173682400086721025827804724736734372677509987948167038979141434755652392244734118982644329505761227780128318076798321983092557417882569724665849318066642854479540185619304472196160849810402529549850401440730174222018187759986936759639741288629098555521157461858554745777119186003733147607872641752914478401134544544581877108606144844955497062864711396338329584713840695858914573229254445387595034317081334732222156791041901660170883047145528155203729023944309061959449827690809614300474069217485344927501901373264278607167662413547572497683805087479857076246143962932587232903893219862365333270757997373558132982228573327073639550742090562057353483860863787775987229835303262050707215194078693398663198
c = 1295564702637495685309272079895645034267002212576577351176786924725825901033456751565363132227845395192636014504044948379030468685845611242265523726539023437126669783303765124723915472786629678436713048730755297486348344599742142845784560313837239832937917360379066282667491918054529416764918515780567145928364634646722930481542026187360739697820492335622597715014255829089436910724972509085963133800806856075152036053630879580926838241308921405124424958500485001162000846198656477271924822124768722799190195854806533587717469450248664509344104461703840455934612539385694033634268205463024167234754553081069919678171898669570723347606172526826003367647892759191360901723076962059024693433937573808414595918813154817183122218324304727720231993955442001953029300266308755291774280607633683770298830407751731984235360718897231362141728129903067324174378760053260419744395257753779565716943029464080442902252184316484343234160161564121269883788523966796266675498603214422442299610994620373055814615356464754724264668947373104292350153322562799134518201535870142301501474217531998628211638040128486684200215958700680344308113382908656637378359217107811764695801417920230331446471475336055801665419851805385433677261916024902543165187462517860936690178095112472342793009281361928879367602088695738746822374043544415398979893735410561210643701354068887205774369902436302903034048756740583183966251194450689131063910079690811851244607443172434856486129471747053074648343069627212505795579741010868965206480675568896896528625130571758075102146302306655426190892962618128161759734724982773347245232038629926619247273436934947196867813659364951484832193239178102156204300353342841972762595259292048840326449938071520689839586933982775979336248771535685895403976612898604059800532915376510948151614460338199157528220842025853852584958511622657382701623309639101678362821929006062524756352592131742510350318470015268920615837821556797760508924258618057921324240995910743034414956163701330735308503014893515707188853735706296571253748889626515245648558769422283608966241496382223293119306642490794180175154686106323945765280777140420938641267467633112805720348438191023736935327334544026698324629536721807051447503613438954736205208639453193587326470160505597834244792859179593877840449441035962707113092034561698560285482507381177956117498938436596192528337690808299050972992206796450167499247505347105318901580848542927515381051973057219542622235114029773502036331075236848879130640275120244541018979621405480997745366565533911987665660584132852855158311718515145400486762846976972483867689062569575052791463761762637757579908921446285546575036947648139847182684615282524513693899858284291993167395096893612172061860682116974864364966362118833708791957224527084022917788839602167742342150067548893185747653708657029597051779997866982601553339504636518951723213334104705177572536156329378433835224612846933662252315126902599937489337158843870992464520248466088492159756466651557918397098886626028193224320040156124777562920457488126430654110240828124538167742484933802988652725530546987842196376
g = GCD(z1, z2 + 2)
k = 1
while True:
p = z1 * k // g - 1
if isPrime(p) and n % p == 0:
break
k += 1
d_p = pow(e, -1, p - 1)
m_p = pow(c, d_p, p)
print(long_to_bytes(m_p).decode())
$ python3 solve.py
TMUCTF{Y35!!!__M4Y_N0t_4lW4y5_N33d_4ll_p21M3_f4c70R5}
TMUCTF{Y35!!!__M4Y_N0t_4lW4y5_N33d_4ll_p21M3_f4c70R5}
435! (45 solves)
import binascii
import hashlib
import sys
from Crypto.Cipher import AES
key = b'*XhN2*8d%8Slp3*v'
key_len = len(key)
def pad(message):
padding = bytes((key_len - len(message) % key_len) * chr(key_len - len(message) % key_len), encoding='utf-8')
return message + padding
def encrypt(message, key, iv):
aes = AES.new(key, AES.MODE_CBC, iv)
return aes.encrypt(message)
h = hashlib.sha256(key).hexdigest()
hidden = binascii.unhexlify(h)[:10]
message = b'CBC (Cipher Blocker Chaining) is an advanced form of block cipher encryption' + hidden
with open('flag', 'rb') as f:
IV = f.read().strip(b'TMUCTF{').strip(b'}')
print(binascii.hexlify(encrypt(pad(message), key, IV)))
9**********b4381646*****01********************8b9***0485******************************0**ab3a*cc5e**********18a********5383e7f**************1b3*******9f43fd66341f3ef3fab2bbfc838b9ef71867c3bcbb
IV
がフラグになっているAES-CBCの問題。まずは、key
の隠されている部分を特定する。最後の暗号ブロックをkey
で復号すると、前の暗号ブロックと対応する平文ブロックとのXORが求まるので、それを用いるとkey
を特定できる。
後は最後の暗号ブロックから順番に暗号ブロックを計算していくと、IV
が出てくる。
import binascii
import hashlib
from Crypto.Cipher import AES
import itertools
import string
enc = "9**********b4381646*****01********************8b9***0485******************************0**ab3a*cc5e**********18a********5383e7f**************1b3*******9f43fd66341f3ef3fab2bbfc838b9ef71867c3bcbb"
key_len = 16
def xor(a: bytes, b: bytes) -> bytes:
return bytes(a_i ^ b_i for a_i, b_i in zip(a, b))
def pad(message):
padding = bytes((key_len - len(message) % key_len) * chr(key_len - len(message) % key_len), encoding='utf-8')
return message + padding
for i, j, k in itertools.permutations(string.printable, 3):
key = i.encode() + b"XhN2" + j.encode() + b"8d%8Slp3" + k.encode() + b"v"
h = hashlib.sha256(key).hexdigest()
hidden = binascii.unhexlify(h)[:10]
message = b'CBC (Cipher Blocker Chaining) is an advanced form of block cipher encryption' + hidden
message = pad(message)
aes = AES.new(key, AES.MODE_ECB)
dec = aes.decrypt(binascii.unhexlify(enc[-32:]))
if xor(dec[-5:], binascii.unhexlify(enc[-42:-32])) == message[-5:]:
break
enc_full = binascii.unhexlify(enc[-32:])
while message:
dec = aes.decrypt(enc_full[:16])
enc_full = xor(message[-16:], dec) + enc_full
message = message[:-16]
flag = "TMUCTF{" + enc_full[:16].decode() + "}"
print(flag)
$ python3 solve.py
TMUCTF{Y0U_D3CrYP73D_17}
TMUCTF{Y0U_D3CrYP73D_17}
Broken RSA (21 solves)
from Crypto.Util.number import *
e = 65537
with open('n', 'rb') as f:
n = int(f.read())
with open('secret', 'rb') as f:
secret_msg = f.read()
pads = [b'\x04', b'\x02', b'\x00', b'\x01', b'\x03']
with open('out.txt', 'w') as f:
for i in range(len(pads)):
for j in range(len(pads)):
msg = pads[j] * (i + 1) + b'TMUCTF' + pads[len(pads) - j - 1] * (i + 1)
enc = pow(bytes_to_long(msg), e, n)
f.write(str(enc) + '\n')
enc = pow(bytes_to_long(secret_msg), e, n)
f.write(str(enc))
33480933532879680420013037333629574829314700463453212301292088807465041684485642819768171537612502467080592874497863977520306632073215503336862835498929070856066546827292940854157192853965661835148467015242404752362804661784536894149439883124031247082525264859525384281030677267417046959613808985748040661929196970664183344590360405601820460383565335474474302395314798633836584632339380265159168935679176127803539371528429126259135855320491319272360546001362538183765105540254124819511972057206510318028298156893997042020482391155264875521102213522189253183676882478735599903364794939666397166127596057949720363950050742654860566199778530661015732940660678554626724807448907845182675199584525421806385323078502567874752217610398698658458825610595774008525886399158949020656198924831967933514871014089242423903436047649066652515664774341393936791573390214256978089364634321001958139672365416543522037505418967123103349730306319697708805488384946401606585131415373340642379140628236062366241623065179154
58825738112673638541667590486829317365097583278128766788573623796274477065733795750057850674128771347640731697507095632291986339489373426773754394386977080640903293774450291113986906470105575533516638863112279315247814047975331507424534319816729226154380112241767046245186164336121391131496804620599520952904290649765926550748678572243766388535917900936255457372545075304082941788833951161098888098373358110522441965378687700329799154403163991609318025746082472284784762364478218987529989248660326638415529500027022409554111019739273037027522481461033491684086628901300111995837303106445214100259074396034809643007028455937163217525142044467192913997715650310680986185521042246391865220053238099226197397057694458196633088110193794779767343479193840132350077321010075512691636130596846913480707079198612031977658807231198075364260900618999210784184696101117532874802848640921847234888157082230744420993422613907980358370465345008822171008029672956597479007397264012529118714438069287586783713923662684
38294995141363656877559436188173251418412691100197256393140460308638550794787818744112258583071336294126349175652937685739135357977138397953176497271990297767710542030794806398990554023682078366911017277132913507751558185664635139569788255417043307025993876712483137550304628463892408528989328338637340992672940717254257361166225386487663916798266053084008606550692911925841142228439929420532161810642604669629382934228394956128406912756886949389147160683794554907865869696323211393177967701903261281784572805974924500562725656953872964810319767573063545083240742668949436980464759657463719337298805344813080835521511369688259879107912684260305354707675843624100268265733513370526723846038560186219876428110243911908628330398759197743234592524657695539684581843303494548908564079793200201288169288394460094077561741813262173165439646165583707235577451270415204994942251172966812727410501723125243542695610865544437241860888488542242547532559144457484672728209876599165987900768477477696271024789692221
173691501533359188516191078878110524565620409105195170575054122895742986149100056990824330105602744271426077166635439589222003103879578418621627866885520075444096076993941065051299509781874486214148303515564723733002758964912610627747414925896727665302690447242325061846370395598332895933468032768284728303321023713920812030489008235806716587149675738790843841879346625788695017235865254537678632356985562137500433999093280727591839557144579964589266003831813037586690205319758908936045419321672749733778573385245845768397178855164481310728790057347473684160355869425653628535271350103180838067630293785227299713472587141351344460935290909445217950189380262234653652973964796599718193068724396700669058264856285645695316093061045170185266622023094154307046350208529794422946498765632757830692047818447572572526174558128194822236381673452579725775354687774236087331804610336052378454397199432286428722387772064396026224298923357439066184580505521955595145233227927227265676445738018037704077591852168483
55604138432621575190245084432225437740107338683949123513741012241143565577094084079820162408487108514184626607684897503559793964803525931181817078099166135471365894498715551982739807484084230252080755209008517117769543016187070970920758379785818347419138118637580274993796413246691750598447061182621333086231389416565774640910653106695372589063597258516611375772236848818139213421182420546866667980473793303245916905195900880904446829562511102213175394897425442513143509174775556266868584748986551160405710140509748401298884604334095746804881957102189568167661695179661066772582451996689023561957859997262612931361457932317584603105371339525267340424166164007101537184540981834298701337743948784013117395657958272795055447176282586457592697247379209314150581919240357909047580742996075127182956980718437645391096369177275397537202863800671195819351549263693670058258862448096633956575635881105229818878813606568174258715816659828787222644762697931308472612491024644779370010123373899966766044232750627
151076799617660584048707988001988649520425103837142302746293017421239791386626968019741698920726908342381648339968998973714680876609987442565901423162636486525342831444776527344607855861374752363391946804989069844527317474778371630528773938857804576514177517874234468874321810824023211354697375116696870482551988156916764318988566628892748362854891740954467135313379417832090252073605106190772817529822912815219483685309543662768557478107467456844791338033618895850231616904775833015561078329826674806804664558611947927426876682821100475974294591969826824983506940169263701362594080100780280988248806269449903571618898914220227793511259308751791734589576487940756673208239632114366408115544121474989143950670083319220275727555246777893443184426055866161823065710817673775009156920555217112765268366210728872687919739689906698029808738693347671904795757739462993804103748075439719946086044982724286684647666307504258246337374230339263928897815763121372617066645419993204557831109671052735799958681311569
79486173823486161688354643441031583347037024469965306440854478505231336729232740698906052866489054399267589634783970379219249084336317426540009802830737495181064439146833928067181047214730940839457074183681953931068973213985767602077491214668875224228350499756231685320043416792806581575089276874763230873356828178401208036703483327480136937157486985590559503847588218301908210767212026452299492775996738375185751062400870059844962194794173706569101486709575712871355125538895782115683429590856983162267068368885523871102779403797765807746409347525601056308559793418318920629536554435222886289672714112218795722867279503640145641167441486047669554867745260549534478110085504567314377555652967288787461915619875586966339316858691650733873596952922166877082619636616041334937956073110692024723428734779866953847810837279414652212124704497135412424824963544287787748535690888352342447618011930636667084996361630602147557567298878251079177225839564543499879666398437330702132670987734498598498828064843331
81062734829272769756784085051551855094771303675961426783580748839187245328044392943566230821255051024729061110902563202492020943737028125291618434444020798218306225569528486175801082995781186098817409366129362852891557070576329438514704128632925085572631950077480675559133299996133771300714669014471912009452378343702698696154176909288644403165239337885885002907495182025084290849291405265977592010829322637907607105073057381614563188354010683971861368638644516235992116497544432397235893046568273968374949248764196873825691279793446938375996707540094791717698283256050784339023011246224381604523918421844631047945372750019220797156767131765869457140205016817917033111993468229305752213024881146163937006919793604750302411310080067132089167659687457548488410876766275198690767875408118392457932449201882999461984112158951775355040385118007292558948829628171219493174768354054929377347514941840645653244609034529638302879947171462115440500759405256807206641647248833685159363595676811726013210811925021
88475559865497062001086656159718700594462826784603119984695344660108350116801835833462580567239000564518254010093294158245653600547018612948019281093559189861158094090851443005443047378647033710559790434326486479481504212244190732334511623630748851841704508650917318715405612263256023297711199507737854467096303242542727006798987925016125532917667329623422520721286994365204542627959253183711168836575243810422030343654020542297270006490679731407091993313932004626715106373660914993836865407042160829087366908852673039008781504719519281603026552033862119985215319615795613921175202097314446105130219288048959099836965607581244151379124286682542024757167447992356582802653424620058924642839250668974946916549890226108835004494742129084145425276518221882322868802433640936581836054056721249116322287691236908062622643613689220273271636565566420911027580614220277647960267326014106655954762175075027053407639756046240291693897081144961524165742606620301006957519842737444531578709931938467689462622952193
11748770534166235689208537627662266370646767440152040143053285354750982035688521242675283858175019701933223130251011489858500862186155362964717721684682586320343770940619823637278709423190149643870856615871910044364054677743916297768607750739404025769903861604447479979852120135605410768527270739159007898741047617893785613770853854201680714629670440053629076904322813072033483911306805118873407260913115917550900310831750184637396906311543775396182920048490042549112025241158977573373060752148329758224785400773608372599553304567144407388347478786683619559710636761393265144134566102959753680564293536900436480509761638221971709725591792899188571273354725459694009445166127385498800107923652634627742524197256293883245900597165077917041148501713018614942682099308478811749461241322017353054585633185043323514220107385148847857344097187208245785773210236395497031175698788025099647220871430129211943522785941398591934154142374775398039530054089795479499666683922381961801426661598676106675745081109663
84277365233685133952696317768832611087704454158775423231223322531034780385145030267308511330460662036810999047402471359027959651836839545754453707993904514972355329422973225078029515394538264765172232958997139249363262964525987632657767621169230058327418871476198746550472038382340355687167785040965558757658502890605824045870205117081608641591104892172968374669771196271122009244100182486110928155723712999647891796658906637100434893576106948801063996049635515045759048291235656533942091332480365057366811524560640096994559488902217930960759152281755778236149438588700323672098764998485589676034149324047455212823766388339501900645239158710272718187118881895047574763298742241274383198788803494717915260029876679955594785706356038477035220158466146801352367408830963985475904988050624209516554581183886437401872671152726437833197452479126341700639893037261651985928003559804921341101033040752651069460047103310517877105286845946145438656440240286863408415986279045704598872155923069457994151849594647
155379385428893365963326604459547521274838408722295691783124662555408484603620456054849266426982222726575968089119901296299085832070742826533746239360327308973648971131360079360094371628241419231800575831066064780372808000718397872680074651218657059085944511318285710174098832708012220565180354553862153680189202037872752271389802784313894116990845005171480692471290790295594239739993712848979253159329020349914322861358003660191550744186336158193956345912107546721297486312910827657577354683167514166091505845259846633120386487987226497749314160215910774507479401088794996248186965333238453163361304040800501796610324120213129084670136511474327812320540861520507836175880827125346725569287832969321789237896140133577696534465657473673679397794700611893222926796875584408634467548450210001763158357967384810178299194562915283474999432821777213629461962211246589022404426460182990194832740242827503807804981621380614734755266710922503763035090046574629561302415271219669851064791857105558578061245731700
53561197482217010005623348391239199695061937361374139018667414538197571081742797585179892422621553909632857733432881006431701969334109404589752984733099604838994509393640095834979608631827422515057529914398890986875790264694846687991206497840122617996317330098552471136286161519590784061567486959591107898420732440096037985856510941859049799603800755943778147049340413784799339755429213541759758374338426738356195042764759140159145162976375703863513698339307874958562274327019643696290032024621233241981407549487646934356163048455649593346046652225615497161295265375866594142899099870380303814983682769649578988149839609234113531164593849700092133888792233824368020290891277375771089030841541313465858941835074628781541173333915616627391797312917359557017998675842982233826326890580904024024925977741857533701212299966990705611291784372328425541925281779490896588889688367127789123313384316810345418261589768135183171535714022138274628974547197475211624060536773722868536315605054803515458682823760935
5574519895540419195749329879898766947690039159178633786717404170066556713113376145827588775801429759338411027091950792409042931247670323606595760124379145354049055103161958215052638038796141021963183261659060775048566407392699055558533891865488415172169855616780461143312811256057682673998972172354597659893264720241892658852284384453054494363839433984984199379980692045531888414787356524301835382484506316379144426045962791198584694181463636011701980867470687716917177039843445711725730912283747891283809801114627278587336983218029543300938525847246694765530035868837022226984527457428924926546736021881396033835691390561758976327291018240793665602258036974494483960912177708791142296231387498654629443734448817416822583092383896524066600936979654896467495814185209222368817176816443246540193808940428883698007184279612126425402374222207866143717134844785623021979365530618089451906515375032494592534662034791754270581973190360401706478008214800453492580177337314548366786885036689297512793215647281
31574261458973885676081159392958098475105612203141018254398076279104476848412478360140731776571423196260957856787619629325157242264424812625571723998078467187625522995605420649589671577134506372692601491342234347102961102713115751391553868327060899257622580278751019342098675597507216759941959088191068049971321730180296831187595573067240723086314588773599051013241351898171372592277424366361297101008967152123596834344635816095972813913112469664768110294043468775618258415069582346455604515403847862146554547227838957676266696397729926070513521013753940903936614685363216040563566638815121541994613320639186118606988442619160704738144899069278133585948362909688322106583278096101787705804893710191597880107501716454073172855825838507201905403375373386081710055159377797266934289566614260205610670096021980030710191046982852153270153031878121471094344699825117571128064163856994673555500581041493259673618364382330505640828700770941832380808810939094281097522299489819029808639103779897413992481892519
50408875882458045103817216930783090617623480940906905314851308915457266725528613760426403379617337740669103758160713267123596421491719891142023181297911437205410768314670754147903374140243795615950973941490253427067573033051926964915832517219443016328076895172929742919851242675654781220191021121525110908419127971538152763293609014499716208861673268521188514144734120130588319559586512700804057698762596817772987955470631295592485318459061139401326755442988605609225563033064034134584526776144081460599378178579357394784530825556498611889197782680348802518506832905334777656133689603865896022716086847761416473628472300826609774563546374404903047270525390087168872850683646384881179840707754726694092591056514628864734465784003072359221771322132928041521828522215388664020502424248853925847880932629844185110438612474719599462698231905546544504479218150157314135436051216834418632312866446593846685489508352084126004374423097995519675608971311696254126270565610861338139778796674625338183520660467380
166733535903189579762807819350298444047543177445226889750925091320785236706750493833222830230810031992769917884309471083065566990870165884908308166463884317909632643847352838655947344719459515742352424873593403264457741479226274897836469241327301640175509634896730509453407547717716396100779234556364480609047001366048752254355843673824410650095664928351153397253317157013216261330709152712246762486347819303786965916404299559823813938528441574558354593444820141636224546271767104308038037038383523079508750876467737895580128244128095770952009107292716204293341781156066812084808726877808320947364926224286325302060881825481736548246678311984357544108808434131720094443414550355241253665349847888745738564966823496365782586304025638896920497498278735391558508728021040304940346534397673983855962096216896540274827882484034512585667998161117387409805018005824655155088484198486085795046386997259248425643480841041507912606712702887070117187629222529450131286479809373798807333912208904702571847799937937
62857993454947830442851028390215795271696411262128758528864716913850178461515878923436803889426424151873907331027676498441069310159226573070562981227066923829328227697683938810509756046575798638471134203734345422314485169468487652742824955038659549851347326242890405133406393469670168829773249505597831957730482926313518836260188517341668059681824776931425935279217672194479413878023310642269046150126183915008987248812965850652722945964123794826750115731078774981856677019691194946203916007967928614848186102809699648751713664304758611097115980522897862739372876006676755548757267074601807273310067538993798856203908851749729628057443153779195135406982167608832925329240254585673524502875740528936800390123296129041594265172510784711137039363006392879100220956907606967008444253742332045639629655313353753102777831168895340896331400976113016947437422400529622830013955850528331739624064097329102753393214666695312537011240077943761268334870961739654617921133545574518458702291556983563372364364689241
164578009970097626818293194593172511235482840879944446743095212337903557155415175620893433056291764958459929029486159346124683425816012209326173652084238846771269195267127444080122781503561251682105736769817200103510032528562115237037377253971155106867799621498137279670134933167874051404612460876748313175894634353371044338345564890812498990279937157576061457444871984497157568380644460189360535536530784379740143597331727155555124032955080503008415991152265113428278553452027834760650179840130884434682635355201878988503315297456405771050232662573549725509982375901424933653642046694370633364202307823335648998300575718191839815323806870747496845989872684824806544890705209715148197317097118266240152205644577160362854855204577793629910199848446806226915698774488669321357719318256326106166121286697783461753387453531003622765254855220836629153819215674781633320721751118715641002363411461157053739199751353526966381165397021148299775738116161560562441502842544535131182023755172823265145803172961180
37971663503262251285187689458768908652661881104915596791267756217204230481467635483239068246366750519856089317853028342513127018452478735621413092213392640453125598883167741758636272034150261566578194420466288312417248854419310324485894795393748725124911891549925748411839904167716260539146301148697529132369988229601781292361661656550934122945470959669341244311173041190025646491618845009676907219067258889715413224751525213289752193270357134053272484903310405454206061433192172754753966117847167728454700560871743624551562462598770165792674210044996535665348291582634503025519560295752373761931797077239639195776865400214886262623668295230661067255225729180605560586374954761443599511313130549524046051577892371139447445294177319391955339235526841873304477851758176786261246446827585568611355740717893869570886546557475499289489811118115735026696908745092019716498293858939616962843618554005126981614101557366213295953356958639135910021232484807486680673350687475715235593759400668027755398399323666
174848114391736155852252885333211879174365603630245681364345612727055792975158033669278647400283199430844441062400892699381712038313924569148971351813115700916131995157602889165186967449848696108984766952621730200893839037890214313151005226936967372041191385056270594491989240060036410304560991968913924934778307728472708357546196066809742530979361238695340106590176435154209933658091701425163440908109020837434082343128372166333242934105673720256204173008798261733672125134855655087876789017185467576554355775739129838550658826183352031958928193970649450198083477228871991936496897596241827851406221771922812724908455761694902469012901224296690662300454920308670741532692119080094569923196808908397867719122033043140129354266760260724989897677862208556141709109404577865163015830049298234036002495070665530079605789898613776234509143585661869686956798556842278164890997100947711155273830275653079389638148575589209760039615831050829669959620202265212681771448031791896389429106933206264681847920764968
31860922950694590388011152775486713357920071848631912245267674543915083864696644636685640718664379860416997787340261773203112216791478457897444661845404365609383103168423051668467331476840410194148722734184246923625588641040651576106951029039398154290491552435211845075381926472316509128747348309295552106074166292396345000101109079348419891627487835759160753225512963050767014231610550573376772937227462295850720961091106574764275488350158562721655207020059625733028420978215441210847238747393142725423892835695712515500580147447006043006021641263108301357498289139009132803124471015158322717798432399116293231728527509129954002341478624900453613463035557376077084211984958102334325094950532562098519914126919417004772472039187412206945327305943795819636419929965524659952042938032020226712893920906356681564782379148315180533417888680220999650499886736503144902704641256389877959902874263129097252880230698781951775823715160995407603215189264659040261561958467230995602142806469969212739782968333259
160911992858044510275641001863247334238868278133557452124440291095475385420447271835920647995097889937007639363357365780183310162392580745085183465451922234808042790100978875091463653869707281689133197316051271899648179104073812620113447857577698585517074237650613608158332630905381349965748753986133401850103472842164273897633806408949679908167129267207829315016636828978301044648508456763883473204657790206433585621630394509024149092324627498442305780531991409743804624291604534796140888294623891575720841595230942742967414987520512872630981629955786430876292260950515660880392049757572015192540007474922895335090910080059335200888054457417264276334242235166788058104454455713925033180551023295180588635533451106163107235526221606641776898471627071933091916198876076302609488560306437430598869084384990995101790073997392475961898025863473693990376555890012403068099864545380408280544798602000795298758322760813029785933799442306105034318871977997471367516896052245844064991044480400403149644145979528
27439334796339758412932042376733008509397754835895898460017196805611240900625360186472531540330359399144712554390485396313365474561420637264131876036756621967840959911281268218864874825688422767139286874211939224899798144095713875119392674561852803363433198868371868398210297287297893754674238289945195015147650728921299128360362549400213937786457590423529915392791911535065288670324268005342442496856611373177104868543377183203678383205063567636943656272441942408170018322057571969763359378951328292746611129471690506424477295905380346589216178667630098659930229628262152496641042110612959017362021638868041375404966981702166783336281778724195791552763693653902535593720999311883373481530602340235243543886374971408148600705472230165676817907861160979795052694099300224355773483013414024622079586941402514833054513566074185251430625167078807842701957339671351808522966114441019807136348428266072521305448718828452918467829807902258131610148679531633684371043476554416117337076108769943295520697077952
72354973082951720237881165772546061722042805193056095765653700302193372681645946142363166910436296275230874070292866820816768192082121984400062258356577536824396834879044737124177979268787352023518626456787028117762059673251121802149427622955122061404740378042424007706857044905408970183257498767359706653851972628320656369672719756710238629508988713479713652539745587208046508510668442586625623804051455905938921420516448319599813403131721200365370271688353700296129503439006261839071422062489103062018663965615554143506670433755144839679096872165481374884280660503901401850953074398855070800795577224301796245562935866981513090392233762232267499054206826951629173104453912249492604344021052406936751350628903999568036325637009118276619882994831613096207599195875156290361863694404637114152952111324016841840134629932897805150496423510161958570790984803976399543804640900025396060130433507329065144515192186560202803937006422520531422650348290509861988881334730119635064501663366714191728466450914537
169235297774742940942021355333816189156217093916866514144397222804106429142499680470202043202652961249057752119231483256629168048425903149871720842919274749143433559443816121809467646900540312246725232604149468633394699211739535774896817819681466703923989721793718210279433158794060422093865412638349201961893401514274768496061998599751372218959654738654228225676485441020849693690523287113360413891431372347718365404340785109535031213242576203242694909345390195057769451445093026949757687563029228696555287901138694025434761487733300661288043927272826415036660006265820235396466013905747282043563400279979810078217832910919157418093634005790579208324336651322282087238793407151461185663804335409840280410175579785942240883772413508571787457304889015222348403115386573285290728676573270716882126059828740082864243212786906812229478671752965405601311231500833299787749197735267510562487374501314292496053407340415795083155332014895563809824401057461031038610125336390709278567186529319346744727431697949
0x4544d5543544603
0x2544d5543544601
0x544d5543544600
0x1544d5543544602
0x3544d5543544604
0x404544d554354460303
0x202544d554354460101
0x544d554354460000
0x101544d554354460202
0x303544d554354460404
0x40404544d55435446030303
0x20202544d55435446010101
0x544d55435446000000
0x10101544d55435446020202
0x30303544d55435446040404
0x4040404544d5543544603030303
0x2020202544d5543544601010101
0x544d5543544600000000
0x1010101544d5543544602020202
0x3030303544d5543544604040404
0x404040404544d554354460303030303
0x202020202544d554354460101010101
0x544d554354460000000000
0x101010101544d554354460202020202
0x303030303544d554354460404040404
よく見てみると、256倍ずつになっている平文がある。
0x544d5543544600
0x544d554354460000
0x544d55435446000000
0x544d5543544600000000
0x544d554354460000000000
RSA暗号には乗法準同型性があるので、
が成立する。
と書ける(
後は
0b100001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111101111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100110010101111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111101100110101
これは
from Crypto.Util.number import *
from functools import reduce
def factoring_mersenne(n):
x = 2
while True:
p = 2 ** x - 1
if n % p == 0:
return p, n // p
x += 1
with open("output.txt", "r") as f:
output = f.readlines()
enc = [int(o.strip()) for o in output]
pads = [b'\x04', b'\x02', b'\x00', b'\x01', b'\x03']
M = []
for i in range(len(pads)):
for j in range(len(pads)):
msg = pads[j] * (i + 1) + b'TMUCTF' + pads[len(pads) - j - 1] * (i + 1)
M.append(bytes_to_long(msg))
M256 = []
for m1 in M:
for m2 in M:
if m1 * 256 == m2:
M256.append((m1, m2))
E256 = [(enc[M.index(m[0])], enc[M.index(m[1])]) for m in M256]
e = 65537
t = 256 ** e
n = reduce(lambda x, y: GCD(x, y), [t * ee[0] - ee[1] for ee in E256])
p, q = factoring_mersenne(n)
phi = (p - 1) * (q - 1)
d = pow(e, -1, phi)
flag = long_to_bytes(pow(enc[-1], d, n))
print(flag.decode())
$ python3 solve.py
Public key cryptography. RSA was first publicly described in 1977 by Ron Rivest, Adi Shamir and Leonard Adleman of the Massachusetts Institute of Technology. TMUCTF{Ju57_4n07h3r_R54_ch4ll3n63!_C0u1d_y0u_50lv3_17?!?}
TMUCTF{Ju57_4n07h3r_R54_ch4ll3n63!_C0u1d_y0u_50lv3_17?!?}
Discussion