SecretShare
X的20个值和R的21个值已经被全部泄露,X和R都是1024bit的值,此时X总共泄露了32*20 = 640,于是,此时我们可以使用mt19937将其还原,还原之后,我们往前推20个1024bit的值,便可以求得A的后20个,此时便可以使用方程组求出A的第一个值(secret的值)
import random
from Crypto.Util.number import *
import gmpy2
from tqdm import tqdm
import itertools
from extend_mt19937_predictor import ExtendMT19937Predictor
leak = 158171468736013100218170873274656605219228738469715092751861925345310881653082508445746109167302799236685145510095499361526242392251594397820661050281094210672424887670015189702781308615421102937559185479455827148241690888934661637911906309379701856488858180027365752169466863585611322838180758159364570481257
p = 667548632459029899397299221540978856425474915828934339291333387574324630349258515018972045406265448494845331262999241448002076917383740651362641947814545076390796789402373579283727117618532504865966299599663825771187433223531022829811594806917984414530614469374596457149431218829297339079019894262229453357029
c = 9658009093151541277762773618550582280013680172161026781649630205505443184765264518709081169475689440555639354980432557616120809346519461077355134139495745998317849357705381020225760061125236265304057301286196004542729553944161451832173970613915423841610378207266606500956362098150141825329354727367056070349148059780287916811442861961254066733726576151134458892613951223277692935141880749737598416235307087782001086096114978527447987308876878393763055893556123029990282534497668077854186604106027698257663251502775547705641708624619340185646943640576690633662704397191379303254341343433077302686466850600522990402912
N = 11790604055677230214731474049594783873473779547159534481643303694816346271798870343160061559787963631020684982858033776446193418629055210874285696446209220404060653230407249409973790191858423402504530660556839353260629987853933304089439885784684686555554108157760445567974629355878575105480273451284714281430590737346099023372211403461861104391534461524711472734572409128196536805998116015230502045333769525693468193385557827209520108839913096017750428926467123493650506193757937746017474062985480713594474378324234033232933140389879312722642144536418253323908290256009510135710208223393009237664704631175216240376891
X = [27322282703709511636610535806856853612612796524565963685352821215367702697670029638291472271242231649191714479260517868076984065989639273952206721225394449809512736309152963717666213669565294618889004878502587203292128915123582846437035618297859622373514552659661751919687138158714389205196365694996691846589, 91805670014258342004112051538515158497977951249015335208828337677065661825541672701641011001509677094927054079355384880161339840664535548572711525978354947655159331190183669338379535914171636373271711777662899462412133698069202075760175522929409084089926367963132890460921167025666146228784502671381146711019, 66920426958285786458658248767160362920977647430969423155679844462544037512659182174429654322739226216034435833627040279237803034255254749729584723025199164153117416758037930376665769001615518843769072788984118288795594844920830871790000441610452127329422157793240336858492947908675187651204641324347460068225, 5635003138990118507194506070175086831788576611651929217926664518872856396687497543355452282932759792957815071333069987192436081970967301109108636547955400620912244311244917063515500624803643902206301188548901042409824866123277584384961209855675044800618682367677428510425729333590673520619706804051348640739, 42911212495890251189243677773682023641022813626312578449123776026147091248993904833237700742589532896024024290404122897946672451644535270088285040557715419433742408043822628453894022912746599564701384030731888203683342200542550299021286164291609827209395613247858235556551967071480178477133096158123879827699, 76393649631519338646914577444953093042692772742019473672660460181129677128343169843350211463697634615281051117955282687134957585026912161500321667521577171255986824727912674810018184784281896427202094684250866650111325600908495879530295097533881586073569958225485019114664641193908557023741440163457101525203, 79331720524907914908041917436319036255433828287857696014126718015259444328868691897077115926451094233087906865422458137916362681754241848523015955481140065721679824678490152910531795497192050173146826300375546645932629884190392808650921115445830421927238985963684104496062702531620988113510613763043301631209, 34982047515239854027766260430773762615551551624040650169394931537920509836795394460680530502277933252344187876902284046236616780767724165813414385632503982500888235012434695560644146038269348824756839799255778718600829638272259933042402900324341026396868817418250681063616205184019449176410323763562609906256, 152419925215633402551037300484006425703951620959940334562270582763998688826301000834158083436618204487451531847804246279293440954881219913553470971941979760351736535195521294640333019382215259554425750740788262905693120027837778006639912907313405166887419201498400381605572044667968915799849914769886304855469, 7879488845815070796446980042322339499701160196159748256186513316298957679171765636643576866967308539398870809808590995575054707633585889782359230149070757943670854204408729244422811261494912348733104477093541158692065916137178255072991528458124264991587844119002172895462900656781795781239777162351236329010, 127514038284722450386599280575918286761060061225148526034466492640545892790142008459404252129894996614536417849770574953585543450549469396103606474736901175227788222676384874264401431651217507860669506781393523454290522077615631381023377385798837961138591946856445250933293025411868935836885350047926486897489, 73523397212562449962797322407800812476585158706372414597501601851658987192829920809491154804458216832212324494892234069944533082031068984251998442644045753330748501446440305199570609290581400456976816997103538669480916305434314437973807842397862244118575425198027445648296131215572682266387781847672276278105, 147348014782035263557672447461924770257688598176948741569841957313948631675235455168853571742962013610522674191595258437726941866803703946285611136667070559549648062172513441677274884328986422767953568184453855423313870118663236611714535321243624425127415452246621538957156768109051856015526921750034402814181, 107396275167806069862891568873373042687841775147343147252292584080352003252925523814251826627764872245643578589633919368796490434000761591564932634968812847926559005905574630301932715978159346119216934096015784765061798867698507880003720720252714582289061793936959096457352973294797409716470781535683208662390, 111553464316331929637928443274530253217732988900086332463018159619552721468104642096142476958790984335379754112570481423047457696400188847850295271972015619208861578167810076654492163584804626343101458265888573313262592215690879907819608901681957001286346406746245896172209892822686784252329450759497940157817, 152943203796417374728939496393486026220901654584673108139041097288333960510566510856084351323729904924640199712274885275910827036984793221821982353991291820643933058458639690879406578278096815789977814737418245161029735350306516366692394206323956675431185964629143452067819609148096407834611672577927865412392, 166939346435092804149361985966477026395490869535977170373479116381554623702088662590719710620315106535772321371981485114999353813392487182004380368980412304867141197881584179316802946420573712884869207029807032629508803275758495901655593573546020371363238621118513519707566850164838945538265367877703756561143, 26423433781831557303965218555715659459964805457875828323769054957811368313465747671809917056868138188812894920739462390440860614780050790166810205409831687879766298929374237068956851330280802672993787657036328401560347701569533751904003924033296103431436132762238032533631035466975563403490612905290747500034, 67047973882442026847054596043723251652019181826511387455752441275468608245799296406017022023236054643173589545621722148324431435563020855357273526765167504290556087855144498047600331414488129605467552541562176094510433084299150667280746009871632940612151871433089450237469253872190728223812058292760792048327, 105924866908333941056520542136279835222849349889633638544229314020165638653054683617844504431167584527725854457445810982830025832114705779346552001573819055283000133195971409988231558773967828820675125138322725072735898886865540351014422681184954059397593545246946913932272750078695992276555307091275819914167]
R = [48569244180151557205855904296808011040310995626104180491157243372509052545941856322458676083637192423759673249488348244220016168699221727901608142636001227515271570470832957720323162015971262916929310707561503164723954043820660896942792324593262461443662124187475159194385198887788939215142063719188348359051, 399560428917764748532974912549579755263000603891290776423346071350694440330590365031312031331274402458285677563081638572382883720599282186196046608483533823720739712120092762382758124206813101015928952314835833408960456083078746116580899849811889743359253318716527623535224217277574914341453477162101109304521, 544937610110319318485732752819003299421900030583201619755186005418563198983178922830516722630658659738570688423587906326520697827239870483140381321035311084086872965680985895264808839131965351704781276541438910273061170401708989341983455583148675268945159916067944049744805262336310315984482684477033006734287, 216744037211012509915361607447276981890614637104708083303422302996997658600655325492799426696396129495740380030328486134561677905050895542824084902986133831827678164847190414920208201189028697970734101241668427915881431218718486605095651504942024880541330783245275847421981881418579001271393784051391703426641, 358625812085590413825860316781088505612223852757468112073999439178735803245018313087878704846077887688463179850461438873261474235563220723161414348183847290126780153336526214025645436877174640254582752642464699350692290355463838062957644227630261763964930791440438099097640358707938365934460765509770713422802, 329857997030576972729986815876777011654061886138716155424533348668225264710995265453134377944058890193085147694227229106567976594481366856016163332702128728982600129466565167735283489379015199424332093096162272256722421083932784837620468049877168507039726118947169347011547142986416984741443370137649949904461, 521812627987763620197812504899506910796946504850708570349667428211492401785051233252744740254058319678959842396710646375803470815528610618211136953181796072686187773678649762524131730689630306575027480171902373722358678386430941181209464823845330723780859962168995759134414896419704465387883718956885830089204, 620605218346899770429088593442355698411635752845778736545505196875522232769153705673917137123151382118878693457232039690080398947092819660645917999264381455940649845030563994094759265923737413658758514560434230280086651591011706752452769554749328591613510563389443179182520711924593818729897121279090347342924, 534016646028730727016209888504911167747835078463480349483097394578844831015450227232096300754745773717118904569821782762146568167060585024245190142726454552015507956174745334336178848983708347742569471390328051491668238788357493167057460607669219247924675410096486695085439718252206048534436114032676610106347, 88871679849011995091477347542680893996957786653924621705917895209560005458566552006873467270402185918706978818367798743110976595300781848502254399030378598802075501163781912730014790884964070072432678736909128727529050058640555516131888412874572332236693843543870582425734398659970857777429709921292338764056, 77024841353020037736072564671223528105040202905964518913084686725674447555778849580882283151820241410917813178127609045792603404416216635536183501218256797138848233777386900397758052436048023588018973775841429672943588531118120531410941119451112420484244073744860360930771612798228353879418110447613074103121, 358131172545144245017725954943677533669555698100417873957892816178502113778385580423968891034087567143540060215845324391804373505677355257229040486254496477702089813554705646138200115877254745085768546159462550014224359419574896275660358462631189412166193397952134507043404147073495973377634175173793168251233, 595636882372433751112400377321820719222073583356736222414778628384644623278463447644996314505722523949309416112422725194730843858188224367723911893838329601709038981556011159397788345709995936511801237268248578658463705897357408752571102163768839107050797667376601808299838509114230891979045461260911946415320, 395153432543738329086362624068574193255148332584492341243454102818775521905404929692387305225461869410602734064349062513722129355095148212452014041134124275764033437990333449975234478218955405224252839531173866658663372361601107447751367104423527019655871175001744848253584734158351726745551407103825286804486, 511651161619212591638982125008326295422605195202233521320827338823708335474320214987121320809834264020752488400694820412703895872293388034242395958165882000777796549830919064001864919411540442573874044781198129468230793584507078981976925332170577699344654086418908951152825866266645119298895702972413286583958, 601919715680710925447421076338078877766683489886991843150153117466383328925764100913643134608445665513170565014760605822708267601346612031986281277217875335899155526135282569237278337539198315798958944970975021604720637053079350115793916435033122479416157536224071649845398032404766802667331247026412465230897, 234820987787318061334406237477763453845428872967687650137534289159784627741552971152526376041477941966693305257682995443922827379938186523574311761092208293391813942996139561570362972331975732091581332378414745250571717259039007898729580445364373819332663464831222506646891337600543033325723536694430603794811, 564564388847953966153849841262670748320376369154008357907963983929690302350574296789978591185246923974920161797995189321841257011791368992972604074119872162539552292552362460968499190796503841035750507639233595470833894116053816701560762298879109510469040808411623441894361241720213857716595525048872499260906, 190023992656957817692909813007060815279103259429273681430127196398700351704377473750794054807013341268132331757606642253453911294388801612173064841530999650755116853772677649649669913317951539550313189351839325961495963700012333982508285993230904890545000476087981313109451079110864357972818329854737276461934, 590597067702351181983043135203878889479903130263737024839941242154123057325926009112777887235038694551309864253859910817785607380293492455212053557033975616644911248422981687394189486917578693691299595122658518879946708562394161159104748320544408107959224087679644857953504156164164979544525935685064483284685,158171468736013100218170873274656605219228738469715092751861925345310881653082508445746109167302799236685145510095499361526242392251594397820661050281094210672424887670015189702781308615421102937559185479455827148241690888934661637911906309379701856488858180027365752169466863585611322838180758159364570481257]
AA = ExtendMT19937Predictor()
def Append(a):
AA.setrandbits(a,1024)
for i in X:
Append(i)
X.append(AA.predict_getrandbits(1024))
for i in range(21):
_ = AA.backtrack_getrandbits(1024)
A = []
for i in range(20):
A.append(AA.backtrack_getrandbits(1024))
A = A[::-1]
num = 0
for i in range(20):
num += (X[0]**(i+1)%p)*A[i] % p
secret = (R[0] -num)%p
e = 65537
P = secret
Q = N//p
d = inverse(e,(P-1)*(Q-1))
print(long_to_bytes(pow(c,d,N)))
print(long_to_bytes(pow(c,inverse(e,P-1),P)))
print(long_to_bytes(pow(c,inverse(e,Q-1),Q)))
colorful_matrix
The Approximate GCD Problem – malb::blog
膜拜完大佬的博客后得知是AGCD问题。
造格解决:得到ms后,ms泄露了5个256bit的数值(5*8 = 40),而a泄露了37个512bit的数值(37*16 = 592)已经达到我们所需的mt19937的数值了,于是,我们便可以知道iv的值。aes解密即可。
import random
from Crypto.Util.number import *
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import gmpy2
import os
import hashlib
ns = [38630062416586710341458654419912504176237737247477839749085033080367529539859992076587411537805430366799412095876782912512744262957062106155418341531142309858429218208463637096843365217114990765965110566415965985105403996944993619708417839598461935470469097206342256014086162845948208599334925650727933097059538199199685364793545286980392966271769914201657672004082101110775504946586957241075964270454872257405872181588544468173017149763827540561921126826597515171761064800381983526515300315517818122598179574900255685121991744205071544970, 41522753602903133841910260331594875922287719226997542592715810409935551768308104573333760854332533376702631593490915962706512143045107096658851885513727202513616813054397657610854303071682604806070009002234312854968365250748142324994926715544722158698813288131533399544263105858513134170084625526223987620550110255872688155827773099232631041345207194483609514502522566888883736218471849075697433311580004701384847571029783514418685068903758509270527252444771313048094566344002411364378658592832008194309873599342916391769027015343562030852, 41542983120532762175372001624404625565366126179958909731196555044290633581761361918706298428954501507557598076910710787422049443564800530253137695341299743714514361560156305534490483794181933110893966453220306980682146624294992100948497284459992930850081254114996830645068636306625330524465991656430799359422407117440063911943625477783216502523414967017151717597372146324488526509879620785458016456593044828784565522423332830549325397893426472247197776412026158371655860380929692662547882654137064941217130915364306358205055760044763651406, 42853015443318352230776688785915441259875645365236808434164117288657978345098324019250085686482568413223085548506789311679316323466083886556772338612177680666217592255234589446979456714341877135596118517098603502394776049958587301113539552072352462301070489369653155854389890761241450743607560719433910573462283304103064437843063566946231984094581307498714742271881862348689297267558023093643893310002803310596286441071314219020032740336515363830250477649030557311461077069407775907176409762823453607196260454965048316567154365877848652918, 31152961872836435078296602982779340735140569916125711058616435902653202922218293684857125091648631460215120167354825278469413413558325850576700866199515219603448136082693185200558425103833947831228064760642508443585470729998592994719564254894176473779555436230174300038353978808432410463449170865897259181312953584408177790825688497584119467820716449210429423337019604137134889051973100340798405991782200038835066294194815913887924272593864934325496116821854183293510325217934617021428710898873475027666892706022106386340733691632884942848]
A = [12789809461864875489953273982997537541385904671489556544122095227619591140533414669794423644619127980362623481580128258914287474542792728686579090501397390, 10463950513938701625808784986819665844287315724639315128677227520960105897990256530542006653611594269012930935073966767351788182657861624733138283749460454, 5253244650607533810967862436125419800679723144526973463211784033045021824966560017919956773745212139142517766154626849426827164032731516615725539069585525, 5644589184984504085855423002268477365020278981591337230721358313393863912025011466727192648804002734561676112555123877764178690726130713927642577324443238, 4231732567865883627242742552738439372803539125622706171540910152922080004603138662537022248675968288205781990968838888633816697065257733344028576518431020, 2483388920404524165854675814798022834892112957478917588986471421083048888193527751575039626887367465858751417977246719312923814782809309525841102293919541, 3252353812256192711411255830105475125944842449239880454539397067913664088094160819193268643401968970009466652179043139341471403913410402646923633696154454, 11575010486066232687430367040977113580882826853104996856464797182632266635060724100357205810604915010810884387573114266349621457564659060272935537811111850, 116107444921917032985259963199427176510900273385517435613848456370557161312731449337837406563733552524777525870560544042690403987311424820755256727586807, 5859050133610438843641532306693688255014116940390205022708310454673159702673207152462501010791971695002865650407033762568636006764435795015869726867643634, 5954075553161305677556950650395792531753502207483036473422070018485916621872566706504374038792527687442272405589975343003802956899043321092006127828986114, 4571747544457157571652286537158051402285727327066029382085461714597609990601683125994983291866807816649968826930652068427193317966970789937746419206862747, 7166507561570980603812241332170524724051295937096000768984168029904561160020043035660087151672164814332446644696618077835020463308343415953131944864257266, 4852042788460566411381271873349329096978244586097817622748766708426751073559942708861852208085367014057217116211249133109246735634468823924185525972777655, 11962941918999276757181090570698839032103646409734781047194175833198626142790676141060052011581957980660140931408560130449153056874213033784715711461403345, 10324508881746579337486319574059121005227580732153432145860775835052420139026016902518605634385512021513380467928195663920843022679549517463264144660593354, 13276257094435850052122403884510025189232513948002582716865201271569293297601525601586036713056700716929820641888489806178376555435219630186396004003438962, 6525051273399089095687950615197786094425890004112675057642687348101531212837185750558500720306108976630502328600886080197626115513445112562084719104488315, 12922888505610354933000354792496863801007995464403098763485264334670452387681468617068312646367483171083114539083453125614861357751571161533921864394641576, 9489726784141062031514945333087338495823600723655465328127755755022980083351477888038160719541864899912899592065620071698977397662002448273876711116012763, 10630316198843195148937849513165933809121991192035364160395429088101265852052098101114542104327663563661384303617672183366879116750889320604308038959012109, 12675564142993964272844760955973914547747654087592111324261755301551267959231076883765863344473167582531968290671984039948163579495803204811731286282708940, 11847724105274460405216443356582445218232627275228120716891711887600046501095390733716854871561352002320819466803698088448952127166615410820121973485089326, 5131676593756685549522564504727003861447389891839469018437277330988047271086971907217360711863971849879439418231726349935396008040776952541710218842744018, 8049060452950901277510497437779182190254362319091882684392717180429468875432078713802857488901441344429723298843967365750616860588029426099852763482179470, 2365060249260571713545479629411006471094806409182638354076861269679377537605360223984548798658469783472746989448405310909017645138161178501458084966625559, 7467521246204465304438401242342633361751371318557249418344587207503257890765643838557008735305668588521988487342275527781708126255070883848829062790678347, 5841608816993144092409175658260479687582056537041472535819914412630519543198558564258699185557903902095773598614097026740427138629173672250387442834578787, 3935779917509948624841228665498558015416911059417306651751360048412619176423173794541812556512582747588138532941031730797102738268660078594473168666677171, 1459083415233950534805962555425717865938763752937036513111696179351002303817986848490146888626704327653287774806488952733813718461674376764427084478395399, 6426876689549337938550615491086475536072547585103523407263007393570982327518298678278232288342601754164640081474537962710401178482959474762541185760732929, 5241364650650467046722868257809607948071188801137204831449976666385482519613365369974704486723941517654753205012497273820309153659423928739972270634209996, 6387483223002092292686097811446217867743566298067033295601210265979889577756648605354064672061975949925472022416479935990178719227937307079186916383092053, 170562164015232424518655058158727202269056868720093972639058422975773575660534168774299548952867348396798580779605954510297102765330549642318362861226163, 10004133230245713370426176448219282796530473722412487408402635996842671302539458739305597027107498342509248085998067976408732789438099488867425813748783724, 12325342879747412722323355648741345730921040452129462974449188258885453690169624888480720109964630270938743431623479816739889661554987977051169401841580388, 641543989928732942291347866597230552820621633110802944556141221591498546555080480758772801043509130524233886009444044150447511986129019395067102094826363]
B = [108715652691370707411987210267535348806, 131676833696101475747102644851662113271, 122436706338521558335484593966234623745, 255864866572301552398412638474857375629, 81098761191414480003681301866161112100, 322322463176364397336266169283851913620, 198167679309202772183020662350938553923, 326360662842236388778385468938922853242, 241812832858991643670485138860832357660, 69768236619183466076110136290750715548, 32383134960394164339076842474280712870, 147747232748027508904245311745435517130, 25327826075608705748116808975774398964, 65295332681674581261444632606267440749, 236756211690281667988216748814564193312, 106435149910135092172124474857722935730, 270727089812520941022075406571244846193, 206881193220261276126028739930244917728, 131961838897694897398340205404861333362, 219211823942216355573832791993673934321, 150960424777134558142309786444952807101, 51112048255939343109218372373173385772, 182065623911902509203036774197184164110, 168420344895532090057957641972492853410, 301808673225362418769168353084541667053, 132272458662433671393247350648662880688, 495672626901999558635736361346563007, 182444159345379042372018248514964944782, 144584137563407779776361378564517880036, 338518705859818740467225748906995999694, 205885429741815676881969528495365151019, 233897982464483450790005953366237992668, 279307677123402840425362992920185630901, 133493426228159673166382443820069696429, 316624110847744871475435405969944304329, 187931604382397525131117897387179435812, 220019728924915067987393012581921164417]
enc = b'cTmkMb\xfc\x05|\x1d\xc7\x13\xbaSe\xe0\xbd\xc0\xd9\xa3\x8cwo\x82yN[B&\x80\xd7KPwQ`\x9c\xbf<y\x8e\x8a\x97e\xa074\xb2'
# 第一部分
# ns = [38630062416586710341458654419912504176237737247477839749085033080367529539859992076587411537805430366799412095876782912512744262957062106155418341531142309858429218208463637096843365217114990765965110566415965985105403996944993619708417839598461935470469097206342256014086162845948208599334925650727933097059538199199685364793545286980392966271769914201657672004082101110775504946586957241075964270454872257405872181588544468173017149763827540561921126826597515171761064800381983526515300315517818122598179574900255685121991744205071544970, 41522753602903133841910260331594875922287719226997542592715810409935551768308104573333760854332533376702631593490915962706512143045107096658851885513727202513616813054397657610854303071682604806070009002234312854968365250748142324994926715544722158698813288131533399544263105858513134170084625526223987620550110255872688155827773099232631041345207194483609514502522566888883736218471849075697433311580004701384847571029783514418685068903758509270527252444771313048094566344002411364378658592832008194309873599342916391769027015343562030852, 41542983120532762175372001624404625565366126179958909731196555044290633581761361918706298428954501507557598076910710787422049443564800530253137695341299743714514361560156305534490483794181933110893966453220306980682146624294992100948497284459992930850081254114996830645068636306625330524465991656430799359422407117440063911943625477783216502523414967017151717597372146324488526509879620785458016456593044828784565522423332830549325397893426472247197776412026158371655860380929692662547882654137064941217130915364306358205055760044763651406, 42853015443318352230776688785915441259875645365236808434164117288657978345098324019250085686482568413223085548506789311679316323466083886556772338612177680666217592255234589446979456714341877135596118517098603502394776049958587301113539552072352462301070489369653155854389890761241450743607560719433910573462283304103064437843063566946231984094581307498714742271881862348689297267558023093643893310002803310596286441071314219020032740336515363830250477649030557311461077069407775907176409762823453607196260454965048316567154365877848652918, 31152961872836435078296602982779340735140569916125711058616435902653202922218293684857125091648631460215120167354825278469413413558325850576700866199515219603448136082693185200558425103833947831228064760642508443585470729998592994719564254894176473779555436230174300038353978808432410463449170865897259181312953584408177790825688497584119467820716449210429423337019604137134889051973100340798405991782200038835066294194815913887924272593864934325496116821854183293510325217934617021428710898873475027666892706022106386340733691632884942848]
# x0,x1,x2,x3,x4 = ns
#
# B = matrix(ZZ,[[2^256,x1,x2,x3,x4],[0,-x0,0,0,0],[0,0,-x0,0,0],[0,0,0,-x0,0],[0,0,0,0,-x0]])
# L = B.LLL()
# ans= L[0][0] // 2^256
#
# p0 = abs(ans)
# p = (x0 // p0)
#
# key1 = long_to_bytes(int(p))[:32]
key1 = b'0b5e732a48fc8c6f5ac6366212d2bc59'
p = 293423658885957174953198318664231534672400520068303593221989900395768107225130267646792968959460384248015583618158947268381852534151783869878808621629530642974652628810907251607210136313789978156955302211733219987661815438401343683
ms,qs = [],[]
for i in ns:
ms.append(i%p)
qs.append((i - i%p)//p)
from extend_mt19937_predictor import ExtendMT19937Predictor
sh = ExtendMT19937Predictor()
for i in ms:
sh.setrandbits(i,256)
for i in A:
# print(i,i.bit_length())
sh.setrandbits(i,512)
iv = long_to_bytes(sh.predict_getrandbits(128))
aes = AES.new(key1,AES.MODE_CBC,iv)
flag = aes.decrypt(enc)
print(flag)
LeakRsa
p^q Rsa_xor的高位泄露,我们需要从大到小进行深搜,有四个限定条件:
1、p^q = leak
2、p*q高位部分与n的高位部分相同
3、得到的p和q后面全部补0时小于n
4、得到的p和q后面全部补1时大于n
得到后我们使用coppersmith共计,250bit未知,可以使用爆破未知高位来尝试:
n=73822410148110759760164946405270228269255384237831275745269402590230495569279769799226813942899942423718229747478982630879557319063920515141217164980012063064986634632452289290326704640527699568662492105204165609614169349755365956569362139057327962393611139347462018186440108621311077722819578905265976612923
c=71808322808599218331233291542779486534747913572475630198802984648982830332628443972652322590637382696027943799004331488098592525306523343649935216419522329722152742610560398216737030893090641493326477786720839849938277402743820773957184083430369443325368720115515840174745825798187125454448297155036065857691
leak=2223117424030234543005449667053988296724455736030907136592525175314696509716321
e = 65537
leak = bin(leak)[2:].rjust(262,'0')
from Crypto.Util.number import *
import gmpy2
from tqdm import tqdm
# def xor(a,b):
# tmp = ""
# for i,j in zip(a,b):
# tmp+=str(ord(i)^ord(j))
# return tmp
#
# p='1'
# q='1'
#
# P=[p]
# Q=[q]
# for i in range(261):
# PP=[]
# QQ=[]
# for a in '01':
# for b in '01':
# for pnew,qnew in zip(P,Q):
# pnew = pnew+a
# qnew = qnew+b
# tmp = int(pnew,2)*int(qnew,2)
# #print(tmp)
# if xor(pnew,qnew) == leak[:2+i] and tmp>>(tmp.bit_length()-i//2)== n>>(n.bit_length()-i//2) and (int(pnew.ljust(512,'0'),2)*int(qnew.ljust(512,'0'),2) < n) and (int(pnew.ljust(512,'1'),2)*int(qnew.ljust(512,'1'),2) > n) :
# PP.append(pnew)
# QQ.append(qnew)
# print(len(P))
# P = PP.copy()
# Q = QQ.copy()
# print(P)
# P = ['1000001000011100010101010110000111101011000100111100000111111100011001101101101110100111101010111011001100111101001100010011110010100000001100010100110110000110000100101000111110110000101100100010111111001101001000001001111101111010000011111000101010100100000010', '1100111011010111101010100001110101111111100110111010101010011101100000101101010010101000010011001110110001011011011010000000100000111100111011101111100011110110111000000101100100101100100011111110011000101011011010100011001010101100111000100100110011001101000010', '1000001000011100010101010110000111101011000100111100000111111100011001101101101110100111101010111011001100111101001100010011110010100000001100010100110110000110000100101000111110110000101100100010111111001101001000001001111101111010000011111000101100010000100010', '1100111011010111101010100001110101111111100110111010101010011101100000101101010010101000010011001110110001011011011010000000100000111100111011101111100011110110111000000101100100101100100011111110011000101011011010100011001010101100111000100100110101111001100010', '1000001000011100010101010110000111101011000100111100000111111100011001101101101110100111101010111011001100111101001100010011110010100000001100010100110110000110000100101000111110110000101100100010111111001101001000001001111101111010000011111000101100010000001010', '1000001000011100010101010110000111101011000100111100000111111100011001101101101110100111101010111011001100111101001100010011110010100000001100010100110110000110000100101000111110110000101100100010111111001101001000001001111101111010000011111000101010100100000011', '1100111011010111101010100001110101111111100110111010101010011101100000101101010010101000010011001110110001011011011010000000100000111100111011101111100011110110111000000101100100101100100011111110011000101011011010100011001010101100111000100100110011001101000011', '1000001000011100010101010110000111101011000100111100000111111100011001101101101110100111101010111011001100111101001100010011110010100000001100010100110110000110000100101000111110110000101100100010111111001101001000001001111101111010000011111000101100010000100011', '1100111011010111101010100001110101111111100110111010101010011101100000101101010010101000010011001110110001011011011010000000100000111100111011101111100011110110111000000101100100101100100011111110011000101011011010100011001010101100111000100100110101111001100011', '1100111011010111101010100001110101111111100110111010101010011101100000101101010010101000010011001110110001011011011010000000100000111100111011101111100011110110111000000101100100101100100011111110011000101011011010100011001010101100111000100100110011001101101011']
#
# for i in tqdm(P):
# p = int(i,2)<<5
# P.<x> = PolynomialRing(Zmod(n))
# for i1 in range(32):
# print(i1)
# p += i1
# f = (p<<245) + x
# f = f.monic()
# x0 = f.small_roots(X = 2^245,beta = 0.47,epsilon=0.02)
# if x0:
# print('---------------------------------------------')
# print(x0[0],x0[0] + (p<<245))
p = 6814449132912466352143200200256605077873329465758477832056090562012411200107156482645933890997787435093806046493913273252717701817613907418845774345791241
q = n//p
d = inverse(e,(p-1)*(q-1))
print(long_to_bytes(pow(c,d,n)))
Neltharion and Arthas
一段CRT加上一段CBC问题:
CRT问题我们知道两组,且开始时的计数器是相同的(两组iv全部相同),flag1的前一部分是已知的('2023: flag{'),且加密后的密文我们是已知的,得到的一部分iv可以解出gift对应的部分为'I am Deathw',搜索之后是一段台词,大致猜出gift的前一部分即可将flag1全部还原。
CBC问题中,由于key2 = b'tn*-ix6L*tCa*}i*'存在部分未知问题,由于明文后一部分都是pad的,使用我们可以使用爆破的方式将其还原,还原后,密文后42位已知,一直往前反推导出iv即可。
import binascii
import hashlib
from flag import flag
from Crypto.Cipher import AES
from Crypto.Util import *
import os
key1 = os.urandom(32)
key2 = b'tn*-ix6L*tCa*}i*'
key_len = len(key2)
assert flag.startswith(b'flag{')
assert (flag[13] == 45 and flag[18] == 45 and flag[23] == 45 and flag[28] == 45)
flag1 = b"2023: "+flag[:13]+flag[14:18]+flag[19:23]
flag2 =
h = binascii.unhexlify(hashlib.sha256(key2).hexdigest())[:11]
gift1 = b'***********************************************************************************************'
gift2 = b'I tell you this, for when my days have come to an end , you, shall be King.'+h
def encrypt1(message, key):
cipher = AES.new(key, AES.MODE_CTR, counter=Counter.new(128))
ciphertext = cipher.encrypt(message)
return ciphertext.hex()
def encrypt2(message, key, iv):
padding = bytes((key_len - len(message) % key_len) * '&', encoding='utf-8')
message += padding
cipher = AES.new(key, AES.MODE_CBC, iv)
ciphertext = cipher.encrypt(message)
return ciphertext.hex()
print("enc_gift1 = "+encrypt1(gift1, key1))
print("enc_flag = "+encrypt1(flag1, key1))
print("enc_gift2 = "+encrypt2(gift2, key2, flag2))