この大会は2021/10/30 3:00(JST)~2021/11/1 3:00(JST)に開催されました。
今回もチームで参戦。結果は146点で174チーム中119位でした。
自分で解けた問題をWriteupとして書いておきます。
Silver Water Industries (crypto)
サーバの処理概要は以下の通り。
・p: 4で割って1余る素数 ・q: 4で割って3余る素数 ・N = p * q ・token: ランダム20バイト文字列 ・N表示 ・tokenの各文字で暗号化をして表示 ・encryptByte(uint8(b), N) ・各bitを取り出し、以下を実行 ・x: ランダムN未満整数 ・x = pow(x, 2, N) ・bitが1の場合、以下を実行 ・x = x * -1 % N ・xが各bitの暗号結果 ・tokenを入力し、当てたらフラグが表示される。
legendreの定理を使って、平方が取れるかどうかを判定し、bitを構成し、tokenを求める。
import socket import primefac def recvuntil(s, tail): data = '' while True: if tail in data: return data data += s.recv(1) def legendre(a, p): return pow(a, (p - 1) // 2, p) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('flu.xxx', 20060)) data = recvuntil(s, '\n').rstrip() print data N = int(data) factors = list(primefac.primefac(N)) if int(factors[0]) % 4 == 1: p = int(factors[0]) q = int(factors[1]) else: p = int(factors[1]) q = int(factors[0]) token = '' for _ in range(20): data = recvuntil(s, '\n').rstrip() print data cs = map(int, data[1:-1].split(' ')) bits = '' for c in cs: if legendre(c, q) == 1: bits += '0' else: bits += '1' token += chr(int(bits, 2)) print token s.sendall(token + '\n') data = recvuntil(s, '\n').rstrip() print data data = recvuntil(s, '\n').rstrip() print data
実行結果は以下の通り。
205201352501296706577599140901269118023 [15551150965336841481303694869076376235 31280307824210708974663470243763905866 29686532167500809255011608954026372858 106309129038325740668553576547575722895 202531659368076325005653483089932408387 36899989699214318343493638727401747895 63095878593574183611076025132760595344 139603090508040346067839585710972344278] [133511823929658508276605320930926599852 68586205733744541217165989652076854754 95125055626225880615545091125114396233 58406967620528760082049126513783953661 149803365505036756094383920414814034180 55337697109939807564346950612040780505 137524867405573002059152942916469074128 129714072386835569939954105066623406483] [128649732687775885720385521607178838031 76204584633415310803161678896708350340 204786253625542731010067073941390579527 160304440720186755379605741827373000642 73115465943360493635501681281223039753 159650430042498768063614263507303096475 85361659488918561618080960678978331978 123456508766250080643937363353522254593] [98425794902769757596716306639794966788 92174663485868637274383535623840358573 75818285289244849967541025638562962176 180289210331278907132862285537725229365 164776478841649708171768154006703309546 196898475808670431539757322983047172971 148808528938083105592657924913417458857 120121982460640324634782225223471183892] [115056394227165395945251281863618542959 75122527388613039270230125442823485697 117034480692333340306908298750547182987 1438843669871314472396152833444486852 142803248690470930825313585552584556160 91234879379394171868749588702961652271 77412719608943537094763387646810099914 89156390846956305088860301084043650512] [86192829635697200577218087522899943459 129586423689102613522357277789515638279 155815667661835675814818301461770227888 10212485135984014220307068963077651384 42740615256728263789280142476464602132 7819911283038414646998817462881739972 173779491342105988175201259938793272308 104884949494215628951062126653855559326] [23457085896895845707206998523185162382 5259437546149171221102572201142630435 185240734713383466650798228124258331001 185955037187995129859497733288068407433 65340204326777479200320970493255444515 72368707321429810047977140074735777164 130475328722169242267617517251537045859 155860175925187117502416307195294074913] [167333881284315974076689229507936292849 80967121439621246958868367811702953631 129782445878924195241138753525421371721 94541685485544767842606502263635963916 177887553330868767090172627293472689277 146195016766634146570076290040841897575 94228282252782373260284019275845673627 165894835442458505682232521757664908596] [27627079191803081189498795874627868748 92750378963906147943981362484287300563 131539828540776851482888319039364260983 156297277982273389436032005817584491748 187940581833148381157688334100610426088 69619406525610122532016909182657515854 197014005833487535828398767242650189476 103727650931880287581778336091578488268] [93359695352067960497958687805523252317 130256350313027598032765038156173064299 182511755067475677810022439401644709497 172720643848505738997457792316018466526 111737541180623808942756845878561402792 114233851666580025244497001560190154445 70535956066086395009129943025469992621 117624415448786377850230056200647559317] [92285594805332770709094052943031340274 195278675997794609545719313718490751144 66290220940291796682502496143968489379 74582188356191533084742131163342201764 162322236492596447076935974648303224105 122520490762427824874611262823154423125 80342655063526134071906544720414361460 62962578858339846261489550596447930224] [75038194159941741829719056722047315640 142896132478711771987714869142021478121 121385825808562058103172682192188110478 160822770320337466430249041498628888952 101551593114175050638697193369680021327 138452480906735836204678964256515125740 178242975807969656190357744983715424471 189235561802013679222822581501905164084] [29208023268952078758314169734331828302 31575796165648827278123934950635425369 129717598372873687829838818378652097018 72627448123432734061519333165084761076 92566789171206206963466118419173482198 140667507776942907234366607998372615819 72045512926442515077667246509030650847 127487924694539321892066736533453851331] [124160668065795792776067267796896140899 167349962518637938933418758267177534982 113022889506344406365921634984737164844 60649217807726994468712511333963761081 142176351095809333381984017409458561727 100614657831085302527950065195982582902 109657192238613782412584622675817063983 113594650128438423930448472045220085063] [12624223549004718866784263005147337707 57947195513931203527325943649357945563 27785896821585777774703269039420417306 84698745598981229057306235174243849761 186874597158155713602425267782282008365 159570925999583130335192156674460454845 74976884768597269206124131205506238750 41210158849268768204793917833611736588] [97435289611410296911178284306527121688 204617103647324192868935876796294159980 80713346298216454647242300111524682952 144361211534468840160576871421355114370 112705443200226417328449002988365186669 9708913692045139739751848467961427225 180144691200330557034140944683713229003 118077983370592709058056959092434914275] [81349280591429048964841772453198844388 143461533563614820049749141592051885544 17014264063427099447758762678696473142 83752614307257667896895499684774264028 76832960558236829260557562405949352064 66378954906348076753462545555373133579 158644768414361930508332021019700454518 8054683295619130495371596062911939218] [47728993412305131451931502291552250872 23565345831842523792160044844958492728 96832534655723584168028624329294189834 61901281902075663285491389728930083533 7197696702122637803381123097795861279 113755545563597210552227528438270615155 131204445269445780037258391301346873280 94068747071933819507007583789271536414] [125552728026235392096233188470748995165 204768855308703680830869863325240086846 102353228058667708035709878745447703302 154851188131576658808473706129586246164 148049793750982061245696908183859447400 39875326904411423450657949118317447750 26823906622662091318638055988729177746 49113285052080237590860162332963904668] [185614492613659480830200228605006121522 49858624092147477156687742141026495328 14111466418951255666353671900770556827 49246480288598949383181909942870603640 148596901330661963565901746277303701137 204950093608505889253830145585012363982 21406548080121661018862741467018894407 82738943507387042533755879283809695674] OVGWrpcU4xXvQ8PA7GeO flag{Oh_NO_aT_LEast_mY_AlGORithM_is_ExpanDiNg}
flag{Oh_NO_aT_LEast_mY_AlGORithM_is_ExpanDiNg}